acts_as_list 1.2.0 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97086f40e0296a92be25b988885cb618bd17323c31639c7b976e20e82005da54
4
- data.tar.gz: 225e05bc8973871d0a7955abaf181180ff5b8de3d2b461278eeb260df3a49b2c
3
+ metadata.gz: bc38c9c0378653bb5f8eb7194bd9cc22d906df7cf2b7a158e9fe763a0d6f5a94
4
+ data.tar.gz: c67158a399378bab4f1258ba6819f9cb7715eedc0b63e1f995869d0032075b75
5
5
  SHA512:
6
- metadata.gz: 6d43449915c885f64e477bff8c4a9e0d581e632e4cfab61e0f313fc0b67c4507f6cda9e3aab5afb53357cc44fee664f873e7ca2b93b0f22a22b1e272ed1e39db
7
- data.tar.gz: 24dfa6bf08290e1d18331ee5ad7c0eeb03ae1dce2191881503a889058136ccfb8007d0acbee9bc57e5363073740a8efec872225b4978922d0a1f1dcf49c3ca0a
6
+ metadata.gz: 8b4b29d19abf1dbc2b0c75b4f0a0e4123ec4580084a170af83ca3431ca0bc7d46fa108ba3d6573620585bb00332c0b2b10b68779d2a4fd899fcfc888601e83ab
7
+ data.tar.gz: 2c999ec1287f4fafacd7406317075c5a0410f84a8c7e0b96ec787fffee0209033ca78aa4947948aee830fe41a6de173ad031fe5895daf33b12679140507aa278
data/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## v1.2.2 - 2024-07-16
10
+
11
+ ### Fixed
12
+ - Updated .gemspec to exclude unnecessary files from the gem package. [\#437](https://github.com/brendon/acts_as_list/pull/437) ([f440])
13
+
14
+ ## v1.2.1 - 2024-06-06
15
+
16
+ ### Fixed
17
+ - We no longer delegate the class `connection` method to the instance. [\#436](https://github.com/brendon/acts_as_list/pull/436) ([davidcelis])
18
+
9
19
  ## v1.2.0 - 2024-06-03
10
20
 
11
21
  ### Added
@@ -265,7 +275,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
265
275
  **Closed issues:**
266
276
 
267
277
  - DEPRECATION WARNING on rails 5.0 as of acts\_as\_list 0.9 [\#251](https://github.com/brendon/acts_as_list/issues/251)
268
- - highter\_items returns items with the same position value [\#247](https://github.com/brendon/acts_as_list/issues/247)
278
+ - higher\_items returns items with the same position value [\#247](https://github.com/brendon/acts_as_list/issues/247)
269
279
  - Broken with unique constraint on position [\#245](https://github.com/brendon/acts_as_list/issues/245)
270
280
 
271
281
  **Merged pull requests:**
@@ -493,7 +503,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
493
503
  - Fix sanitize\_sql\_hash\_for\_conditions deprecation warning in Rails 4.2 [\#140](https://github.com/brendon/acts_as_list/pull/140) ([eagletmt](https://github.com/eagletmt))
494
504
  - Simpler method to find the subclass name [\#139](https://github.com/brendon/acts_as_list/pull/139) ([brendon](https://github.com/brendon))
495
505
  - Rails4 enum column support [\#130](https://github.com/brendon/acts_as_list/pull/130) ([arunagw](https://github.com/arunagw))
496
- - use eval for determing the self.class.name useful when this is used in an abstract class [\#123](https://github.com/brendon/acts_as_list/pull/123) ([flarik](https://github.com/flarik))
506
+ - use eval for determining the self.class.name useful when this is used in an abstract class [\#123](https://github.com/brendon/acts_as_list/pull/123) ([flarik](https://github.com/flarik))
497
507
 
498
508
  ## [0.5.0](https://github.com/brendon/acts_as_list/tree/0.5.0) (2014-10-31)
499
509
  [Full Changelog](https://github.com/brendon/acts_as_list/compare/0.4.0...0.5.0)
@@ -633,7 +643,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
633
643
  - acts\_as\_list :scope =\> "doesnt\_seem\_to\_work" [\#12](https://github.com/brendon/acts_as_list/issues/12)
634
644
  - don't work perfectly with default\_scope [\#11](https://github.com/brendon/acts_as_list/issues/11)
635
645
  - MySQL: Position column MUST NOT have default [\#10](https://github.com/brendon/acts_as_list/issues/10)
636
- - insert\_at fails on postgresql w/ non-null constraint on postion\_column [\#8](https://github.com/brendon/acts_as_list/issues/8)
646
+ - insert\_at fails on postgresql w/ non-null constraint on position\_column [\#8](https://github.com/brendon/acts_as_list/issues/8)
637
647
 
638
648
  **Merged pull requests:**
639
649
 
@@ -642,7 +652,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
642
652
  - Massive test refactorings. [\#24](https://github.com/brendon/acts_as_list/pull/24) ([splattael](https://github.com/splattael))
643
653
  - Silent migrations to reduce test noise. [\#22](https://github.com/brendon/acts_as_list/pull/22) ([splattael](https://github.com/splattael))
644
654
  - Should decrement lower items after the item has been destroyed to avoid unique key conflicts. [\#18](https://github.com/brendon/acts_as_list/pull/18) ([aepstein](https://github.com/aepstein))
645
- - Fix spelling and grammer [\#15](https://github.com/brendon/acts_as_list/pull/15) ([tmiller](https://github.com/tmiller))
655
+ - Fix spelling and grammar [\#15](https://github.com/brendon/acts_as_list/pull/15) ([tmiller](https://github.com/tmiller))
646
656
  - store\_at\_0 should yank item from the list then decrement items to avoid r [\#14](https://github.com/brendon/acts_as_list/pull/14) ([aepstein](https://github.com/aepstein))
647
657
  - Support default\_scope ordering by calling .unscoped [\#13](https://github.com/brendon/acts_as_list/pull/13) ([tanordheim](https://github.com/tanordheim))
648
658
 
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Acts As List
2
2
 
3
3
  ## Build Status
4
- [![Build Status](https://travis-ci.org/brendon/acts_as_list.svg?branch=master)](https://travis-ci.org/brendon/acts_as_list)
4
+ [![Continuous Integration](https://github.com/brendon/acts_as_list/actions/workflows/continuous_integration.yml/badge.svg)](https://github.com/brendon/acts_as_list/actions/workflows/continuous_integration.yml)
5
5
  [![Gem Version](https://badge.fury.io/rb/acts_as_list.svg)](https://badge.fury.io/rb/acts_as_list)
6
6
 
7
7
  ## ANNOUNCING: Positioning, the gem
8
- As maintainer of both Acts As List and the Ranked Model gems, I've become intimately aquainted with the strengths and weaknesses of each. I ended up writing a small scale Rails Concern for positioning database rows for a recent project and it worked really well so I've decided to release it as a gem: [Positioning](https://github.com/brendon/positioning)
8
+ As maintainer of both Acts As List and the Ranked Model gems, I've become intimately acquainted with the strengths and weaknesses of each. I ended up writing a small scale Rails Concern for positioning database rows for a recent project and it worked really well so I've decided to release it as a gem: [Positioning](https://github.com/brendon/positioning)
9
9
 
10
10
  Positioning works similarly to Acts As List in that it maintains a sequential list of integer values as positions. It differs in that it encourages a unique constraints on the position column and supports multiple lists per database table. It borrows Ranked Model's concept of relative positioning. I encourage you to check it out and give it a whirl on your project!
11
11
 
@@ -290,7 +290,7 @@ All versions `0.1.5` onwards require Rails 3.0.x and higher.
290
290
 
291
291
  We often hear complaints that `position` values are repeated, incorrect etc. For example, #254. To ensure data integrity, you should rely on your database. There are two things you can do:
292
292
 
293
- 1. Use constraints. If you model `Item` that `belongs_to` an `Order`, and it has a `position` column, then add a unique constraint on `items` with `[:order_id, :position]`. Think of it as a list invariant. What are the properties of your list that don't change no matter how many items you have in it? One such propery is that each item has a distinct position. Another _could be_ that position is always greater than 0. It is strongly recommended that you rely on your database to enforce these invariants or constraints. Here are the docs for [PostgreSQL](https://www.postgresql.org/docs/9.5/static/ddl-constraints.html) and [MySQL](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html).
293
+ 1. Use constraints. If you model `Item` that `belongs_to` an `Order`, and it has a `position` column, then add a unique constraint on `items` with `[:order_id, :position]`. Think of it as a list invariant. What are the properties of your list that don't change no matter how many items you have in it? One such property is that each item has a distinct position. Another _could be_ that position is always greater than 0. It is strongly recommended that you rely on your database to enforce these invariants or constraints. Here are the docs for [PostgreSQL](https://www.postgresql.org/docs/9.5/static/ddl-constraints.html) and [MySQL](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html).
294
294
  2. Use mutexes or row level locks. At its heart the duplicate problem is that of handling concurrency. Adding a contention resolution mechanism like locks will solve it to some extent. But it is not a solution or replacement for constraints. Locks are also prone to deadlocks.
295
295
 
296
296
  As a library, `acts_as_list` may not always have all the context needed to apply these tools. They are much better suited at the application level.
@@ -72,17 +72,18 @@ module ActiveRecord::Acts::List::PositionColumnMethodDefiner #:nodoc:
72
72
  cached_quoted_now = quoted_current_time_from_proper_timezone
73
73
 
74
74
  timestamp_attributes_for_update_in_model.map do |attr|
75
- ", #{connection.quote_column_name(attr)} = #{cached_quoted_now}"
75
+ ", #{self.class.connection.quote_column_name(attr)} = #{cached_quoted_now}"
76
76
  end.join
77
77
  end
78
78
 
79
79
  private
80
80
 
81
- delegate :connection, to: self
82
-
83
81
  def quoted_current_time_from_proper_timezone
84
- connection.quote(connection.quoted_date(
85
- current_time_from_proper_timezone))
82
+ self.class.connection.quote(
83
+ self.class.connection.quoted_date(
84
+ current_time_from_proper_timezone
85
+ )
86
+ )
86
87
  end
87
88
  end
88
89
  end
@@ -3,7 +3,7 @@
3
3
  module ActiveRecord
4
4
  module Acts
5
5
  module List
6
- VERSION = '1.2.0'
6
+ VERSION = '1.2.2'
7
7
  end
8
8
  end
9
9
  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: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Swanand Pagnis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-06-02 00:00:00.000000000 Z
12
+ date: 2024-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -134,16 +134,10 @@ extensions: []
134
134
  extra_rdoc_files: []
135
135
  files:
136
136
  - ".gemtest"
137
- - ".github/FUNDING.yml"
138
- - ".github/dependabot.yml"
139
- - ".github/workflows/continuous_integration.yml"
140
- - ".gitignore"
141
137
  - CHANGELOG.md
142
- - Gemfile
143
138
  - MIT-LICENSE
144
139
  - README.md
145
140
  - Rakefile
146
- - acts_as_list.gemspec
147
141
  - init.rb
148
142
  - lib/acts_as_list.rb
149
143
  - lib/acts_as_list/active_record/acts/active_record.rb
@@ -157,24 +151,6 @@ files:
157
151
  - lib/acts_as_list/active_record/acts/sequential_updates_method_definer.rb
158
152
  - lib/acts_as_list/active_record/acts/top_of_list_method_definer.rb
159
153
  - lib/acts_as_list/version.rb
160
- - test/helper.rb
161
- - test/shared.rb
162
- - test/shared_array_scope_list.rb
163
- - test/shared_list.rb
164
- - test/shared_list_sub.rb
165
- - test/shared_no_addition.rb
166
- - test/shared_quoting.rb
167
- - test/shared_top_addition.rb
168
- - test/shared_zero_based.rb
169
- - test/support/ci_database.yml
170
- - test/support/database.yml
171
- - test/test_default_scope_with_select.rb
172
- - test/test_joined_list.rb
173
- - test/test_list.rb
174
- - test/test_no_update_for_extra_classes.rb
175
- - test/test_no_update_for_scope_destruction.rb
176
- - test/test_no_update_for_subclasses.rb
177
- - test/test_scope_with_user_defined_foreign_key.rb
178
154
  homepage: https://github.com/brendon/acts_as_list
179
155
  licenses:
180
156
  - MIT
@@ -182,6 +158,7 @@ metadata:
182
158
  changelog_uri: https://github.com/brendon/acts_as_list/blob/master/CHANGELOG.md
183
159
  source_code_uri: https://github.com/brendon/acts_as_list
184
160
  bug_tracker_uri: https://github.com/brendon/acts_as_list/issues
161
+ rubygems_mfa_required: 'true'
185
162
  post_install_message:
186
163
  rdoc_options: []
187
164
  require_paths:
@@ -190,7 +167,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
167
  requirements:
191
168
  - - ">="
192
169
  - !ruby/object:Gem::Version
193
- version: 2.4.7
170
+ version: '2.5'
194
171
  required_rubygems_version: !ruby/object:Gem::Requirement
195
172
  requirements:
196
173
  - - ">="
@@ -202,22 +179,4 @@ signing_key:
202
179
  specification_version: 4
203
180
  summary: A gem adding sorting, reordering capabilities to an active_record model,
204
181
  allowing it to act as a list
205
- test_files:
206
- - test/helper.rb
207
- - test/shared.rb
208
- - test/shared_array_scope_list.rb
209
- - test/shared_list.rb
210
- - test/shared_list_sub.rb
211
- - test/shared_no_addition.rb
212
- - test/shared_quoting.rb
213
- - test/shared_top_addition.rb
214
- - test/shared_zero_based.rb
215
- - test/support/ci_database.yml
216
- - test/support/database.yml
217
- - test/test_default_scope_with_select.rb
218
- - test/test_joined_list.rb
219
- - test/test_list.rb
220
- - test/test_no_update_for_extra_classes.rb
221
- - test/test_no_update_for_scope_destruction.rb
222
- - test/test_no_update_for_subclasses.rb
223
- - test/test_scope_with_user_defined_foreign_key.rb
182
+ test_files: []
data/.github/FUNDING.yml DELETED
@@ -1,3 +0,0 @@
1
- # These are supported funding model platforms
2
-
3
- github: [brendon]
@@ -1,6 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "github-actions"
4
- directory: "/"
5
- schedule:
6
- interval: "weekly"
@@ -1,62 +0,0 @@
1
- name: Continuous Integration
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
- pull_request:
8
-
9
- jobs:
10
- tests:
11
- runs-on: ubuntu-latest
12
- name: Ruby ${{ matrix.ruby }}, DB ${{ matrix.db }}, Rails ${{ matrix.rails }}
13
- strategy:
14
- fail-fast: false
15
- matrix:
16
- ruby:
17
- - '3.0'
18
- - '3.1'
19
- - '3.2'
20
- - '3.3'
21
- rails:
22
- - '6.1'
23
- - '7.0'
24
- - '7.1'
25
- db:
26
- - mysql
27
- - postgresql
28
- - sqlite
29
- exclude:
30
- - rails: '7.0'
31
- ruby: '3.1'
32
- - rails: '7.0'
33
- ruby: '3.2'
34
- - rails: '7.0'
35
- ruby: '3.3'
36
- env:
37
- DB: ${{ matrix.db }}
38
- RAILS_VERSION: ${{ matrix.rails }}
39
- steps:
40
- - uses: actions/checkout@v4
41
- - name: Set up Ruby
42
- uses: ruby/setup-ruby@v1
43
- with:
44
- ruby-version: ${{ matrix.ruby }}
45
- bundler-cache: true
46
- - name: Enable MySQL
47
- if: ${{ matrix.db == 'mysql' }}
48
- run: sudo systemctl start mysql.service
49
- - name: Create MySQL Database
50
- if: ${{ matrix.db == 'mysql' }}
51
- run: mysql -u root -proot -e 'CREATE DATABASE runner;'
52
- - name: Enable PostgreSQL
53
- if: ${{ matrix.db == 'postgresql' }}
54
- run: sudo systemctl start postgresql.service
55
- - name: Create PostgreSQL User
56
- if: ${{ matrix.db == 'postgresql' }}
57
- run: sudo -u postgres -i createuser runner -s
58
- - name: Create PostgreSQL Database
59
- if: ${{ matrix.db == 'postgresql' }}
60
- run: createdb runner
61
- - name: Run the default task
62
- run: bundle exec rake
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- .rvmrc
6
- *.tmproj
7
- .rbenv-version
8
- .ruby-gemset
9
- .ruby-version
10
- .DS_Store
11
- /tmp/
12
- /db/
13
- file::memory*
data/Gemfile DELETED
@@ -1,13 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in positioning.gemspec
4
- gemspec
5
-
6
- gem "rake", "~> 13.0"
7
-
8
- gem "minitest", "~> 5.0"
9
-
10
- if ENV["RAILS_VERSION"]
11
- gem "activerecord", ENV["RAILS_VERSION"]
12
- gem "activesupport", ENV["RAILS_VERSION"]
13
- end
data/acts_as_list.gemspec DELETED
@@ -1,39 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "acts_as_list/version"
4
-
5
- Gem::Specification.new do |s|
6
- # Description Meta...
7
- s.name = "acts_as_list"
8
- s.version = ActiveRecord::Acts::List::VERSION
9
- s.platform = Gem::Platform::RUBY
10
- s.authors = ["Swanand Pagnis", "Brendon Muir"]
11
- s.email = %w(swanand.pagnis@gmail.com brendon@spikeatschool.co.nz)
12
- s.homepage = "https://github.com/brendon/acts_as_list"
13
- s.summary = "A gem adding sorting, reordering capabilities to an active_record model, allowing it to act as a list"
14
- s.description = 'This "acts_as" extension provides the capabilities for sorting and reordering a number of objects in a list. The class that has this specified needs to have a "position" column defined as an integer on the mapped database table.'
15
- s.license = "MIT"
16
- s.required_ruby_version = ">= 2.4.7"
17
-
18
- if s.respond_to?(:metadata)
19
- s.metadata['changelog_uri'] = 'https://github.com/brendon/acts_as_list/blob/master/CHANGELOG.md'
20
- s.metadata['source_code_uri'] = 'https://github.com/brendon/acts_as_list'
21
- s.metadata['bug_tracker_uri'] = 'https://github.com/brendon/acts_as_list/issues'
22
- end
23
-
24
- # Load Paths...
25
- s.files = `git ls-files`.split("\n")
26
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
- s.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f)}
28
- s.require_paths = ["lib"]
29
-
30
- # Dependencies (installed via "bundle install")
31
- s.add_dependency "activerecord", ">= 6.1"
32
- s.add_dependency "activesupport", ">= 6.1"
33
- s.add_development_dependency "minitest-hooks", "~> 1.5.1"
34
- s.add_development_dependency "mocha", "~> 2.1.0"
35
- s.add_development_dependency "timecop", "~> 0.9.8"
36
- s.add_development_dependency "mysql2", "~> 0.5.6"
37
- s.add_development_dependency "pg", "~> 1.5.5"
38
- s.add_development_dependency "sqlite3", "~> 1.7.2"
39
- end
data/test/helper.rb DELETED
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # $DEBUG = true
4
-
5
- require "rubygems"
6
- require "bundler/setup"
7
- begin
8
- Bundler.setup(:default, :development)
9
- rescue Bundler::BundlerError => e
10
- $stderr.puts e.message
11
- $stderr.puts "Run `bundle install` to install missing gems"
12
- exit e.status_code
13
- end
14
- require "active_record"
15
- require "minitest/autorun"
16
- require "mocha/minitest"
17
- require "#{File.dirname(__FILE__)}/../init"
18
-
19
- ENV["DB"] = "mysql" unless ENV["DB"]
20
-
21
- if defined?(ActiveRecord::VERSION) &&
22
- ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR >= 2
23
-
24
- # Was removed in Rails 5 and is effectively true.
25
- ActiveRecord::Base.raise_in_transactional_callbacks = true
26
- end
27
-
28
- database_configuration = ENV["CI"] ? "test/support/ci_database.yml" : "test/support/database.yml"
29
-
30
- ActiveRecord::Base.configurations = YAML.safe_load(IO.read(database_configuration))
31
- ActiveRecord::Base.establish_connection(ENV["DB"].to_sym)
32
- ActiveRecord::Schema.verbose = false
33
-
34
- def teardown_db
35
- if ActiveRecord::VERSION::MAJOR >= 5
36
- tables = ActiveRecord::Base.connection.data_sources
37
- else
38
- tables = ActiveRecord::Base.connection.tables
39
- end
40
-
41
- tables.each do |table|
42
- ActiveRecord::Base.connection.drop_table(table)
43
- end
44
- end
45
-
46
- require "shared"
47
-
48
- # require 'logger'
49
- # ActiveRecord::Base.logger = Logger.new(STDOUT)
50
-
51
- def assert_equal_or_nil(a, b)
52
- if a.nil?
53
- assert_nil b
54
- else
55
- assert_equal a, b
56
- end
57
- end
58
-
59
- def assert_no_deprecation_warning_raised_by(failure_message = 'ActiveRecord deprecation warning raised when we didn\'t expect it', pass_message = 'No ActiveRecord deprecation raised')
60
- original_behavior = active_record_deprecator.behavior
61
- active_record_deprecator.behavior = :raise
62
- begin
63
- yield
64
- rescue ActiveSupport::DeprecationException => e
65
- flunk "#{failure_message}: #{e}"
66
- rescue
67
- raise
68
- else
69
- pass pass_message
70
- end
71
- ensure
72
- active_record_deprecator.behavior = original_behavior
73
- end
74
-
75
- def active_record_deprecator
76
- if ActiveRecord::VERSION::MAJOR == 7 && ActiveRecord::VERSION::MINOR >= 1 || ActiveRecord::VERSION::MAJOR > 7
77
- ActiveRecord.deprecator
78
- else
79
- ActiveSupport::Deprecation
80
- end
81
- end
data/test/shared.rb DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Common shared behaviour.
4
- module Shared
5
- autoload :List, 'shared_list'
6
- autoload :ListSub, 'shared_list_sub'
7
- autoload :ZeroBased, 'shared_zero_based'
8
- autoload :ArrayScopeList, 'shared_array_scope_list'
9
- autoload :TopAddition, 'shared_top_addition'
10
- autoload :NoAddition, 'shared_no_addition'
11
- autoload :Quoting, 'shared_quoting'
12
- end
@@ -1,177 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Shared
4
- module ArrayScopeList
5
- def setup
6
- (1..4).each { |counter| ArrayScopeListMixin.create! pos: counter, parent_id: 5, parent_type: 'ParentClass' }
7
- (1..4).each { |counter| ArrayScopeListMixin.create! pos: counter, parent_id: 6, parent_type: 'ParentClass' }
8
- end
9
-
10
- def test_reordering
11
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
12
-
13
- ArrayScopeListMixin.where(id: 2).first.move_lower
14
- assert_equal [1, 3, 2, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
15
-
16
- ArrayScopeListMixin.where(id: 2).first.move_higher
17
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
18
-
19
- ArrayScopeListMixin.where(id: 1).first.move_to_bottom
20
- assert_equal [2, 3, 4, 1], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
21
-
22
- ArrayScopeListMixin.where(id: 1).first.move_to_top
23
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
24
-
25
- ArrayScopeListMixin.where(id: 2).first.move_to_bottom
26
- assert_equal [1, 3, 4, 2], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
27
-
28
- ArrayScopeListMixin.where(id: 4).first.move_to_top
29
- assert_equal [4, 1, 3, 2], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
30
-
31
- ArrayScopeListMixin.where(id: 4).first.insert_at(4)
32
- assert_equal [1, 3, 2, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
33
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:pos)
34
- end
35
-
36
- def test_move_to_bottom_with_next_to_last_item
37
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
38
- ArrayScopeListMixin.where(id: 3).first.move_to_bottom
39
- assert_equal [1, 2, 4, 3], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
40
- end
41
-
42
- def test_next_prev
43
- assert_equal ArrayScopeListMixin.where(id: 2).first, ArrayScopeListMixin.where(id: 1).first.lower_item
44
- assert_nil ArrayScopeListMixin.where(id: 1).first.higher_item
45
- assert_equal ArrayScopeListMixin.where(id: 3).first, ArrayScopeListMixin.where(id: 4).first.higher_item
46
- assert_nil ArrayScopeListMixin.where(id: 4).first.lower_item
47
- end
48
-
49
- def test_injection
50
- item = ArrayScopeListMixin.new(parent_id: 1, parent_type: 'ParentClass')
51
- assert_equal "pos", item.position_column
52
- end
53
-
54
- def test_insert
55
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
56
- assert_equal 1, new.pos
57
- assert new.first?
58
- assert new.last?
59
-
60
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
61
- assert_equal 2, new.pos
62
- assert !new.first?
63
- assert new.last?
64
-
65
- new = ArrayScopeListMixin.acts_as_list_no_update { ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass') }
66
- assert_equal_or_nil $default_position,new.pos
67
- assert_equal $default_position.is_a?(Integer), new.first?
68
- assert !new.last?
69
-
70
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
71
- assert_equal 3, new.pos
72
- assert !new.first?
73
- assert new.last?
74
-
75
- new = ArrayScopeListMixin.create(parent_id: 0, parent_type: 'ParentClass')
76
- assert_equal 1, new.pos
77
- assert new.first?
78
- assert new.last?
79
- end
80
-
81
- def test_insert_at
82
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
83
- assert_equal 1, new.pos
84
-
85
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
86
- assert_equal 2, new.pos
87
-
88
- new = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
89
- assert_equal 3, new.pos
90
-
91
- new_noup = ArrayScopeListMixin.acts_as_list_no_update { ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass') }
92
- assert_equal_or_nil $default_position,new_noup.pos
93
-
94
- new4 = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
95
- assert_equal 4, new4.pos
96
-
97
- new4.insert_at(3)
98
- assert_equal 3, new4.pos
99
-
100
- new.reload
101
- assert_equal 4, new.pos
102
-
103
- new.insert_at(2)
104
- assert_equal 2, new.pos
105
-
106
- new4.reload
107
- assert_equal 4, new4.pos
108
-
109
- new5 = ArrayScopeListMixin.create(parent_id: 20, parent_type: 'ParentClass')
110
- assert_equal 5, new5.pos
111
-
112
- new5.insert_at(1)
113
- assert_equal 1, new5.pos
114
-
115
- new4.reload
116
- assert_equal 5, new4.pos
117
-
118
- new_noup.reload
119
- assert_equal_or_nil $default_position, new_noup.pos
120
- end
121
-
122
- def test_delete_middle
123
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
124
-
125
- ArrayScopeListMixin.where(id: 2).first.destroy
126
-
127
- assert_equal [1, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
128
-
129
- assert_equal 1, ArrayScopeListMixin.where(id: 1).first.pos
130
- assert_equal 2, ArrayScopeListMixin.where(id: 3).first.pos
131
- assert_equal 3, ArrayScopeListMixin.where(id: 4).first.pos
132
-
133
- ArrayScopeListMixin.where(id: 1).first.destroy
134
-
135
- assert_equal [3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
136
-
137
- assert_equal 1, ArrayScopeListMixin.where(id: 3).first.pos
138
- assert_equal 2, ArrayScopeListMixin.where(id: 4).first.pos
139
-
140
- ArrayScopeListMixin.acts_as_list_no_update { ArrayScopeListMixin.where(id: 3).first.destroy }
141
-
142
- assert_equal [4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
143
-
144
- assert_equal 2, ArrayScopeListMixin.where(id: 4).first.pos
145
- end
146
-
147
- def test_remove_from_list_should_then_fail_in_list?
148
- assert_equal true, ArrayScopeListMixin.where(id: 1).first.in_list?
149
- ArrayScopeListMixin.where(id: 1).first.remove_from_list
150
- assert_equal false, ArrayScopeListMixin.where(id: 1).first.in_list?
151
- end
152
-
153
- def test_remove_from_list_should_set_position_to_nil
154
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
155
-
156
- ArrayScopeListMixin.where(id: 2).first.remove_from_list
157
-
158
- assert_equal 1, ArrayScopeListMixin.where(id: 1).first.pos
159
- assert_nil ArrayScopeListMixin.where(id: 2).first.pos
160
- assert_equal 2, ArrayScopeListMixin.where(id: 3).first.pos
161
- assert_equal 3, ArrayScopeListMixin.where(id: 4).first.pos
162
- end
163
-
164
- def test_remove_before_destroy_does_not_shift_lower_items_twice
165
- assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
166
-
167
- ArrayScopeListMixin.where(id: 2).first.remove_from_list
168
- ArrayScopeListMixin.where(id: 2).first.destroy
169
-
170
- assert_equal [1, 3, 4], ArrayScopeListMixin.where(parent_id: 5, parent_type: 'ParentClass').order('pos').map(&:id)
171
-
172
- assert_equal 1, ArrayScopeListMixin.where(id: 1).first.pos
173
- assert_equal 2, ArrayScopeListMixin.where(id: 3).first.pos
174
- assert_equal 3, ArrayScopeListMixin.where(id: 4).first.pos
175
- end
176
- end
177
- end