acts_as_list 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/acts_as_list/version.rb +1 -1
- metadata +3 -45
- data/.github/FUNDING.yml +0 -3
- data/.github/dependabot.yml +0 -6
- data/.github/workflows/continuous_integration.yml +0 -62
- data/.gitignore +0 -13
- data/Gemfile +0 -13
- data/acts_as_list.gemspec +0 -40
- data/test/helper.rb +0 -81
- data/test/shared.rb +0 -12
- data/test/shared_array_scope_list.rb +0 -177
- data/test/shared_list.rb +0 -347
- data/test/shared_list_sub.rb +0 -188
- data/test/shared_no_addition.rb +0 -73
- data/test/shared_quoting.rb +0 -23
- data/test/shared_top_addition.rb +0 -110
- data/test/shared_zero_based.rb +0 -104
- data/test/support/ci_database.yml +0 -20
- data/test/support/database.yml +0 -18
- data/test/test_default_scope_with_select.rb +0 -33
- data/test/test_joined_list.rb +0 -61
- data/test/test_list.rb +0 -1253
- data/test/test_no_update_for_extra_classes.rb +0 -131
- data/test/test_no_update_for_scope_destruction.rb +0 -69
- data/test/test_no_update_for_subclasses.rb +0 -56
- data/test/test_scope_with_user_defined_foreign_key.rb +0 -42
data/test/shared_top_addition.rb
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shared
|
4
|
-
module TopAddition
|
5
|
-
def setup
|
6
|
-
(1..4).each { |counter| TopAdditionMixin.create! pos: counter, parent_id: 5 }
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_setup_state
|
10
|
-
# If we explicitly define a position (as above) then that position is what gets applied
|
11
|
-
assert_equal [1, 2, 3, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_reordering
|
15
|
-
TopAdditionMixin.where(id: 2).first.move_lower
|
16
|
-
assert_equal [1, 3, 2, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
17
|
-
|
18
|
-
TopAdditionMixin.where(id: 2).first.move_higher
|
19
|
-
assert_equal [1, 2, 3, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
20
|
-
|
21
|
-
TopAdditionMixin.where(id: 1).first.move_to_bottom
|
22
|
-
assert_equal [2, 3, 4, 1], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
23
|
-
|
24
|
-
TopAdditionMixin.where(id: 1).first.move_to_top
|
25
|
-
assert_equal [1, 2, 3, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
26
|
-
|
27
|
-
TopAdditionMixin.where(id: 2).first.move_to_bottom
|
28
|
-
assert_equal [1, 3, 4, 2], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
29
|
-
|
30
|
-
TopAdditionMixin.where(id: 4).first.move_to_top
|
31
|
-
assert_equal [4, 1, 3, 2], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_injection
|
35
|
-
item = TopAdditionMixin.new(parent_id: 1)
|
36
|
-
assert_equal({ parent_id: 1 }, item.scope_condition)
|
37
|
-
assert_equal "pos", item.position_column
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_insert
|
41
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
42
|
-
assert_equal 1, new.pos
|
43
|
-
assert new.first?
|
44
|
-
assert new.last?
|
45
|
-
|
46
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
47
|
-
assert_equal 1, new.pos
|
48
|
-
assert new.first?
|
49
|
-
assert !new.last?
|
50
|
-
|
51
|
-
new = TopAdditionMixin.acts_as_list_no_update { TopAdditionMixin.create(parent_id: 20) }
|
52
|
-
assert_equal_or_nil $default_position, new.pos
|
53
|
-
assert_equal $default_position.is_a?(Integer), new.first?
|
54
|
-
assert !new.last?
|
55
|
-
|
56
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
57
|
-
assert_equal 1, new.pos
|
58
|
-
assert_equal $default_position.nil?, new.first?
|
59
|
-
assert !new.last?
|
60
|
-
|
61
|
-
new = TopAdditionMixin.create(parent_id: 0)
|
62
|
-
assert_equal 1, new.pos
|
63
|
-
assert new.first?
|
64
|
-
assert new.last?
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_insert_at
|
68
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
69
|
-
assert_equal 1, new.pos
|
70
|
-
|
71
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
72
|
-
assert_equal 1, new.pos
|
73
|
-
|
74
|
-
new = TopAdditionMixin.create(parent_id: 20)
|
75
|
-
assert_equal 1, new.pos
|
76
|
-
|
77
|
-
new = TopAdditionMixin.acts_as_list_no_update { TopAdditionMixin.create(parent_id: 20) }
|
78
|
-
assert_equal_or_nil $default_position, new.pos
|
79
|
-
|
80
|
-
new4 = TopAdditionMixin.create(parent_id: 20)
|
81
|
-
assert_equal 1, new4.pos
|
82
|
-
|
83
|
-
new4.insert_at(3)
|
84
|
-
assert_equal 3, new4.pos
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_supplied_position
|
88
|
-
new = TopAdditionMixin.create(parent_id: 20, pos: 3)
|
89
|
-
assert_equal 3, new.pos
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_delete_middle
|
93
|
-
TopAdditionMixin.where(id: 2).first.destroy
|
94
|
-
|
95
|
-
assert_equal [1, 3, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
96
|
-
|
97
|
-
assert_equal 1, TopAdditionMixin.where(id: 1).first.pos
|
98
|
-
assert_equal 2, TopAdditionMixin.where(id: 3).first.pos
|
99
|
-
assert_equal 3, TopAdditionMixin.where(id: 4).first.pos
|
100
|
-
|
101
|
-
TopAdditionMixin.acts_as_list_no_update { TopAdditionMixin.where(id: 3).first.destroy }
|
102
|
-
|
103
|
-
assert_equal [1, 4], TopAdditionMixin.where(parent_id: 5).order('pos').map(&:id)
|
104
|
-
|
105
|
-
assert_equal 1, TopAdditionMixin.where(id: 1).first.pos
|
106
|
-
assert_equal 3, TopAdditionMixin.where(id: 4).first.pos
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
end
|
data/test/shared_zero_based.rb
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Shared
|
4
|
-
module ZeroBased
|
5
|
-
def setup
|
6
|
-
(1..4).each { |counter| ZeroBasedMixin.create! pos: counter, parent_id: 5 }
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_insert
|
10
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
11
|
-
assert_equal 0, new.pos
|
12
|
-
assert new.first?
|
13
|
-
assert new.last?
|
14
|
-
|
15
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
16
|
-
assert_equal 1, new.pos
|
17
|
-
assert !new.first?
|
18
|
-
assert new.last?
|
19
|
-
|
20
|
-
new = ZeroBasedMixin.acts_as_list_no_update { ZeroBasedMixin.create(parent_id: 20) }
|
21
|
-
assert_equal_or_nil $default_position, new.pos
|
22
|
-
assert !new.first?
|
23
|
-
assert !new.last?
|
24
|
-
|
25
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
26
|
-
assert_equal 2, new.pos
|
27
|
-
assert !new.first?
|
28
|
-
assert new.last?
|
29
|
-
|
30
|
-
new = ZeroBasedMixin.create(parent_id: 0)
|
31
|
-
assert_equal 0, new.pos
|
32
|
-
assert new.first?
|
33
|
-
assert new.last?
|
34
|
-
|
35
|
-
new = ZeroBasedMixin.create(parent_id: 1, pos: -500)
|
36
|
-
assert_equal 0, new.pos
|
37
|
-
assert new.first?
|
38
|
-
assert new.last?
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_reordering
|
42
|
-
assert_equal [1, 2, 3, 4], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
43
|
-
|
44
|
-
ListMixin.where(id: 2).first.move_lower
|
45
|
-
assert_equal [1, 3, 2, 4], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
46
|
-
|
47
|
-
ListMixin.where(id: 2).first.move_higher
|
48
|
-
assert_equal [1, 2, 3, 4], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
49
|
-
|
50
|
-
ListMixin.where(id: 1).first.move_to_bottom
|
51
|
-
assert_equal [2, 3, 4, 1], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
52
|
-
|
53
|
-
ListMixin.where(id: 1).first.move_to_top
|
54
|
-
assert_equal [1, 2, 3, 4], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
55
|
-
|
56
|
-
ListMixin.where(id: 2).first.move_to_bottom
|
57
|
-
assert_equal [1, 3, 4, 2], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
58
|
-
|
59
|
-
ListMixin.where(id: 4).first.move_to_top
|
60
|
-
assert_equal [4, 1, 3, 2], ZeroBasedMixin.where(parent_id: 5).order('pos').map(&:id)
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_insert_at
|
64
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
65
|
-
assert_equal 0, new.pos
|
66
|
-
|
67
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
68
|
-
assert_equal 1, new.pos
|
69
|
-
|
70
|
-
new = ZeroBasedMixin.create(parent_id: 20)
|
71
|
-
assert_equal 2, new.pos
|
72
|
-
|
73
|
-
new_noup = ZeroBasedMixin.acts_as_list_no_update { ZeroBasedMixin.create(parent_id: 20) }
|
74
|
-
assert_equal_or_nil $default_position, new_noup.pos
|
75
|
-
|
76
|
-
new4 = ZeroBasedMixin.create(parent_id: 20)
|
77
|
-
assert_equal 3, new4.pos
|
78
|
-
|
79
|
-
new4.insert_at(2)
|
80
|
-
assert_equal 2, new4.pos
|
81
|
-
|
82
|
-
new.reload
|
83
|
-
assert_equal 3, new.pos
|
84
|
-
|
85
|
-
new.insert_at(2)
|
86
|
-
assert_equal 2, new.pos
|
87
|
-
|
88
|
-
new4.reload
|
89
|
-
assert_equal 3, new4.pos
|
90
|
-
|
91
|
-
new5 = ListMixin.create(parent_id: 20)
|
92
|
-
assert_equal 4, new5.pos
|
93
|
-
|
94
|
-
new5.insert_at(1)
|
95
|
-
assert_equal 1, new5.pos
|
96
|
-
|
97
|
-
new4.reload
|
98
|
-
assert_equal 4, new4.pos
|
99
|
-
|
100
|
-
new_noup.reload
|
101
|
-
assert_equal_or_nil $default_position, new_noup.pos
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
sqlite:
|
2
|
-
adapter: sqlite3
|
3
|
-
database: file::memory:?cache=shared
|
4
|
-
|
5
|
-
mysql:
|
6
|
-
adapter: mysql2
|
7
|
-
database: runner
|
8
|
-
pool: 5
|
9
|
-
timeout: 5000
|
10
|
-
username: root
|
11
|
-
password: root
|
12
|
-
|
13
|
-
postgresql:
|
14
|
-
adapter: postgresql
|
15
|
-
database: runner
|
16
|
-
pool: 5
|
17
|
-
timeout: 5000
|
18
|
-
username: runner
|
19
|
-
password:
|
20
|
-
min_messages: ERROR
|
data/test/support/database.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
sqlite:
|
2
|
-
adapter: sqlite3
|
3
|
-
database: file::memory:?cache=shared
|
4
|
-
|
5
|
-
mysql:
|
6
|
-
adapter: mysql2
|
7
|
-
host: 127.0.0.1
|
8
|
-
username: root
|
9
|
-
password:
|
10
|
-
database: acts_as_list
|
11
|
-
|
12
|
-
postgresql:
|
13
|
-
adapter: postgresql
|
14
|
-
host: localhost
|
15
|
-
username: postgres
|
16
|
-
password: postgres
|
17
|
-
database: acts_as_list
|
18
|
-
min_messages: ERROR
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class Animal < ActiveRecord::Base
|
4
|
-
acts_as_list
|
5
|
-
default_scope -> { select(:name) }
|
6
|
-
end
|
7
|
-
|
8
|
-
class DefaultScopeWithSelectTest < Minitest::Test
|
9
|
-
def setup
|
10
|
-
ActiveRecord::Base.connection.create_table :animals do |t|
|
11
|
-
t.column :position, :integer
|
12
|
-
t.column :name, :string
|
13
|
-
end
|
14
|
-
|
15
|
-
ActiveRecord::Base.connection.schema_cache.clear!
|
16
|
-
Animal.reset_column_information
|
17
|
-
super
|
18
|
-
end
|
19
|
-
|
20
|
-
def teardown
|
21
|
-
teardown_db
|
22
|
-
super
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_default_scope_with_select
|
26
|
-
animal1 = Animal.create name: 'Fox'
|
27
|
-
animal2 = Animal.create name: 'Panda'
|
28
|
-
animal3 = Animal.create name: 'Wildebeast'
|
29
|
-
assert_equal 1, animal1.position
|
30
|
-
assert_equal 2, animal2.position
|
31
|
-
assert_equal 3, animal3.position
|
32
|
-
end
|
33
|
-
end
|
data/test/test_joined_list.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'helper'
|
4
|
-
|
5
|
-
class Section < ActiveRecord::Base
|
6
|
-
has_many :items
|
7
|
-
acts_as_list
|
8
|
-
|
9
|
-
scope :visible, -> { where(visible: true) }
|
10
|
-
end
|
11
|
-
|
12
|
-
class Item < ActiveRecord::Base
|
13
|
-
belongs_to :section
|
14
|
-
acts_as_list scope: :section
|
15
|
-
|
16
|
-
scope :visible, -> { where(visible: true).joins(:section).merge(Section.visible) }
|
17
|
-
end
|
18
|
-
|
19
|
-
class JoinedTestCase < Minitest::Test
|
20
|
-
def setup
|
21
|
-
ActiveRecord::Base.connection.create_table :sections do |t|
|
22
|
-
t.column :position, :integer
|
23
|
-
t.column :visible, :boolean, default: true
|
24
|
-
end
|
25
|
-
|
26
|
-
ActiveRecord::Base.connection.create_table :items do |t|
|
27
|
-
t.column :position, :integer
|
28
|
-
t.column :section_id, :integer
|
29
|
-
t.column :visible, :boolean, default: true
|
30
|
-
end
|
31
|
-
|
32
|
-
ActiveRecord::Base.connection.schema_cache.clear!
|
33
|
-
[Section, Item].each(&:reset_column_information)
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
def teardown
|
38
|
-
teardown_db
|
39
|
-
super
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# joining the relation returned by `#higher_items` or `#lower_items` to another table
|
44
|
-
# previously could result in ambiguous column names in the query
|
45
|
-
class TestHigherLowerItems < JoinedTestCase
|
46
|
-
def test_higher_items
|
47
|
-
section = Section.create
|
48
|
-
item1 = Item.create section: section
|
49
|
-
item2 = Item.create section: section
|
50
|
-
item3 = Item.create section: section
|
51
|
-
assert_equal item3.higher_items.visible, [item2, item1]
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_lower_items
|
55
|
-
section = Section.create
|
56
|
-
item1 = Item.create section: section
|
57
|
-
item2 = Item.create section: section
|
58
|
-
item3 = Item.create section: section
|
59
|
-
assert_equal item1.lower_items.visible, [item2, item3]
|
60
|
-
end
|
61
|
-
end
|