Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/models/filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ def cards
result = result.assigned_to(assignees.ids) if assignees.present?
result = result.where(creator_id: creators.ids) if creators.present?
result = result.where(board: boards.ids) if boards.present?
result = result.where(column: columns.ids) if columns.present?
result = result.tagged_with(tags.ids) if tags.present?
result = result.where(cards: { created_at: creation_window }) if creation_window
result = result.closed_at_window(closure_window) if closure_window
Expand Down
4 changes: 3 additions & 1 deletion app/models/filter/params.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module Filter::Params
creator_ids: [],
closer_ids: [],
board_ids: [],
column_ids: [],
tag_ids: [],
terms: []
]
Expand Down Expand Up @@ -57,7 +58,8 @@ def as_params
params[:assignment_status] = assignment_status
params[:terms] = terms
params[:tag_ids] = tags.ids
params[:board_ids] = boards.ids
params[:board_ids] = boards.ids
params[:column_ids] = columns.ids
params[:card_ids] = card_ids
params[:assignee_ids] = assignees.ids
params[:creator_ids] = creators.ids
Expand Down
1 change: 1 addition & 0 deletions app/models/filter/resources.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module Filter::Resources
included do
has_and_belongs_to_many :tags
has_and_belongs_to_many :boards
has_and_belongs_to_many :columns
has_and_belongs_to_many :assignees, class_name: "User", join_table: "assignees_filters", association_foreign_key: "assignee_id"
has_and_belongs_to_many :creators, class_name: "User", join_table: "creators_filters", association_foreign_key: "creator_id"
has_and_belongs_to_many :closers, class_name: "User", join_table: "closers_filters", association_foreign_key: "closer_id"
Expand Down
10 changes: 10 additions & 0 deletions db/migrate/20251220080000_create_columns_filters.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class CreateColumnsFilters < ActiveRecord::Migration[8.0]
def change
create_table :columns_filters, id: false do |t|
t.uuid :column_id, null: false
t.uuid :filter_id, null: false
t.index :column_id
t.index :filter_id
end
end
end
1 change: 1 addition & 0 deletions docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ __Query Parameters:__
| Parameter | Description |
|-----------|-------------|
| `board_ids[]` | Filter by board ID(s) |
| `column_ids[]` | Filter by column ID(s) |
| `tag_ids[]` | Filter by tag ID(s) |
| `assignee_ids[]` | Filter by assignee user ID(s) |
| `creator_ids[]` | Filter by card creator ID(s) |
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/columns_filters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# empty - populated dynamically in tests
14 changes: 12 additions & 2 deletions test/models/filter_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ class FilterTest < ActiveSupport::TestCase
assert_empty users(:david).filters.new(board_ids: [ boards(:writebook).id ]).boards
end

test "filter by column" do
filter = users(:david).filters.new column_ids: [ columns(:writebook_in_progress).id ]
assert_equal [ cards(:text) ], filter.cards

filter = users(:david).filters.new column_ids: [ columns(:writebook_triage).id ]
assert_includes filter.cards, cards(:logo)
assert_includes filter.cards, cards(:layout)
assert_not_includes filter.cards, cards(:text)
end

test "remembering equivalent filters" do
assert_difference "Filter.count", +1 do
filter = users(:david).filters.remember(sorted_by: "latest", assignment_status: "unassigned", tag_ids: [ tags(:mobile).id ])
Expand All @@ -63,8 +73,8 @@ class FilterTest < ActiveSupport::TestCase
end

test "turning into params" do
filter = users(:david).filters.new sorted_by: "latest", tag_ids: "", assignee_ids: [ users(:jz).id ], board_ids: [ boards(:writebook).id ]
expected = { assignee_ids: [ users(:jz).id ], board_ids: [ boards(:writebook).id ] }
filter = users(:david).filters.new sorted_by: "latest", tag_ids: "", assignee_ids: [ users(:jz).id ], board_ids: [ boards(:writebook).id ], column_ids: [ columns(:writebook_in_progress).id ]
expected = { assignee_ids: [ users(:jz).id ], board_ids: [ boards(:writebook).id ], column_ids: [ columns(:writebook_in_progress).id ] }
assert_equal expected, filter.as_params
end

Expand Down