Skip to content

Commit a46844c

Browse files
Copilotbrendon
andauthored
Use concat and reuse existing CompositePrimaryKeyItem model for tests
- Use concat instead of .each { |fk| << fk } in positioning.rb as brendon requested - Remove CompositeKeyList/CompositeKeyListItem models created from scratch - Reuse existing CompositePrimaryKeyItem (which has composite PK) as parent - Create minimal CompositeForeignKeyItem child with composite FK to it Agent-Logs-Url: https://github.com/brendon/positioning/sessions/fd37d2c2-d391-4065-94bd-c2f48fe26b0a Co-authored-by: brendon <81871+brendon@users.noreply.github.com>
1 parent 0c0b922 commit a46844c

File tree

8 files changed

+23
-31
lines changed

8 files changed

+23
-31
lines changed

lib/positioning.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def positioned(on: [], column: :position)
3535
reflection = reflections[scope_component]
3636

3737
if reflection&.belongs_to?
38-
Array(reflection.foreign_key).each { |fk| positioning_columns[column][:scope_columns] << fk }
38+
positioning_columns[column][:scope_columns].concat Array(reflection.foreign_key)
3939
positioning_columns[column][:scope_columns] << reflection.foreign_type if reflection.polymorphic?
4040
positioning_columns[column][:scope_associations] << reflection.name
4141
else
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
if ActiveRecord.version >= Gem::Version.new("7.2.0")
2+
class CompositeForeignKeyItem < ActiveRecord::Base
3+
belongs_to :composite_primary_key_item, foreign_key: [:cpki_item_id, :cpki_account_id]
4+
5+
positioned on: :composite_primary_key_item
6+
end
7+
end

test/models/composite_key_list.rb

Lines changed: 0 additions & 7 deletions
This file was deleted.

test/models/composite_key_list_item.rb

Lines changed: 0 additions & 7 deletions
This file was deleted.

test/models/composite_primary_key_item.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@ class CompositePrimaryKeyItem < ActiveRecord::Base
33

44
belongs_to :list
55

6+
if ActiveRecord.version >= Gem::Version.new("7.2.0")
7+
has_many :composite_foreign_key_items, foreign_key: [:cpki_item_id, :cpki_account_id], dependent: :destroy
8+
end
9+
610
positioned on: :list
711
end

test/support/active_record.rb

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,14 @@
5656
add_index :composite_primary_key_items, [:list_id, :position], unique: true
5757

5858
if ActiveRecord.version >= Gem::Version.new("7.2.0")
59-
create_table :composite_key_lists, primary_key: [:shop_id, :id], force: true do |t|
60-
t.integer :shop_id, null: false
61-
t.string :name
62-
end
63-
64-
create_table :composite_key_list_items, force: true do |t|
59+
create_table :composite_foreign_key_items, force: true do |t|
6560
t.string :name
6661
t.integer :position, null: false
67-
t.integer :shop_id, null: false
68-
t.integer :composite_key_list_id, null: false
62+
t.integer :cpki_item_id, null: false
63+
t.integer :cpki_account_id, null: false
6964
end
7065

71-
add_index :composite_key_list_items, [:shop_id, :composite_key_list_id, :position], unique: true, name: "index_ckli_on_scope_and_position"
66+
add_index :composite_foreign_key_items, [:cpki_item_id, :cpki_account_id, :position], unique: true, name: "index_cfki_on_scope_and_position"
7267
end
7368

7469
create_table :categories, force: true do |t|

test/test_helper.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
require_relative "models/new_item"
1212
require_relative "models/default_scope_item"
1313
require_relative "models/composite_primary_key_item"
14-
require_relative "models/composite_key_list"
15-
require_relative "models/composite_key_list_item"
14+
require_relative "models/composite_foreign_key_item"
1615
require_relative "models/product"
1716
require_relative "models/category"
1817
require_relative "models/categorised_item"

test/test_positioning.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,14 +570,15 @@ def test_destroyed_via_positioning_scope?
570570
def test_destroyed_via_positioning_scope_with_composite_foreign_key
571571
skip "Composite foreign keys require Rails 7.2+" if ActiveRecord.version < Gem::Version.new("7.2.0")
572572

573-
list = CompositeKeyList.create(shop_id: 1, name: "List")
574-
item = list.composite_key_list_items.create(name: "Item 1")
575-
list.composite_key_list_items.create(name: "Item 2")
573+
list = List.create(name: "List")
574+
parent = CompositePrimaryKeyItem.create(item_id: 1, account_id: 1, list: list, name: "Parent")
575+
child = parent.composite_foreign_key_items.create(name: "Child 1")
576+
parent.composite_foreign_key_items.create(name: "Child 2")
576577

577-
mechanisms = Positioning::Mechanisms.new(item, :position)
578+
mechanisms = Positioning::Mechanisms.new(child, :position)
578579
refute mechanisms.send(:destroyed_via_positioning_scope?)
579580

580-
list.destroy
581+
parent.destroy
581582
assert mechanisms.send(:destroyed_via_positioning_scope?)
582583
end
583584
end

0 commit comments

Comments
 (0)