acts_as_list 0.9.17 → 0.9.18
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/Appraisals +3 -0
- data/CHANGELOG.md +32 -5
- data/Gemfile +1 -1
- data/README.md +1 -0
- data/acts_as_list.gemspec +6 -0
- data/gemfiles/rails_3_2.gemfile +2 -2
- data/gemfiles/rails_4_1.gemfile +2 -2
- data/gemfiles/rails_4_2.gemfile +2 -2
- data/gemfiles/rails_5_0.gemfile +1 -1
- data/gemfiles/rails_5_1.gemfile +1 -1
- data/gemfiles/rails_5_2.gemfile +2 -2
- data/lib/acts_as_list/active_record/acts/list.rb +6 -11
- data/lib/acts_as_list/active_record/acts/position_column_method_definer.rb +17 -4
- data/lib/acts_as_list/version.rb +1 -1
- data/test/test_list.rb +151 -1
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c7f90b8a37019ae091449a79440aca7cb8862960
|
|
4
|
+
data.tar.gz: db75dccae8c652a84e9dfaaffb2f195ca238b442
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 65c7f4c2b1ee583aeb3f2ddc8a9c9c07b5428ad6b0d4b3f5d45e0ad9f1e2a55b7ac98c1f0f1ea7a4ee79969bf2bd343b748f1b9463c65a6635120a3235ad02c1
|
|
7
|
+
data.tar.gz: 8bd08749b808b25f33e9f8f398731973625ff0ee42dc76080944a94ab88ca6e817412609af0897d69db7e2c7a8843a36a5a90177fffee17d2cadbfa483a87df8
|
data/Appraisals
CHANGED
|
@@ -3,6 +3,7 @@ appraise "rails-3-2" do
|
|
|
3
3
|
gem "mysql2", "~> 0.3.21", platforms: [:ruby]
|
|
4
4
|
end
|
|
5
5
|
gem "activerecord", "~> 3.2.22.2"
|
|
6
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
6
7
|
group :test do
|
|
7
8
|
gem "after_commit_exception_notification"
|
|
8
9
|
end
|
|
@@ -13,6 +14,7 @@ appraise "rails-4-1" do
|
|
|
13
14
|
gem "mysql2", "~> 0.3.21", platforms: [:ruby]
|
|
14
15
|
end
|
|
15
16
|
gem "activerecord", "~> 4.1.16"
|
|
17
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
16
18
|
group :test do
|
|
17
19
|
gem "after_commit_exception_notification"
|
|
18
20
|
end
|
|
@@ -23,6 +25,7 @@ appraise "rails-4-2" do
|
|
|
23
25
|
gem "mysql2", "~> 0.4.10", platforms: [:ruby]
|
|
24
26
|
end
|
|
25
27
|
gem "activerecord", "~> 4.2.10"
|
|
28
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
appraise "rails-5-0" do
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,35 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Changelog
|
|
2
|
+
All notable changes to this project will be documented in this file.
|
|
3
|
+
|
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.9.18] - 2019-03-08
|
|
10
|
+
### Added
|
|
11
|
+
- Added additional gemspec metadata [@boone](https://github.com/boone)
|
|
12
|
+
- Add gem version badge to README [@joshuapinter](https://github.com/joshuapinter)
|
|
13
|
+
- Add touch on update configuration [@mgbatchelor](https://github.com/mgbatchelor)
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Let's start a new direction with the CHANGELOG file [@mainameiz](https://github.com/mainameiz)
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Fix sqlite3 gem pinning breaking tests
|
|
20
|
+
|
|
21
|
+
## [v0.9.17](https://github.com/swanandp/acts_as_list/tree/v0.9.17) (2018-10-29)
|
|
22
|
+
[Full Changelog](https://github.com/swanandp/acts_as_list/compare/v0.9.16...v0.9.17)
|
|
23
|
+
|
|
24
|
+
**Closed issues:**
|
|
25
|
+
|
|
26
|
+
- Inconsistent behavior [\#330](https://github.com/swanandp/acts_as_list/issues/330)
|
|
27
|
+
- Using `top\_of\_list` set to 1 and setting a record to index 0 triggers a `PG::UniqueViolation` [\#322](https://github.com/swanandp/acts_as_list/issues/322)
|
|
28
|
+
|
|
29
|
+
**Merged pull requests:**
|
|
30
|
+
|
|
31
|
+
- Feature/add exception to wrong position [\#323](https://github.com/swanandp/acts_as_list/pull/323) ([TheNeikos](https://github.com/TheNeikos))
|
|
32
|
+
- Methods move\_to\_bottom and move\_to\_top should not fail when there are unique constraints [\#320](https://github.com/swanandp/acts_as_list/pull/320) ([faucct](https://github.com/faucct))
|
|
2
33
|
|
|
3
34
|
## [v0.9.16](https://github.com/swanandp/acts_as_list/tree/v0.9.16) (2018-08-30)
|
|
4
35
|
[Full Changelog](https://github.com/swanandp/acts_as_list/compare/v0.9.15...v0.9.16)
|
|
@@ -572,7 +603,3 @@
|
|
|
572
603
|
- Fixed test issue for test\_injection: expected SQL was reversed. [\#3](https://github.com/swanandp/acts_as_list/pull/3) ([afriqs](https://github.com/afriqs))
|
|
573
604
|
- Added an option to set the top of the position [\#2](https://github.com/swanandp/acts_as_list/pull/2) ([danielcooper](https://github.com/danielcooper))
|
|
574
605
|
- minor change to acts\_as\_list's callbacks [\#1](https://github.com/swanandp/acts_as_list/pull/1) ([tiegz](https://github.com/tiegz))
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile
CHANGED
data/README.md
CHANGED
data/acts_as_list.gemspec
CHANGED
|
@@ -16,6 +16,12 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
s.rubyforge_project = "acts_as_list"
|
|
17
17
|
s.required_ruby_version = ">= 1.9.2"
|
|
18
18
|
|
|
19
|
+
if s.respond_to?(:metadata)
|
|
20
|
+
s.metadata['changelog_uri'] = 'https://github.com/swanandp/acts_as_list/blob/master/CHANGELOG.md'
|
|
21
|
+
s.metadata['source_code_uri'] = 'https://github.com/swanandp/acts_as_list'
|
|
22
|
+
s.metadata['bug_tracker_uri'] = 'https://github.com/swanandp/acts_as_list/issues'
|
|
23
|
+
end
|
|
24
|
+
|
|
19
25
|
# Load Paths...
|
|
20
26
|
s.files = `git ls-files`.split("\n")
|
|
21
27
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/gemfiles/rails_3_2.gemfile
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
source "http://rubygems.org"
|
|
4
4
|
|
|
5
5
|
gem "rack", "~> 1", platforms: [:ruby_19, :ruby_20, :ruby_21]
|
|
6
|
-
gem "rake"
|
|
6
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
7
7
|
gem "appraisal"
|
|
8
8
|
gem "activerecord", "~> 3.2.22.2"
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@ group :test do
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
group :sqlite do
|
|
23
|
-
gem "sqlite3", platforms: [:ruby]
|
|
23
|
+
gem "sqlite3", "~> 1.3.13", platforms: [:ruby]
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
group :postgresql do
|
data/gemfiles/rails_4_1.gemfile
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
source "http://rubygems.org"
|
|
4
4
|
|
|
5
5
|
gem "rack", "~> 1", platforms: [:ruby_19, :ruby_20, :ruby_21]
|
|
6
|
-
gem "rake"
|
|
6
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
7
7
|
gem "appraisal"
|
|
8
8
|
gem "activerecord", "~> 4.1.16"
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@ group :test do
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
group :sqlite do
|
|
23
|
-
gem "sqlite3", platforms: [:ruby]
|
|
23
|
+
gem "sqlite3", "~> 1.3.13", platforms: [:ruby]
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
group :postgresql do
|
data/gemfiles/rails_4_2.gemfile
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
source "http://rubygems.org"
|
|
4
4
|
|
|
5
5
|
gem "rack", "~> 1", platforms: [:ruby_19, :ruby_20, :ruby_21]
|
|
6
|
-
gem "rake"
|
|
6
|
+
gem "rake", "~> 12.2.0", platforms: [:ruby_19]
|
|
7
7
|
gem "appraisal"
|
|
8
8
|
gem "activerecord", "~> 4.2.10"
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ group :test do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
group :sqlite do
|
|
22
|
-
gem "sqlite3", platforms: [:ruby]
|
|
22
|
+
gem "sqlite3", "~> 1.3.13", platforms: [:ruby]
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
group :postgresql do
|
data/gemfiles/rails_5_0.gemfile
CHANGED
data/gemfiles/rails_5_1.gemfile
CHANGED
data/gemfiles/rails_5_2.gemfile
CHANGED
|
@@ -5,7 +5,7 @@ source "http://rubygems.org"
|
|
|
5
5
|
gem "rack", "~> 1", platforms: [:ruby_19, :ruby_20, :ruby_21]
|
|
6
6
|
gem "rake"
|
|
7
7
|
gem "appraisal"
|
|
8
|
-
gem "activerecord", "~> 5.2.
|
|
8
|
+
gem "activerecord", "~> 5.2.1"
|
|
9
9
|
|
|
10
10
|
group :development do
|
|
11
11
|
gem "github_changelog_generator", "1.9.0"
|
|
@@ -19,7 +19,7 @@ group :test do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
group :sqlite do
|
|
22
|
-
gem "sqlite3", platforms: [:ruby]
|
|
22
|
+
gem "sqlite3", "~> 1.3.13", platforms: [:ruby]
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
group :postgresql do
|
|
@@ -20,13 +20,14 @@ module ActiveRecord
|
|
|
20
20
|
# one by one to respect position column unique not null constraint.
|
|
21
21
|
# Defaults to true if position column has unique index, otherwise false.
|
|
22
22
|
# If constraint is <tt>deferrable initially deferred<tt>, overriding it with false will speed up insert_at.
|
|
23
|
+
# * +touch_on_update+ - configuration to disable the update of the model timestamps when the positions are updated.
|
|
23
24
|
def acts_as_list(options = {})
|
|
24
|
-
configuration = { column: "position", scope: "1 = 1", top_of_list: 1, add_new_at: :bottom }
|
|
25
|
+
configuration = { column: "position", scope: "1 = 1", top_of_list: 1, add_new_at: :bottom, touch_on_update: true }
|
|
25
26
|
configuration.update(options) if options.is_a?(Hash)
|
|
26
27
|
|
|
27
28
|
caller_class = self
|
|
28
29
|
|
|
29
|
-
ActiveRecord::Acts::List::PositionColumnMethodDefiner.call(caller_class, configuration[:column])
|
|
30
|
+
ActiveRecord::Acts::List::PositionColumnMethodDefiner.call(caller_class, configuration[:column], configuration[:touch_on_update])
|
|
30
31
|
ActiveRecord::Acts::List::ScopeMethodDefiner.call(caller_class, configuration[:scope])
|
|
31
32
|
ActiveRecord::Acts::List::TopOfListMethodDefiner.call(caller_class, configuration[:top_of_list])
|
|
32
33
|
ActiveRecord::Acts::List::AddNewAtMethodDefiner.call(caller_class, configuration[:add_new_at])
|
|
@@ -327,9 +328,7 @@ module ActiveRecord
|
|
|
327
328
|
position ||= send(position_column).to_i
|
|
328
329
|
|
|
329
330
|
if sequential_updates?
|
|
330
|
-
acts_as_list_list.where("#{quoted_position_column_with_table_name} > ?", position).reorder(acts_as_list_order_argument(:asc)).
|
|
331
|
-
item.decrement!(position_column)
|
|
332
|
-
end
|
|
331
|
+
acts_as_list_list.where("#{quoted_position_column_with_table_name} > ?", position).reorder(acts_as_list_order_argument(:asc)).decrement_sequentially
|
|
333
332
|
else
|
|
334
333
|
acts_as_list_list.where("#{quoted_position_column_with_table_name} > ?", position).decrement_all
|
|
335
334
|
end
|
|
@@ -365,9 +364,7 @@ module ActiveRecord
|
|
|
365
364
|
)
|
|
366
365
|
|
|
367
366
|
if sequential_updates?
|
|
368
|
-
items.reorder(acts_as_list_order_argument(:asc)).
|
|
369
|
-
item.decrement!(position_column)
|
|
370
|
-
end
|
|
367
|
+
items.reorder(acts_as_list_order_argument(:asc)).decrement_sequentially
|
|
371
368
|
else
|
|
372
369
|
items.decrement_all
|
|
373
370
|
end
|
|
@@ -383,9 +380,7 @@ module ActiveRecord
|
|
|
383
380
|
)
|
|
384
381
|
|
|
385
382
|
if sequential_updates?
|
|
386
|
-
items.reorder(acts_as_list_order_argument(:desc)).
|
|
387
|
-
item.increment!(position_column)
|
|
388
|
-
end
|
|
383
|
+
items.reorder(acts_as_list_order_argument(:desc)).increment_sequentially
|
|
389
384
|
else
|
|
390
385
|
items.increment_all
|
|
391
386
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module ActiveRecord::Acts::List::PositionColumnMethodDefiner #:nodoc:
|
|
4
|
-
def self.call(caller_class, position_column)
|
|
5
|
-
define_class_methods(caller_class, position_column)
|
|
4
|
+
def self.call(caller_class, position_column, touch_on_update)
|
|
5
|
+
define_class_methods(caller_class, position_column, touch_on_update)
|
|
6
6
|
define_instance_methods(caller_class, position_column)
|
|
7
7
|
|
|
8
8
|
if mass_assignment_protection_was_used_by_user?(caller_class)
|
|
@@ -12,7 +12,7 @@ module ActiveRecord::Acts::List::PositionColumnMethodDefiner #:nodoc:
|
|
|
12
12
|
|
|
13
13
|
private
|
|
14
14
|
|
|
15
|
-
def self.define_class_methods(caller_class, position_column)
|
|
15
|
+
def self.define_class_methods(caller_class, position_column, touch_on_update)
|
|
16
16
|
caller_class.class_eval do
|
|
17
17
|
define_singleton_method :quoted_position_column do
|
|
18
18
|
@_quoted_position_column ||= connection.quote_column_name(position_column)
|
|
@@ -22,6 +22,18 @@ module ActiveRecord::Acts::List::PositionColumnMethodDefiner #:nodoc:
|
|
|
22
22
|
@_quoted_position_column_with_table_name ||= "#{caller_class.quoted_table_name}.#{quoted_position_column}"
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
define_singleton_method :decrement_sequentially do
|
|
26
|
+
pluck(primary_key).each do |id|
|
|
27
|
+
where(primary_key => id).decrement_all
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
define_singleton_method :increment_sequentially do
|
|
32
|
+
pluck(primary_key).each do |id|
|
|
33
|
+
where(primary_key => id).increment_all
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
25
37
|
define_singleton_method :decrement_all do
|
|
26
38
|
update_all_with_touch "#{quoted_position_column} = (#{quoted_position_column_with_table_name} - 1)"
|
|
27
39
|
end
|
|
@@ -31,7 +43,8 @@ module ActiveRecord::Acts::List::PositionColumnMethodDefiner #:nodoc:
|
|
|
31
43
|
end
|
|
32
44
|
|
|
33
45
|
define_singleton_method :update_all_with_touch do |updates|
|
|
34
|
-
|
|
46
|
+
updates += touch_record_sql if touch_on_update
|
|
47
|
+
update_all(updates)
|
|
35
48
|
end
|
|
36
49
|
|
|
37
50
|
private
|
data/lib/acts_as_list/version.rb
CHANGED
data/test/test_list.rb
CHANGED
|
@@ -39,9 +39,18 @@ def setup_db(position_options = {})
|
|
|
39
39
|
t.column :order, :integer
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
# This table is used to test table names with different primary_key columns
|
|
43
|
+
ActiveRecord::Base.connection.create_table 'altid-table', primary_key: 'altid' do |t|
|
|
44
|
+
t.column :pos, :integer
|
|
45
|
+
t.column :created_at, :datetime
|
|
46
|
+
t.column :updated_at, :datetime
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
ActiveRecord::Base.connection.add_index 'altid-table', :pos, unique: true
|
|
50
|
+
|
|
42
51
|
mixins = [ Mixin, ListMixin, ListMixinSub1, ListMixinSub2, ListWithStringScopeMixin,
|
|
43
52
|
ArrayScopeListMixin, ZeroBasedMixin, DefaultScopedMixin,
|
|
44
|
-
DefaultScopedWhereMixin, TopAdditionMixin, NoAdditionMixin, QuotedList ]
|
|
53
|
+
DefaultScopedWhereMixin, TopAdditionMixin, NoAdditionMixin, QuotedList, TouchDisabledMixin ]
|
|
45
54
|
|
|
46
55
|
mixins << EnumArrayScopeListMixin if rails_4
|
|
47
56
|
|
|
@@ -63,6 +72,10 @@ class ListMixin < Mixin
|
|
|
63
72
|
acts_as_list column: "pos", scope: :parent
|
|
64
73
|
end
|
|
65
74
|
|
|
75
|
+
class TouchDisabledMixin < Mixin
|
|
76
|
+
acts_as_list column: "pos", touch_on_update: false
|
|
77
|
+
end
|
|
78
|
+
|
|
66
79
|
class ListMixinSub1 < ListMixin
|
|
67
80
|
end
|
|
68
81
|
|
|
@@ -131,6 +144,17 @@ class SequentialUpdatesDefault < Mixin
|
|
|
131
144
|
acts_as_list column: "pos"
|
|
132
145
|
end
|
|
133
146
|
|
|
147
|
+
class SequentialUpdatesAltId < ActiveRecord::Base
|
|
148
|
+
self.table_name = "altid-table"
|
|
149
|
+
self.primary_key = "altid"
|
|
150
|
+
|
|
151
|
+
acts_as_list column: "pos"
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
class SequentialUpdatesAltIdTouchDisabled < SequentialUpdatesAltId
|
|
155
|
+
acts_as_list column: "pos", touch_on_update: false
|
|
156
|
+
end
|
|
157
|
+
|
|
134
158
|
class SequentialUpdatesFalseMixin < Mixin
|
|
135
159
|
acts_as_list column: "pos", sequential_updates: false
|
|
136
160
|
end
|
|
@@ -812,6 +836,41 @@ class TouchTest < ActsAsListTestCase
|
|
|
812
836
|
end
|
|
813
837
|
end
|
|
814
838
|
|
|
839
|
+
class TouchDisabledTest < ActsAsListTestCase
|
|
840
|
+
def setup
|
|
841
|
+
setup_db
|
|
842
|
+
Timecop.freeze(yesterday) do
|
|
843
|
+
4.times { TouchDisabledMixin.create! }
|
|
844
|
+
end
|
|
845
|
+
end
|
|
846
|
+
|
|
847
|
+
def now
|
|
848
|
+
@now ||= Time.current.change(usec: 0)
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
def yesterday
|
|
852
|
+
@yesterday ||= 1.day.ago
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
def updated_ats
|
|
856
|
+
TouchDisabledMixin.order(:id).pluck(:updated_at)
|
|
857
|
+
end
|
|
858
|
+
|
|
859
|
+
def positions
|
|
860
|
+
ListMixin.order(:id).pluck(:pos)
|
|
861
|
+
end
|
|
862
|
+
|
|
863
|
+
def test_deleting_item_does_not_touch_higher_items
|
|
864
|
+
Timecop.freeze(now) do
|
|
865
|
+
TouchDisabledMixin.first.destroy
|
|
866
|
+
updated_ats.each do |updated_at|
|
|
867
|
+
assert_equal updated_at.to_i, yesterday.to_i
|
|
868
|
+
end
|
|
869
|
+
assert_equal positions, [1, 2, 3]
|
|
870
|
+
end
|
|
871
|
+
end
|
|
872
|
+
end
|
|
873
|
+
|
|
815
874
|
class ActsAsListTopTest < ActsAsListTestCase
|
|
816
875
|
def setup
|
|
817
876
|
setup_db
|
|
@@ -930,4 +989,95 @@ class SequentialUpdatesMixinNotNullUniquePositiveConstraintsTest < ActsAsListTes
|
|
|
930
989
|
new_item.insert_at(0)
|
|
931
990
|
end
|
|
932
991
|
end
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
class SequentialUpdatesMixinNotNullUniquePositiveConstraintsTest < ActsAsListTestCase
|
|
995
|
+
def setup
|
|
996
|
+
setup_db null: false, unique: true, positive: true
|
|
997
|
+
(1..4).each { |counter| SequentialUpdatesAltId.create!({pos: counter}) }
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
def test_sequential_updates_default_to_true_with_unique_index
|
|
1001
|
+
assert_equal true, SequentialUpdatesAltId.new.send(:sequential_updates?)
|
|
1002
|
+
end
|
|
1003
|
+
|
|
1004
|
+
def test_insert_at
|
|
1005
|
+
new = SequentialUpdatesAltId.create
|
|
1006
|
+
assert_equal 5, new.pos
|
|
1007
|
+
|
|
1008
|
+
new.insert_at(1)
|
|
1009
|
+
assert_equal 1, new.pos
|
|
1010
|
+
|
|
1011
|
+
new.insert_at(5)
|
|
1012
|
+
assert_equal 5, new.pos
|
|
1013
|
+
|
|
1014
|
+
new.insert_at(3)
|
|
1015
|
+
assert_equal 3, new.pos
|
|
1016
|
+
end
|
|
1017
|
+
|
|
1018
|
+
def test_move_to_bottom
|
|
1019
|
+
item = SequentialUpdatesAltId.order(:pos).first
|
|
1020
|
+
item.move_to_bottom
|
|
1021
|
+
assert_equal 4, item.pos
|
|
1022
|
+
end
|
|
1023
|
+
|
|
1024
|
+
def test_move_to_top
|
|
1025
|
+
new_item = SequentialUpdatesAltId.create!
|
|
1026
|
+
assert_equal 5, new_item.pos
|
|
1027
|
+
|
|
1028
|
+
new_item.move_to_top
|
|
1029
|
+
assert_equal 1, new_item.pos
|
|
1030
|
+
end
|
|
1031
|
+
|
|
1032
|
+
def test_destroy
|
|
1033
|
+
new_item = SequentialUpdatesAltId.create
|
|
1034
|
+
assert_equal 5, new_item.pos
|
|
1035
|
+
|
|
1036
|
+
new_item.insert_at(2)
|
|
1037
|
+
assert_equal 2, new_item.pos
|
|
1038
|
+
|
|
1039
|
+
new_item.destroy
|
|
1040
|
+
assert_equal [1,2,3,4], SequentialUpdatesAltId.all.map(&:pos).sort
|
|
1041
|
+
|
|
1042
|
+
end
|
|
1043
|
+
end
|
|
1044
|
+
|
|
1045
|
+
class SequentialUpdatesAltIdTouchDisabledTest < ActsAsListTestCase
|
|
1046
|
+
def setup
|
|
1047
|
+
setup_db
|
|
1048
|
+
Timecop.freeze(yesterday) do
|
|
1049
|
+
4.times { SequentialUpdatesAltIdTouchDisabled.create! }
|
|
1050
|
+
end
|
|
1051
|
+
end
|
|
1052
|
+
|
|
1053
|
+
def now
|
|
1054
|
+
@now ||= Time.current.change(usec: 0)
|
|
1055
|
+
end
|
|
1056
|
+
|
|
1057
|
+
def yesterday
|
|
1058
|
+
@yesterday ||= 1.day.ago
|
|
1059
|
+
end
|
|
1060
|
+
|
|
1061
|
+
def updated_ats
|
|
1062
|
+
SequentialUpdatesAltIdTouchDisabled.order(:altid).pluck(:updated_at)
|
|
1063
|
+
end
|
|
1064
|
+
|
|
1065
|
+
def positions
|
|
1066
|
+
SequentialUpdatesAltIdTouchDisabled.order(:altid).pluck(:pos)
|
|
1067
|
+
end
|
|
1068
|
+
|
|
1069
|
+
def test_sequential_updates_default_to_true_with_unique_index
|
|
1070
|
+
assert_equal true, SequentialUpdatesAltIdTouchDisabled.new.send(:sequential_updates?)
|
|
1071
|
+
end
|
|
1072
|
+
|
|
1073
|
+
def test_deleting_item_does_not_touch_higher_items
|
|
1074
|
+
Timecop.freeze(now) do
|
|
1075
|
+
SequentialUpdatesAltIdTouchDisabled.first.destroy
|
|
1076
|
+
updated_ats.each do |updated_at|
|
|
1077
|
+
assert_equal updated_at.to_i, yesterday.to_i
|
|
1078
|
+
end
|
|
1079
|
+
assert_equal positions, [1, 2, 3]
|
|
1080
|
+
end
|
|
1081
|
+
end
|
|
1082
|
+
end
|
|
933
1083
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acts_as_list
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.18
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2019-03-07 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: activerecord
|
|
@@ -97,7 +97,10 @@ files:
|
|
|
97
97
|
homepage: http://github.com/swanandp/acts_as_list
|
|
98
98
|
licenses:
|
|
99
99
|
- MIT
|
|
100
|
-
metadata:
|
|
100
|
+
metadata:
|
|
101
|
+
changelog_uri: https://github.com/swanandp/acts_as_list/blob/master/CHANGELOG.md
|
|
102
|
+
source_code_uri: https://github.com/swanandp/acts_as_list
|
|
103
|
+
bug_tracker_uri: https://github.com/swanandp/acts_as_list/issues
|
|
101
104
|
post_install_message:
|
|
102
105
|
rdoc_options: []
|
|
103
106
|
require_paths:
|