diff --git a/app/views/cards/display/preview/_collection.html.erb b/app/views/cards/display/preview/_board.html.erb
similarity index 100%
rename from app/views/cards/display/preview/_collection.html.erb
rename to app/views/cards/display/preview/_board.html.erb
diff --git a/app/views/cards/previews/index.turbo_stream.erb b/app/views/cards/previews/index.turbo_stream.erb
index 5176b8417..a7bc7099e 100644
--- a/app/views/cards/previews/index.turbo_stream.erb
+++ b/app/views/cards/previews/index.turbo_stream.erb
@@ -1,7 +1,7 @@
<%= turbo_stream.remove "#{params[:target]}-load-page-#{@page.number}" %>
<%= turbo_stream.append params[:target] do %>
- <%= render partial: "cards/display/preview", board: @page.records, as: :card, cached: true %>
+ <%= render partial: "cards/display/preview", collection: @page.records, as: :card, cached: true %>
<% unless @page.last? %>
<%= cards_next_page_link params[:target], page: @page, filter: @filter, fetch_on_visible: @filter.indexed_by.closed? %>
diff --git a/app/views/columns/cards/drops/closures/create.turbo_stream.erb b/app/views/columns/cards/drops/closures/create.turbo_stream.erb
index b3bee9f84..4be411ac8 100644
--- a/app/views/columns/cards/drops/closures/create.turbo_stream.erb
+++ b/app/views/columns/cards/drops/closures/create.turbo_stream.erb
@@ -1 +1 @@
-<%= turbo_stream.replace("closed-cards", partial: "boards/show/closed", method: :morph, locals: { board: @card.board }) %>
+<%= turbo_stream.replace("closed-cards", partial: "boards/show/closed", method: :morph, locals:{ board: @card.board }) %>
diff --git a/app/views/columns/cards/drops/not_nows/create.turbo_stream.erb b/app/views/columns/cards/drops/not_nows/create.turbo_stream.erb
index f78a91093..9ca8365d5 100644
--- a/app/views/columns/cards/drops/not_nows/create.turbo_stream.erb
+++ b/app/views/columns/cards/drops/not_nows/create.turbo_stream.erb
@@ -1 +1 @@
-<%= turbo_stream.replace("not-now", partial: "boards/show/not_now", method: :morph, locals: { board: @card.board }) %>
+<%= turbo_stream.replace("not-now", partial: "boards/show/not_now", method: :morph, locals:{ board: @card.board }) %>
diff --git a/app/views/columns/cards/drops/streams/create.turbo_stream.erb b/app/views/columns/cards/drops/streams/create.turbo_stream.erb
index f9c63881d..3f6251645 100644
--- a/app/views/columns/cards/drops/streams/create.turbo_stream.erb
+++ b/app/views/columns/cards/drops/streams/create.turbo_stream.erb
@@ -1 +1 @@
-<%= turbo_stream.replace("the-stream", partial: "boards/show/stream", method: :morph, locals: { board: @card.board, page: @page }) %>
+<%= turbo_stream.replace("the-stream", partial: "boards/show/stream", method: :morph, locals:{ board: @card.board, page: @page }) %>
diff --git a/app/views/events/_day_timeline.html.erb b/app/views/events/_day_timeline.html.erb
index 48d76c18e..244414d2a 100644
--- a/app/views/events/_day_timeline.html.erb
+++ b/app/views/events/_day_timeline.html.erb
@@ -1,7 +1,7 @@
<% day_timeline.events.group_by { it.created_at.hour }.each do |hour, events_grouped_by_hour| %>
<% events_grouped_by_hour.group_by { event_column(it) }.each do |column, events| %>
<%= event_cluster_tag(hour, column) do %>
- <%= render partial: "events/event", board: events %>
+ <%= render partial: "events/event", collection: events %>
<%= local_datetime_tag events.first.created_at, class: "event__timestamp txt-small translucent" %>
<% end %>
<% end %>
diff --git a/app/views/events/day_timeline/_column.html.erb b/app/views/events/day_timeline/_column.html.erb
index 463da27e1..aefe9258e 100644
--- a/app/views/events/day_timeline/_column.html.erb
+++ b/app/views/events/day_timeline/_column.html.erb
@@ -4,7 +4,7 @@
<%= column[:title] %>
<% column[:events].group_by { it.created_at.hour }.each do |hour, events| %>
<%= event_cluster_tag(hour, column[:index]) do %>
- <%= render partial: "events/event", board: events, cached: true %>
+ <%= render partial: "events/event", collection: events, cached: true %>
<%= local_datetime_tag events.first.created_at, class: "event__timestamp txt-small translucent" %>
<% end %>
<% end %>
diff --git a/app/views/events/event/_attachments.html.erb b/app/views/events/event/_attachments.html.erb
index 3c62c8108..faaf73f5a 100644
--- a/app/views/events/event/_attachments.html.erb
+++ b/app/views/events/event/_attachments.html.erb
@@ -1,7 +1,7 @@
<% if eventable&.has_attachments? || eventable&.has_remote_images? || eventable&.has_remote_videos? %>
- <%= render partial: "events/event/attachments/attachment", board: eventable.attachments %>
- <%= render partial: "events/event/attachments/remote_image", board: eventable.remote_images %>
- <%= render partial: "events/event/attachments/remote_video", board: eventable.remote_videos %>
+ <%= render partial: "events/event/attachments/attachment", collection: eventable.attachments %>
+ <%= render partial: "events/event/attachments/remote_image", collection: eventable.remote_images %>
+ <%= render partial: "events/event/attachments/remote_video", collection: eventable.remote_videos %>
<% end %>
diff --git a/app/views/filters/settings/_collections.html.erb b/app/views/filters/settings/_boards.html.erb
similarity index 100%
rename from app/views/filters/settings/_collections.html.erb
rename to app/views/filters/settings/_boards.html.erb
diff --git a/app/views/mailers/notification/bundle_mailer/notification.html.erb b/app/views/mailers/notification/bundle_mailer/notification.html.erb
index d874430fe..e7478b6b7 100644
--- a/app/views/mailers/notification/bundle_mailer/notification.html.erb
+++ b/app/views/mailers/notification/bundle_mailer/notification.html.erb
@@ -2,7 +2,7 @@
Everything since <%= @bundle.starts_at.strftime("%-l%P on %A, %B %-d") %>
You have <%= link_to pluralize(@notifications.count, "new notification"), notifications_url %>.
- <%= render partial: "notification/bundle_mailer/notification", board: @notifications, as: :notification %>
+ <%= render partial: "notification/bundle_mailer/notification", collection: @notifications, as: :notification %>
- <%= render partial: "notifications/notification", board: @unread, cached: true %>
+ <%= render partial: "notifications/notification", collection: @unread, cached: true %>
@@ -34,7 +34,7 @@
Previously seen
- <%= render partial: "notifications/notification", board: @page.records, cached: true %>
+ <%= render partial: "notifications/notification", collection: @page.records, cached: true %>
diff --git a/app/views/notifications/index.turbo_stream.erb b/app/views/notifications/index.turbo_stream.erb
index 869582ef7..4d74e0941 100644
--- a/app/views/notifications/index.turbo_stream.erb
+++ b/app/views/notifications/index.turbo_stream.erb
@@ -1,2 +1,2 @@
-<%= turbo_stream.append :notifications_list_read, partial: "notifications/notification", board: @page.records %>
+<%= turbo_stream.append :notifications_list_read, partial: "notifications/notification", collection: @page.records %>
<%= turbo_stream.replace :next_page, notifications_next_page_link(@page) %>
diff --git a/app/views/notifications/settings/_collection.html.erb b/app/views/notifications/settings/_board.html.erb
similarity index 100%
rename from app/views/notifications/settings/_collection.html.erb
rename to app/views/notifications/settings/_board.html.erb
diff --git a/app/views/notifications/settings/show.html.erb b/app/views/notifications/settings/show.html.erb
index 76b891f2a..8c1e94b19 100644
--- a/app/views/notifications/settings/show.html.erb
+++ b/app/views/notifications/settings/show.html.erb
@@ -8,7 +8,7 @@
Boards
- <%= render partial: "notifications/settings/board", board: @boards, locals: { user: Current.user } %>
+ <%= render partial: "notifications/settings/board", collection: @boards, locals: { user: Current.user } %>
diff --git a/app/views/notifications/trays/show.html.erb b/app/views/notifications/trays/show.html.erb
index 4bbf2e78c..f61c52d51 100644
--- a/app/views/notifications/trays/show.html.erb
+++ b/app/views/notifications/trays/show.html.erb
@@ -1,3 +1,3 @@
<%= turbo_frame_tag "notifications" do %>
- <%= render partial: "notifications/notification", board: @notifications, cached: true %>
+ <%= render partial: "notifications/notification", collection: @notifications, cached: true %>
<% end %>
diff --git a/app/views/prompts/collections/users/_user.html.erb b/app/views/prompts/boards/users/_user.html.erb
similarity index 100%
rename from app/views/prompts/collections/users/_user.html.erb
rename to app/views/prompts/boards/users/_user.html.erb
diff --git a/app/views/prompts/boards/users/index.html.erb b/app/views/prompts/boards/users/index.html.erb
new file mode 100644
index 000000000..c05adae5f
--- /dev/null
+++ b/app/views/prompts/boards/users/index.html.erb
@@ -0,0 +1 @@
+<%= render partial: "prompts/boards/users/user", collection: @users %>
diff --git a/app/views/prompts/cards/index.html.erb b/app/views/prompts/cards/index.html.erb
index 39e1f2bd6..253e6e543 100644
--- a/app/views/prompts/cards/index.html.erb
+++ b/app/views/prompts/cards/index.html.erb
@@ -1 +1 @@
-<%= render partial: "prompts/cards/card", board: @cards %>
+<%= render partial: "prompts/cards/card", collection: @cards %>
diff --git a/app/views/prompts/collections/users/index.html.erb b/app/views/prompts/collections/users/index.html.erb
deleted file mode 100644
index 1d2e6d564..000000000
--- a/app/views/prompts/collections/users/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= render partial: "prompts/boards/users/user", board: @users %>
diff --git a/app/views/prompts/commands/index.html.erb b/app/views/prompts/commands/index.html.erb
index 7a6ef82ac..5ade0e353 100644
--- a/app/views/prompts/commands/index.html.erb
+++ b/app/views/prompts/commands/index.html.erb
@@ -1 +1 @@
-<%= render partial: "prompts/commands/command", board: @commands %>
+<%= render partial: "prompts/commands/command", collection: @commands %>
diff --git a/app/views/prompts/tags/index.html.erb b/app/views/prompts/tags/index.html.erb
index 0ccedfcc9..7ff9bbb1f 100644
--- a/app/views/prompts/tags/index.html.erb
+++ b/app/views/prompts/tags/index.html.erb
@@ -1 +1 @@
-<%= render partial: "prompts/tags/tag", board: @tags %>
+<%= render partial: "prompts/tags/tag", collection: @tags %>
diff --git a/app/views/prompts/users/index.html.erb b/app/views/prompts/users/index.html.erb
index 1d2e6d564..c05adae5f 100644
--- a/app/views/prompts/users/index.html.erb
+++ b/app/views/prompts/users/index.html.erb
@@ -1 +1 @@
-<%= render partial: "prompts/boards/users/user", board: @users %>
+<%= render partial: "prompts/boards/users/user", collection: @users %>
diff --git a/app/views/public/collections/card_previews/index.turbo_stream.erb b/app/views/public/boards/card_previews/index.turbo_stream.erb
similarity index 100%
rename from app/views/public/collections/card_previews/index.turbo_stream.erb
rename to app/views/public/boards/card_previews/index.turbo_stream.erb
diff --git a/app/views/public/collections/columns/_list.html.erb b/app/views/public/boards/columns/_list.html.erb
similarity index 100%
rename from app/views/public/collections/columns/_list.html.erb
rename to app/views/public/boards/columns/_list.html.erb
diff --git a/app/views/public/collections/columns/closeds/show.html.erb b/app/views/public/boards/columns/closeds/show.html.erb
similarity index 100%
rename from app/views/public/collections/columns/closeds/show.html.erb
rename to app/views/public/boards/columns/closeds/show.html.erb
diff --git a/app/views/public/collections/columns/not_nows/show.html.erb b/app/views/public/boards/columns/not_nows/show.html.erb
similarity index 100%
rename from app/views/public/collections/columns/not_nows/show.html.erb
rename to app/views/public/boards/columns/not_nows/show.html.erb
diff --git a/app/views/public/collections/columns/show.html.erb b/app/views/public/boards/columns/show.html.erb
similarity index 100%
rename from app/views/public/collections/columns/show.html.erb
rename to app/views/public/boards/columns/show.html.erb
diff --git a/app/views/public/collections/columns/streams/show.html.erb b/app/views/public/boards/columns/streams/show.html.erb
similarity index 100%
rename from app/views/public/collections/columns/streams/show.html.erb
rename to app/views/public/boards/columns/streams/show.html.erb
diff --git a/app/views/public/collections/show.html.erb b/app/views/public/boards/show.html.erb
similarity index 100%
rename from app/views/public/collections/show.html.erb
rename to app/views/public/boards/show.html.erb
diff --git a/app/views/public/collections/show/_closed.html.erb b/app/views/public/boards/show/_closed.html.erb
similarity index 100%
rename from app/views/public/collections/show/_closed.html.erb
rename to app/views/public/boards/show/_closed.html.erb
diff --git a/app/views/public/collections/show/_column.html.erb b/app/views/public/boards/show/_column.html.erb
similarity index 100%
rename from app/views/public/collections/show/_column.html.erb
rename to app/views/public/boards/show/_column.html.erb
diff --git a/app/views/public/collections/show/_columns.html.erb b/app/views/public/boards/show/_columns.html.erb
similarity index 85%
rename from app/views/public/collections/show/_columns.html.erb
rename to app/views/public/boards/show/_columns.html.erb
index 9b02db191..03e4fcfe0 100644
--- a/app/views/public/collections/show/_columns.html.erb
+++ b/app/views/public/boards/show/_columns.html.erb
@@ -8,7 +8,7 @@
<%= render "public/boards/show/stream", board: board, page: page %>
- <%= render partial: "public/boards/show/column", board: board.columns, cached: true %>
+ <%= render partial: "public/boards/show/column", collection: board.columns, cached: true %>
<%= render "public/boards/show/closed", board: board %>
diff --git a/app/views/public/collections/show/_considering.html.erb b/app/views/public/boards/show/_considering.html.erb
similarity index 100%
rename from app/views/public/collections/show/_considering.html.erb
rename to app/views/public/boards/show/_considering.html.erb
diff --git a/app/views/public/collections/show/_doing.html.erb b/app/views/public/boards/show/_doing.html.erb
similarity index 100%
rename from app/views/public/collections/show/_doing.html.erb
rename to app/views/public/boards/show/_doing.html.erb
diff --git a/app/views/public/collections/show/_not_now.html.erb b/app/views/public/boards/show/_not_now.html.erb
similarity index 100%
rename from app/views/public/collections/show/_not_now.html.erb
rename to app/views/public/boards/show/_not_now.html.erb
diff --git a/app/views/public/collections/show/_on_deck.html.erb b/app/views/public/boards/show/_on_deck.html.erb
similarity index 78%
rename from app/views/public/collections/show/_on_deck.html.erb
rename to app/views/public/boards/show/_on_deck.html.erb
index 2ccac6066..539efa64c 100644
--- a/app/views/public/collections/show/_on_deck.html.erb
+++ b/app/views/public/boards/show/_on_deck.html.erb
@@ -4,7 +4,7 @@
<% if page.used? %>
- <%= render partial: "cards/display/public_preview", board: page.records, as: :card, cached: true %>
+ <%= render partial: "cards/display/public_preview", collection: page.records, as: :card, cached: true %>
<% unless page.last? %>
diff --git a/app/views/public/collections/show/_stream.html.erb b/app/views/public/boards/show/_stream.html.erb
similarity index 100%
rename from app/views/public/collections/show/_stream.html.erb
rename to app/views/public/boards/show/_stream.html.erb
diff --git a/app/views/searches/_results.html.erb b/app/views/searches/_results.html.erb
index c43852131..7cdd92df9 100644
--- a/app/views/searches/_results.html.erb
+++ b/app/views/searches/_results.html.erb
@@ -15,7 +15,7 @@
<%= with_automatic_pagination :filtered_search_results, page do %>
- <%= render partial: "searches/result", board: page.records %>
+ <%= render partial: "searches/result", collection: page.records %>
<% end %>
diff --git a/app/views/webhooks/form/_actions.html.erb b/app/views/webhooks/form/_actions.html.erb
index bd57f00ed..a887fa644 100644
--- a/app/views/webhooks/form/_actions.html.erb
+++ b/app/views/webhooks/form/_actions.html.erb
@@ -1,5 +1,5 @@
- <%= form.board_check_boxes \
+ <%= form.collection_check_boxes \
:subscribed_actions,
webhook_action_options,
:first,
diff --git a/app/views/webhooks/index.html.erb b/app/views/webhooks/index.html.erb
index 95fde69ef..778598381 100644
--- a/app/views/webhooks/index.html.erb
+++ b/app/views/webhooks/index.html.erb
@@ -23,7 +23,7 @@
<%= tag.section class: "panel shadow center webhooks" do %>
<% if @page.records.any? %>
- <%= render partial: "webhooks/webhook", board: @page.records %>
+ <%= render partial: "webhooks/webhook", collection: @page.records %>
<% else %>
Webhooks can notify another application when something happens in this Fizzy board. You’ll choose which events to subscribe to and provide a URL to receive the data.
diff --git a/app/views/webhooks/show.html.erb b/app/views/webhooks/show.html.erb
index fc7435565..95f0a2f0e 100644
--- a/app/views/webhooks/show.html.erb
+++ b/app/views/webhooks/show.html.erb
@@ -58,7 +58,7 @@
This Webhook hasn't been triggered yet
<% else %>
- <%= render partial: "webhooks/delivery", board: @webhook.deliveries.ordered.limit(20), as: :delivery %>
+ <%= render partial: "webhooks/delivery", collection: @webhook.deliveries.ordered.limit(20), as: :delivery %>
<% end %>
diff --git a/db/migrate/20251105122933_rename_collection_to_board.rb b/db/migrate/20251105122933_rename_collection_to_board.rb
new file mode 100644
index 000000000..bc9824903
--- /dev/null
+++ b/db/migrate/20251105122933_rename_collection_to_board.rb
@@ -0,0 +1,21 @@
+class RenameCollectionToBoard < ActiveRecord::Migration[8.2]
+ def change
+ # Rename the main collections table to boards
+ rename_table :collections, :boards
+
+ # Rename collection_publications to board_publications
+ rename_table :collection_publications, :board_publications
+
+ # Rename the join table
+ rename_table :collections_filters, :boards_filters
+
+ # Rename collection_id columns to board_id in all tables
+ rename_column :accesses, :collection_id, :board_id
+ rename_column :cards, :collection_id, :board_id
+ rename_column :board_publications, :collection_id, :board_id
+ rename_column :columns, :collection_id, :board_id
+ rename_column :events, :collection_id, :board_id
+ rename_column :webhooks, :collection_id, :board_id
+ rename_column :boards_filters, :collection_id, :board_id
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4c6901d26..fbf5f98df 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,17 +10,17 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
+ActiveRecord::Schema[8.2].define(version: 2025_11_05_122933) do
create_table "accesses", force: :cascade do |t|
t.datetime "accessed_at"
- t.integer "collection_id", null: false
+ t.integer "board_id", null: false
t.datetime "created_at", null: false
t.string "involvement", default: "access_only", null: false
t.datetime "updated_at", null: false
t.integer "user_id", null: false
t.index ["accessed_at"], name: "index_accesses_on_accessed_at", order: :desc
- t.index ["collection_id", "user_id"], name: "index_accesses_on_collection_id_and_user_id", unique: true
- t.index ["collection_id"], name: "index_accesses_on_collection_id"
+ t.index ["board_id", "user_id"], name: "index_accesses_on_board_id_and_user_id", unique: true
+ t.index ["board_id"], name: "index_accesses_on_board_id"
t.index ["user_id"], name: "index_accesses_on_user_id"
end
@@ -105,6 +105,31 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
t.index ["card_id"], name: "index_assignments_on_card_id"
end
+ create_table "board_publications", force: :cascade do |t|
+ t.integer "board_id", null: false
+ t.datetime "created_at", null: false
+ t.string "key"
+ t.datetime "updated_at", null: false
+ t.index ["board_id"], name: "index_board_publications_on_board_id"
+ t.index ["key"], name: "index_board_publications_on_key", unique: true
+ end
+
+ create_table "boards", force: :cascade do |t|
+ t.boolean "all_access", default: false, null: false
+ t.datetime "created_at", null: false
+ t.integer "creator_id", null: false
+ t.string "name", null: false
+ t.datetime "updated_at", null: false
+ t.index ["creator_id"], name: "index_boards_on_creator_id"
+ end
+
+ create_table "boards_filters", id: false, force: :cascade do |t|
+ t.integer "board_id", null: false
+ t.integer "filter_id", null: false
+ t.index ["board_id"], name: "index_boards_filters_on_board_id"
+ t.index ["filter_id"], name: "index_boards_filters_on_filter_id"
+ end
+
create_table "card_activity_spikes", force: :cascade do |t|
t.integer "card_id", null: false
t.datetime "created_at", null: false
@@ -138,7 +163,7 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
end
create_table "cards", force: :cascade do |t|
- t.integer "collection_id", null: false
+ t.integer "board_id", null: false
t.integer "column_id"
t.datetime "created_at", null: false
t.integer "creator_id", null: false
@@ -147,7 +172,7 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
t.text "status", default: "drafted", null: false
t.string "title"
t.datetime "updated_at", null: false
- t.index ["collection_id"], name: "index_cards_on_collection_id"
+ t.index ["board_id"], name: "index_cards_on_board_id"
t.index ["column_id"], name: "index_cards_on_column_id"
t.index ["last_active_at", "status"], name: "index_cards_on_last_active_at_and_status"
end
@@ -169,40 +194,15 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
t.index ["user_id"], name: "index_closures_on_user_id"
end
- create_table "collection_publications", force: :cascade do |t|
- t.integer "collection_id", null: false
- t.datetime "created_at", null: false
- t.string "key"
- t.datetime "updated_at", null: false
- t.index ["collection_id"], name: "index_collection_publications_on_collection_id"
- t.index ["key"], name: "index_collection_publications_on_key", unique: true
- end
-
- create_table "collections", force: :cascade do |t|
- t.boolean "all_access", default: false, null: false
- t.datetime "created_at", null: false
- t.integer "creator_id", null: false
- t.string "name", null: false
- t.datetime "updated_at", null: false
- t.index ["creator_id"], name: "index_collections_on_creator_id"
- end
-
- create_table "collections_filters", id: false, force: :cascade do |t|
- t.integer "collection_id", null: false
- t.integer "filter_id", null: false
- t.index ["collection_id"], name: "index_collections_filters_on_collection_id"
- t.index ["filter_id"], name: "index_collections_filters_on_filter_id"
- end
-
create_table "columns", force: :cascade do |t|
- t.integer "collection_id", null: false
+ t.integer "board_id", null: false
t.string "color", null: false
t.datetime "created_at", null: false
t.string "name", null: false
t.integer "position", default: 0, null: false
t.datetime "updated_at", null: false
- t.index ["collection_id", "position"], name: "index_columns_on_collection_id_and_position"
- t.index ["collection_id"], name: "index_columns_on_collection_id"
+ t.index ["board_id", "position"], name: "index_columns_on_board_id_and_position"
+ t.index ["board_id"], name: "index_columns_on_board_id"
end
create_table "comments", force: :cascade do |t|
@@ -232,7 +232,7 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
create_table "events", force: :cascade do |t|
t.string "action", null: false
- t.integer "collection_id", null: false
+ t.integer "board_id", null: false
t.datetime "created_at", null: false
t.integer "creator_id", null: false
t.integer "eventable_id", null: false
@@ -240,8 +240,8 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
t.json "particulars", default: {}
t.datetime "updated_at", null: false
t.index ["action"], name: "index_events_on_summary_id_and_action"
- t.index ["collection_id", "action", "created_at"], name: "index_events_on_collection_id_and_action_and_created_at"
- t.index ["collection_id"], name: "index_events_on_collection_id"
+ t.index ["board_id", "action", "created_at"], name: "index_events_on_board_id_and_action_and_created_at"
+ t.index ["board_id"], name: "index_events_on_board_id"
t.index ["creator_id"], name: "index_events_on_creator_id"
t.index ["eventable_type", "eventable_id"], name: "index_events_on_eventable"
end
@@ -430,19 +430,20 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
create_table "webhooks", force: :cascade do |t|
t.boolean "active", default: true, null: false
- t.integer "collection_id", null: false
+ t.integer "board_id", null: false
t.datetime "created_at", null: false
t.string "name"
t.string "signing_secret", null: false
t.text "subscribed_actions"
t.datetime "updated_at", null: false
t.text "url", null: false
- t.index ["collection_id"], name: "index_webhooks_on_collection_id"
+ t.index ["board_id"], name: "index_webhooks_on_board_id"
t.index ["subscribed_actions"], name: "index_webhooks_on_subscribed_actions"
end
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
+ add_foreign_key "board_publications", "boards"
add_foreign_key "card_activity_spikes", "cards"
add_foreign_key "card_goldnesses", "cards"
add_foreign_key "card_not_nows", "cards"
@@ -450,10 +451,9 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
add_foreign_key "cards", "columns"
add_foreign_key "closures", "cards"
add_foreign_key "closures", "users"
- add_foreign_key "collection_publications", "collections"
- add_foreign_key "columns", "collections"
+ add_foreign_key "columns", "boards"
add_foreign_key "comments", "cards"
- add_foreign_key "events", "collections"
+ add_foreign_key "events", "boards"
add_foreign_key "mentions", "users", column: "mentionee_id"
add_foreign_key "mentions", "users", column: "mentioner_id"
add_foreign_key "notification_bundles", "users"
@@ -472,7 +472,7 @@ ActiveRecord::Schema[8.2].define(version: 2025_11_03_125353) do
add_foreign_key "webhook_delinquency_trackers", "webhooks"
add_foreign_key "webhook_deliveries", "events"
add_foreign_key "webhook_deliveries", "webhooks"
- add_foreign_key "webhooks", "collections"
+ add_foreign_key "webhooks", "boards"
# Virtual tables defined in this database.
# Note that virtual tables may not work with other database engines. Be careful if changing database.
diff --git a/db/schema_cache.yml b/db/schema_cache.yml
index 78c8e718f..60b8b29da 100644
--- a/db/schema_cache.yml
+++ b/db/schema_cache.yml
@@ -20,9 +20,9 @@ columns:
default_function:
collation:
comment:
- - &23 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ - &22 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
- name: collection_id
+ name: board_id
cast_type: &3 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer
precision:
scale:
@@ -375,7 +375,7 @@ columns:
assignments:
- *20
- *21
- - &22 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ - &23 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: card_id
cast_type: *3
@@ -388,10 +388,61 @@ columns:
- *7
- *8
- *9
- card_activity_spikes:
+ board_publications:
- *22
- *7
- *8
+ - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ auto_increment:
+ name: key
+ cast_type: *5
+ sql_type_metadata: *6
+ 'null': true
+ default:
+ default_function:
+ collation:
+ comment:
+ - *9
+ boards:
+ - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ auto_increment:
+ name: all_access
+ cast_type: &31 !ruby/object:ActiveModel::Type::Boolean
+ precision:
+ scale:
+ limit:
+ sql_type_metadata: &32 !ruby/object:ActiveRecord::ConnectionAdapters::SqlTypeMetadata
+ sql_type: boolean
+ type: :boolean
+ limit:
+ precision:
+ scale:
+ 'null': false
+ default: false
+ default_function:
+ collation:
+ comment:
+ - *7
+ - &24 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ auto_increment:
+ name: creator_id
+ cast_type: *3
+ sql_type_metadata: *4
+ 'null': false
+ default:
+ default_function:
+ collation:
+ comment:
+ - *8
+ - *10
+ - *9
+ boards_filters:
+ - *22
+ - *19
+ card_activity_spikes:
+ - *23
+ - *7
+ - *8
- *9
card_engagements:
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
@@ -418,16 +469,16 @@ columns:
comment:
- *9
card_goldnesses:
- - *22
+ - *23
- *7
- *8
- *9
card_not_nows:
- - *22
+ - *23
- *7
- *8
- *9
- - &24 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
+ - &25 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: user_id
cast_type: *3
@@ -438,7 +489,7 @@ columns:
collation:
comment:
cards:
- - *23
+ - *22
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: column_id
@@ -450,16 +501,7 @@ columns:
collation:
comment:
- *7
- - &25 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
- auto_increment:
- name: creator_id
- cast_type: *3
- sql_type_metadata: *4
- 'null': false
- default:
- default_function:
- collation:
- comment:
+ - *24
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: due_on
@@ -524,55 +566,13 @@ columns:
comment:
- *19
closures:
- - *22
- - *7
- - *8
- - *9
- - *24
- collection_publications:
- *23
- *7
- *8
- - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
- auto_increment:
- name: key
- cast_type: *5
- sql_type_metadata: *6
- 'null': true
- default:
- default_function:
- collation:
- comment:
- *9
- collections:
- - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
- auto_increment:
- name: all_access
- cast_type: &31 !ruby/object:ActiveModel::Type::Boolean
- precision:
- scale:
- limit:
- sql_type_metadata: &32 !ruby/object:ActiveRecord::ConnectionAdapters::SqlTypeMetadata
- sql_type: boolean
- type: :boolean
- limit:
- precision:
- scale:
- 'null': false
- default: false
- default_function:
- collation:
- comment:
- - *7
- *25
- - *8
- - *10
- - *9
- collections_filters:
- - *23
- - *19
columns:
- - *23
+ - *22
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: color
@@ -598,13 +598,13 @@ columns:
comment:
- *9
comments:
- - *22
+ - *23
- *7
- - *25
+ - *24
- *8
- *9
creators_filters:
- - *25
+ - *24
- *19
entropies:
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
@@ -651,9 +651,9 @@ columns:
default_function:
collation:
comment:
- - *23
+ - *22
- *7
- - *25
+ - *24
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: eventable_id
@@ -696,7 +696,7 @@ columns:
- *9
filters:
- *7
- - *25
+ - *24
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: fields
@@ -838,7 +838,7 @@ columns:
- *9
- *28
pins:
- - *22
+ - *23
- *7
- *8
- *9
@@ -973,7 +973,7 @@ columns:
- *8
- *9
steps:
- - *22
+ - *23
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
auto_increment:
name: completed
@@ -998,7 +998,7 @@ columns:
- *8
- *9
taggings:
- - *22
+ - *23
- *7
- *8
- *33
@@ -1069,7 +1069,7 @@ columns:
comment:
- *9
watches:
- - *22
+ - *23
- *7
- *8
- *9
@@ -1165,7 +1165,7 @@ columns:
- *35
webhooks:
- *36
- - *23
+ - *22
- *7
- *8
- !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column
@@ -1221,6 +1221,9 @@ primary_keys:
assignees_filters:
assigners_filters:
assignments: id
+ board_publications: id
+ boards: id
+ boards_filters:
card_activity_spikes: id
card_engagements: id
card_goldnesses: id
@@ -1228,9 +1231,6 @@ primary_keys:
cards: id
closers_filters:
closures: id
- collection_publications: id
- collections: id
- collections_filters:
columns: id
comments: id
creators_filters:
@@ -1268,6 +1268,9 @@ data_sources:
assignees_filters: true
assigners_filters: true
assignments: true
+ board_publications: true
+ boards: true
+ boards_filters: true
card_activity_spikes: true
card_engagements: true
card_goldnesses: true
@@ -1275,9 +1278,6 @@ data_sources:
cards: true
closers_filters: true
closures: true
- collection_publications: true
- collections: true
- collections_filters: true
columns: true
comments: true
creators_filters: true
@@ -1323,10 +1323,10 @@ indexes:
valid: true
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: accesses
- name: index_accesses_on_collection_id
+ name: index_accesses_on_board_id
unique: false
columns:
- - collection_id
+ - board_id
lengths: {}
orders: {}
opclasses: {}
@@ -1339,10 +1339,10 @@ indexes:
valid: true
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: accesses
- name: index_accesses_on_collection_id_and_user_id
+ name: index_accesses_on_board_id_and_user_id
unique: true
columns:
- - collection_id
+ - board_id
- user_id
lengths: {}
orders: {}
@@ -1611,6 +1611,89 @@ indexes:
nulls_not_distinct:
comment:
valid: true
+ board_publications:
+ - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
+ table: board_publications
+ name: index_board_publications_on_board_id
+ unique: false
+ columns:
+ - board_id
+ lengths: {}
+ orders: {}
+ opclasses: {}
+ where:
+ type:
+ using:
+ include:
+ nulls_not_distinct:
+ comment:
+ valid: true
+ - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
+ table: board_publications
+ name: index_board_publications_on_key
+ unique: true
+ columns:
+ - key
+ lengths: {}
+ orders: {}
+ opclasses: {}
+ where:
+ type:
+ using:
+ include:
+ nulls_not_distinct:
+ comment:
+ valid: true
+ boards:
+ - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
+ table: boards
+ name: index_boards_on_creator_id
+ unique: false
+ columns:
+ - creator_id
+ lengths: {}
+ orders: {}
+ opclasses: {}
+ where:
+ type:
+ using:
+ include:
+ nulls_not_distinct:
+ comment:
+ valid: true
+ boards_filters:
+ - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
+ table: boards_filters
+ name: index_boards_filters_on_board_id
+ unique: false
+ columns:
+ - board_id
+ lengths: {}
+ orders: {}
+ opclasses: {}
+ where:
+ type:
+ using:
+ include:
+ nulls_not_distinct:
+ comment:
+ valid: true
+ - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
+ table: boards_filters
+ name: index_boards_filters_on_filter_id
+ unique: false
+ columns:
+ - filter_id
+ lengths: {}
+ orders: {}
+ opclasses: {}
+ where:
+ type:
+ using:
+ include:
+ nulls_not_distinct:
+ comment:
+ valid: true
card_activity_spikes:
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: card_activity_spikes
@@ -1714,10 +1797,10 @@ indexes:
cards:
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: cards
- name: index_cards_on_collection_id
+ name: index_cards_on_board_id
unique: false
columns:
- - collection_id
+ - board_id
lengths: {}
orders: {}
opclasses: {}
@@ -1844,96 +1927,13 @@ indexes:
nulls_not_distinct:
comment:
valid: true
- collection_publications:
- - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
- table: collection_publications
- name: index_collection_publications_on_collection_id
- unique: false
- columns:
- - collection_id
- lengths: {}
- orders: {}
- opclasses: {}
- where:
- type:
- using:
- include:
- nulls_not_distinct:
- comment:
- valid: true
- - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
- table: collection_publications
- name: index_collection_publications_on_key
- unique: true
- columns:
- - key
- lengths: {}
- orders: {}
- opclasses: {}
- where:
- type:
- using:
- include:
- nulls_not_distinct:
- comment:
- valid: true
- collections:
- - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
- table: collections
- name: index_collections_on_creator_id
- unique: false
- columns:
- - creator_id
- lengths: {}
- orders: {}
- opclasses: {}
- where:
- type:
- using:
- include:
- nulls_not_distinct:
- comment:
- valid: true
- collections_filters:
- - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
- table: collections_filters
- name: index_collections_filters_on_collection_id
- unique: false
- columns:
- - collection_id
- lengths: {}
- orders: {}
- opclasses: {}
- where:
- type:
- using:
- include:
- nulls_not_distinct:
- comment:
- valid: true
- - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
- table: collections_filters
- name: index_collections_filters_on_filter_id
- unique: false
- columns:
- - filter_id
- lengths: {}
- orders: {}
- opclasses: {}
- where:
- type:
- using:
- include:
- nulls_not_distinct:
- comment:
- valid: true
columns:
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: columns
- name: index_columns_on_collection_id
+ name: index_columns_on_board_id
unique: false
columns:
- - collection_id
+ - board_id
lengths: {}
orders: {}
opclasses: {}
@@ -1946,10 +1946,10 @@ indexes:
valid: true
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: columns
- name: index_columns_on_collection_id_and_position
+ name: index_columns_on_board_id_and_position
unique: false
columns:
- - collection_id
+ - board_id
- position
lengths: {}
orders: {}
@@ -2050,10 +2050,10 @@ indexes:
events:
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: events
- name: index_events_on_collection_id
+ name: index_events_on_board_id
unique: false
columns:
- - collection_id
+ - board_id
lengths: {}
orders: {}
opclasses: {}
@@ -2066,10 +2066,10 @@ indexes:
valid: true
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: events
- name: index_events_on_collection_id_and_action_and_created_at
+ name: index_events_on_board_id_and_action_and_created_at
unique: false
columns:
- - collection_id
+ - board_id
- action
- created_at
lengths: {}
@@ -2813,10 +2813,10 @@ indexes:
webhooks:
- !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition
table: webhooks
- name: index_webhooks_on_collection_id
+ name: index_webhooks_on_board_id
unique: false
columns:
- - collection_id
+ - board_id
lengths: {}
orders: {}
opclasses: {}
@@ -2843,4 +2843,4 @@ indexes:
nulls_not_distinct:
comment:
valid: true
-version: 20251103125353
+version: 20251105122933
diff --git a/rename.sh b/rename.sh
new file mode 100755
index 000000000..cae1557a5
--- /dev/null
+++ b/rename.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# rename_paths.sh
+# Renames directories and files containing "collection" → "board"
+# Excludes db/migrate and prevents nested board/board paths.
+
+set -euo pipefail
+
+ROOT_DIR="/home/jorge/Work/basecamp/fizzy"
+EXCLUDE_DIR="$ROOT_DIR/db/migrate"
+
+# 1. Rename directories first (deepest first)
+find "$ROOT_DIR" -type d -name '*collection*' \
+ ! -path "$EXCLUDE_DIR/*" | sort -r | while IFS= read -r dir; do
+ new_dir="${dir//collection/board}"
+ if [[ "$new_dir" != *"board/board"* ]]; then
+ echo "Renaming directory: $dir → $new_dir"
+ mv "$dir" "$new_dir"
+ fi
+done
+
+# 2. Rename files (after directories exist)
+find "$ROOT_DIR" -type f -name '*collection*' \
+ ! -path "$EXCLUDE_DIR/*" | while IFS= read -r file; do
+ new_name="${file//collection/board}"
+ if [[ "$new_name" != *"board/board"* ]]; then
+ echo "Renaming file: $file → $new_name"
+ mv "$file" "$new_name"
+ fi
+done
+
+echo "✅ File and directory renaming complete."
diff --git a/script/migrations/reset_collections_ids.rb b/script/migrations/reset_boards_ids.rb
similarity index 100%
rename from script/migrations/reset_collections_ids.rb
rename to script/migrations/reset_boards_ids.rb
diff --git a/test/controllers/collections/columns/closeds_controller_test.rb b/test/controllers/boards/columns/closeds_controller_test.rb
similarity index 100%
rename from test/controllers/collections/columns/closeds_controller_test.rb
rename to test/controllers/boards/columns/closeds_controller_test.rb
diff --git a/test/controllers/collections/columns/not_nows_controller_test.rb b/test/controllers/boards/columns/not_nows_controller_test.rb
similarity index 100%
rename from test/controllers/collections/columns/not_nows_controller_test.rb
rename to test/controllers/boards/columns/not_nows_controller_test.rb
diff --git a/test/controllers/collections/columns/streams_controller_test.rb b/test/controllers/boards/columns/streams_controller_test.rb
similarity index 100%
rename from test/controllers/collections/columns/streams_controller_test.rb
rename to test/controllers/boards/columns/streams_controller_test.rb
diff --git a/test/controllers/collections/columns_controller_test.rb b/test/controllers/boards/columns_controller_test.rb
similarity index 100%
rename from test/controllers/collections/columns_controller_test.rb
rename to test/controllers/boards/columns_controller_test.rb
diff --git a/test/controllers/collections/entropies_controller_test.rb b/test/controllers/boards/entropies_controller_test.rb
similarity index 100%
rename from test/controllers/collections/entropies_controller_test.rb
rename to test/controllers/boards/entropies_controller_test.rb
diff --git a/test/controllers/collections/involvements_controller_test.rb b/test/controllers/boards/involvements_controller_test.rb
similarity index 100%
rename from test/controllers/collections/involvements_controller_test.rb
rename to test/controllers/boards/involvements_controller_test.rb
diff --git a/test/controllers/collections/publications_controller_test.rb b/test/controllers/boards/publications_controller_test.rb
similarity index 100%
rename from test/controllers/collections/publications_controller_test.rb
rename to test/controllers/boards/publications_controller_test.rb
diff --git a/test/controllers/collections_controller_test.rb b/test/controllers/boards_controller_test.rb
similarity index 100%
rename from test/controllers/collections_controller_test.rb
rename to test/controllers/boards_controller_test.rb
diff --git a/test/controllers/cards/collections_controller_test.rb b/test/controllers/cards/boards_controller_test.rb
similarity index 100%
rename from test/controllers/cards/collections_controller_test.rb
rename to test/controllers/cards/boards_controller_test.rb
diff --git a/test/controllers/prompts/collections/users_controller_test.rb b/test/controllers/prompts/boards/users_controller_test.rb
similarity index 100%
rename from test/controllers/prompts/collections/users_controller_test.rb
rename to test/controllers/prompts/boards/users_controller_test.rb
diff --git a/test/controllers/public/collections/columns/closeds_controller_test.rb b/test/controllers/public/boards/columns/closeds_controller_test.rb
similarity index 100%
rename from test/controllers/public/collections/columns/closeds_controller_test.rb
rename to test/controllers/public/boards/columns/closeds_controller_test.rb
diff --git a/test/controllers/public/collections/columns/not_nows_controller_test.rb b/test/controllers/public/boards/columns/not_nows_controller_test.rb
similarity index 100%
rename from test/controllers/public/collections/columns/not_nows_controller_test.rb
rename to test/controllers/public/boards/columns/not_nows_controller_test.rb
diff --git a/test/controllers/public/collections/columns/streams_controller_test.rb b/test/controllers/public/boards/columns/streams_controller_test.rb
similarity index 100%
rename from test/controllers/public/collections/columns/streams_controller_test.rb
rename to test/controllers/public/boards/columns/streams_controller_test.rb
diff --git a/test/controllers/public/collections/columns_controller_test.rb b/test/controllers/public/boards/columns_controller_test.rb
similarity index 100%
rename from test/controllers/public/collections/columns_controller_test.rb
rename to test/controllers/public/boards/columns_controller_test.rb
diff --git a/test/controllers/public/collections_controller_test.rb b/test/controllers/public/boards_controller_test.rb
similarity index 100%
rename from test/controllers/public/collections_controller_test.rb
rename to test/controllers/public/boards_controller_test.rb
diff --git a/test/fixtures/collections.yml b/test/fixtures/boards.yml
similarity index 100%
rename from test/fixtures/collections.yml
rename to test/fixtures/boards.yml
diff --git a/test/models/collection/accessible_test.rb b/test/models/board/accessible_test.rb
similarity index 100%
rename from test/models/collection/accessible_test.rb
rename to test/models/board/accessible_test.rb
diff --git a/test/models/collection/cards_test.rb b/test/models/board/cards_test.rb
similarity index 100%
rename from test/models/collection/cards_test.rb
rename to test/models/board/cards_test.rb
diff --git a/test/models/collection/publishable_test.rb b/test/models/board/publishable_test.rb
similarity index 100%
rename from test/models/collection/publishable_test.rb
rename to test/models/board/publishable_test.rb