mongoid_orderable 6.0.4 → 6.0.6

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +101 -93
  3. data/LICENSE.txt +20 -20
  4. data/README.md +280 -275
  5. data/Rakefile +24 -24
  6. data/lib/config/locales/en.yml +12 -12
  7. data/lib/mongoid/orderable/configs/field_config.rb +81 -81
  8. data/lib/mongoid/orderable/configs/global_config.rb +26 -26
  9. data/lib/mongoid/orderable/errors/invalid_target_position.rb +19 -19
  10. data/lib/mongoid/orderable/errors/transaction_failed.rb +20 -20
  11. data/lib/mongoid/orderable/generators/base.rb +21 -21
  12. data/lib/mongoid/orderable/generators/helpers.rb +37 -37
  13. data/lib/mongoid/orderable/generators/listable.rb +41 -41
  14. data/lib/mongoid/orderable/generators/lock_collection.rb +39 -39
  15. data/lib/mongoid/orderable/generators/movable.rb +62 -62
  16. data/lib/mongoid/orderable/generators/position.rb +26 -26
  17. data/lib/mongoid/orderable/generators/scope.rb +26 -26
  18. data/lib/mongoid/orderable/handlers/base.rb +215 -189
  19. data/lib/mongoid/orderable/handlers/document.rb +32 -24
  20. data/lib/mongoid/orderable/handlers/document_embedded.rb +14 -14
  21. data/lib/mongoid/orderable/handlers/document_transactional.rb +32 -35
  22. data/lib/mongoid/orderable/handlers/transaction.rb +75 -71
  23. data/lib/mongoid/orderable/installer.rb +64 -64
  24. data/lib/mongoid/orderable/mixins/callbacks.rb +45 -43
  25. data/lib/mongoid/orderable/mixins/cascadeable.rb +15 -15
  26. data/lib/mongoid/orderable/mixins/helpers.rb +39 -39
  27. data/lib/mongoid/orderable/mixins/listable.rb +49 -49
  28. data/lib/mongoid/orderable/mixins/movable.rb +64 -60
  29. data/lib/mongoid/orderable/version.rb +7 -7
  30. data/lib/mongoid/orderable.rb +29 -29
  31. data/lib/mongoid_orderable.rb +34 -34
  32. metadata +6 -93
  33. data/spec/integration/cascadeable_spec.rb +0 -12
  34. data/spec/integration/concurrency_spec.rb +0 -232
  35. data/spec/integration/conditional_spec.rb +0 -36
  36. data/spec/integration/customized_spec.rb +0 -31
  37. data/spec/integration/embedded_spec.rb +0 -63
  38. data/spec/integration/foreign_key_spec.rb +0 -33
  39. data/spec/integration/inherited_spec.rb +0 -54
  40. data/spec/integration/multiple_fields_spec.rb +0 -554
  41. data/spec/integration/multiple_scoped_spec.rb +0 -63
  42. data/spec/integration/no_indexed_spec.rb +0 -23
  43. data/spec/integration/scoped_spec.rb +0 -151
  44. data/spec/integration/simple_spec.rb +0 -184
  45. data/spec/integration/string_scoped_spec.rb +0 -28
  46. data/spec/integration/zero_based_spec.rb +0 -161
  47. data/spec/spec_helper.rb +0 -42
  48. data/spec/support/models.rb +0 -134
@@ -1,49 +1,49 @@
1
- # frozen_string_literal: true
2
-
3
- module Mongoid
4
- module Orderable
5
- module Mixins
6
- module Listable
7
- def in_list?(field = nil)
8
- persisted? && !orderable_position(field).nil?
9
- end
10
-
11
- # Returns items above the current document.
12
- # Items with a position lower than this document's position.
13
- def previous_items(field = nil)
14
- field ||= default_orderable_field
15
- orderable_scope(field).lt(orderable_field(field) => send(field))
16
- end
17
- alias prev_items previous_items
18
-
19
- # Returns items below the current document.
20
- # Items with a position greater than this document's position.
21
- def next_items(field = nil)
22
- field ||= default_orderable_field
23
- orderable_scope(field).gt(orderable_field(field) => send(field))
24
- end
25
-
26
- # Returns the previous item in the list
27
- def previous_item(field = nil)
28
- field ||= default_orderable_field
29
- orderable_scope(field).where(orderable_field(field) => send(field) - 1).first
30
- end
31
- alias prev_item previous_item
32
-
33
- # Returns the next item in the list
34
- def next_item(field = nil)
35
- field ||= default_orderable_field
36
- orderable_scope(field).where(orderable_field(field) => send(field) + 1).first
37
- end
38
-
39
- def first?(field = nil)
40
- in_list?(field) && orderable_position(field) == orderable_top(field)
41
- end
42
-
43
- def last?(field = nil)
44
- in_list?(field) && orderable_position(field) == orderable_bottom(field)
45
- end
46
- end
47
- end
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Orderable
5
+ module Mixins
6
+ module Listable
7
+ def in_list?(field = nil)
8
+ persisted? && !orderable_position(field).nil?
9
+ end
10
+
11
+ # Returns items above the current document.
12
+ # Items with a position lower than this document's position.
13
+ def previous_items(field = nil)
14
+ field ||= default_orderable_field
15
+ orderable_scope(field).lt(orderable_field(field) => send(field))
16
+ end
17
+ alias prev_items previous_items
18
+
19
+ # Returns items below the current document.
20
+ # Items with a position greater than this document's position.
21
+ def next_items(field = nil)
22
+ field ||= default_orderable_field
23
+ orderable_scope(field).gt(orderable_field(field) => send(field))
24
+ end
25
+
26
+ # Returns the previous item in the list
27
+ def previous_item(field = nil)
28
+ field ||= default_orderable_field
29
+ orderable_scope(field).where(orderable_field(field) => send(field) - 1).first
30
+ end
31
+ alias prev_item previous_item
32
+
33
+ # Returns the next item in the list
34
+ def next_item(field = nil)
35
+ field ||= default_orderable_field
36
+ orderable_scope(field).where(orderable_field(field) => send(field) + 1).first
37
+ end
38
+
39
+ def first?(field = nil)
40
+ in_list?(field) && orderable_position(field) == orderable_top(field)
41
+ end
42
+
43
+ def last?(field = nil)
44
+ in_list?(field) && orderable_position(field) == orderable_bottom(field)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,60 +1,64 @@
1
- # frozen_string_literal: true
2
-
3
- module Mongoid
4
- module Orderable
5
- module Mixins
6
- module Movable
7
- def move_to!(target_position, options = {})
8
- move_field_to target_position, options
9
- save
10
- end
11
- alias insert_at! move_to!
12
-
13
- def move_to(target_position, options = {})
14
- move_field_to target_position, options
15
- end
16
- alias insert_at move_to
17
-
18
- def move_to=(target_position, options = {})
19
- move_field_to target_position, options
20
- end
21
- alias insert_at= move_to=
22
-
23
- %i[top bottom].each do |symbol|
24
- class_eval <<~KLASS, __FILE__, __LINE__ + 1
25
- def move_to_#{symbol}(options = {})
26
- move_to :#{symbol}, options
27
- end
28
-
29
- def move_to_#{symbol}!(options = {})
30
- move_to! :#{symbol}, options
31
- end
32
- KLASS
33
- end
34
-
35
- %i[higher lower].each do |symbol|
36
- class_eval <<~KLASS, __FILE__, __LINE__ + 1
37
- def move_#{symbol}(options = {})
38
- move_to :#{symbol}, options
39
- end
40
-
41
- def move_#{symbol}!(options = {})
42
- move_to! :#{symbol}, options
43
- end
44
- KLASS
45
- end
46
-
47
- protected
48
-
49
- def move_all
50
- @move_all || {}
51
- end
52
-
53
- def move_field_to(position, options)
54
- field = options[:field] || default_orderable_field
55
- @move_all = move_all.merge(field => position)
56
- end
57
- end
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Orderable
5
+ module Mixins
6
+ module Movable
7
+ def move_to!(target_position, options = {})
8
+ move_field_to target_position, options
9
+ save
10
+ end
11
+ alias insert_at! move_to!
12
+
13
+ def move_to(target_position, options = {})
14
+ move_field_to target_position, options
15
+ end
16
+ alias insert_at move_to
17
+
18
+ def move_to=(target_position, options = {})
19
+ move_field_to target_position, options
20
+ end
21
+ alias insert_at= move_to=
22
+
23
+ %i[top bottom].each do |symbol|
24
+ class_eval <<~KLASS, __FILE__, __LINE__ + 1
25
+ def move_to_#{symbol}(options = {})
26
+ move_to :#{symbol}, options
27
+ end
28
+
29
+ def move_to_#{symbol}!(options = {})
30
+ move_to! :#{symbol}, options
31
+ end
32
+ KLASS
33
+ end
34
+
35
+ %i[higher lower].each do |symbol|
36
+ class_eval <<~KLASS, __FILE__, __LINE__ + 1
37
+ def move_#{symbol}(options = {})
38
+ move_to :#{symbol}, options
39
+ end
40
+
41
+ def move_#{symbol}!(options = {})
42
+ move_to! :#{symbol}, options
43
+ end
44
+ KLASS
45
+ end
46
+
47
+ private
48
+
49
+ def move_all
50
+ @move_all ||= {}
51
+ end
52
+
53
+ def move_field_to(position, options)
54
+ field = options[:field] || default_orderable_field
55
+ move_all[field] = position
56
+ end
57
+
58
+ def clear_move_all!
59
+ @move_all = {}
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,7 +1,7 @@
1
- # frozen_string_literal: true
2
-
3
- module Mongoid
4
- module Orderable
5
- VERSION = '6.0.4'
6
- end
7
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Orderable
5
+ VERSION = '6.0.6'
6
+ end
7
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- module Mongoid
4
- module Orderable
5
- MUTEX = Mutex.new
6
-
7
- class << self
8
- def configure
9
- yield(config) if block_given?
10
- end
11
-
12
- def config
13
- @config || MUTEX.synchronize { @config = ::Mongoid::Orderable::Configs::GlobalConfig.new }
14
- end
15
- end
16
-
17
- extend ActiveSupport::Concern
18
-
19
- included do
20
- class_attribute :orderable_configs
21
- end
22
-
23
- class_methods do
24
- def orderable(options = {})
25
- Mongoid::Orderable::Installer.new(self, options).setup
26
- end
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Orderable
5
+ MUTEX = Mutex.new
6
+
7
+ class << self
8
+ def configure
9
+ yield(config) if block_given?
10
+ end
11
+
12
+ def config
13
+ @config || MUTEX.synchronize { @config = ::Mongoid::Orderable::Configs::GlobalConfig.new }
14
+ end
15
+ end
16
+
17
+ extend ActiveSupport::Concern
18
+
19
+ included do
20
+ class_attribute :orderable_configs
21
+ end
22
+
23
+ class_methods do
24
+ def orderable(options = {})
25
+ Mongoid::Orderable::Installer.new(self, options).setup
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,34 +1,34 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support'
4
-
5
- I18n.enforce_available_locales = false if I18n.respond_to?(:enforce_available_locales)
6
- I18n.load_path << File.join(File.dirname(__FILE__), 'config', 'locales', 'en.yml')
7
-
8
- require 'mongoid'
9
-
10
- require 'mongoid/orderable/version'
11
-
12
- require 'mongoid/orderable'
13
- require 'mongoid/orderable/configs/global_config'
14
- require 'mongoid/orderable/configs/field_config'
15
- require 'mongoid/orderable/errors/invalid_target_position'
16
- require 'mongoid/orderable/errors/transaction_failed'
17
- require 'mongoid/orderable/mixins/helpers'
18
- require 'mongoid/orderable/mixins/callbacks'
19
- require 'mongoid/orderable/mixins/listable'
20
- require 'mongoid/orderable/mixins/movable'
21
- require 'mongoid/orderable/mixins/cascadeable'
22
- require 'mongoid/orderable/generators/base'
23
- require 'mongoid/orderable/generators/listable'
24
- require 'mongoid/orderable/generators/lock_collection'
25
- require 'mongoid/orderable/generators/movable'
26
- require 'mongoid/orderable/generators/position'
27
- require 'mongoid/orderable/generators/scope'
28
- require 'mongoid/orderable/generators/helpers'
29
- require 'mongoid/orderable/handlers/base'
30
- require 'mongoid/orderable/handlers/document'
31
- require 'mongoid/orderable/handlers/document_embedded'
32
- require 'mongoid/orderable/handlers/document_transactional'
33
- require 'mongoid/orderable/handlers/transaction'
34
- require 'mongoid/orderable/installer'
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+ require 'active_support'
5
+
6
+ I18n.enforce_available_locales = false if I18n.respond_to?(:enforce_available_locales)
7
+ I18n.load_path << File.join(File.dirname(__FILE__), 'config', 'locales', 'en.yml')
8
+
9
+ require 'mongoid'
10
+
11
+ require 'mongoid/orderable'
12
+ require 'mongoid/orderable/version'
13
+ require 'mongoid/orderable/configs/global_config'
14
+ require 'mongoid/orderable/configs/field_config'
15
+ require 'mongoid/orderable/errors/invalid_target_position'
16
+ require 'mongoid/orderable/errors/transaction_failed'
17
+ require 'mongoid/orderable/mixins/helpers'
18
+ require 'mongoid/orderable/mixins/callbacks'
19
+ require 'mongoid/orderable/mixins/listable'
20
+ require 'mongoid/orderable/mixins/movable'
21
+ require 'mongoid/orderable/mixins/cascadeable'
22
+ require 'mongoid/orderable/generators/base'
23
+ require 'mongoid/orderable/generators/listable'
24
+ require 'mongoid/orderable/generators/lock_collection'
25
+ require 'mongoid/orderable/generators/movable'
26
+ require 'mongoid/orderable/generators/position'
27
+ require 'mongoid/orderable/generators/scope'
28
+ require 'mongoid/orderable/generators/helpers'
29
+ require 'mongoid/orderable/handlers/base'
30
+ require 'mongoid/orderable/handlers/document'
31
+ require 'mongoid/orderable/handlers/document_embedded'
32
+ require 'mongoid/orderable/handlers/document_transactional'
33
+ require 'mongoid/orderable/handlers/transaction'
34
+ require 'mongoid/orderable/installer'
metadata CHANGED
@@ -1,71 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_orderable
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.4
4
+ version: 6.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyromaniac
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-31 00:00:00.000000000 Z
11
+ date: 2026-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 3.0.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 3.0.0
41
- - !ruby/object:Gem::Dependency
42
- name: rspec-retry
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.8.1
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 1.8.1
69
13
  - !ruby/object:Gem::Dependency
70
14
  name: mongoid
71
15
  requirement: !ruby/object:Gem::Requirement
@@ -117,26 +61,11 @@ files:
117
61
  - lib/mongoid/orderable/mixins/movable.rb
118
62
  - lib/mongoid/orderable/version.rb
119
63
  - lib/mongoid_orderable.rb
120
- - spec/integration/cascadeable_spec.rb
121
- - spec/integration/concurrency_spec.rb
122
- - spec/integration/conditional_spec.rb
123
- - spec/integration/customized_spec.rb
124
- - spec/integration/embedded_spec.rb
125
- - spec/integration/foreign_key_spec.rb
126
- - spec/integration/inherited_spec.rb
127
- - spec/integration/multiple_fields_spec.rb
128
- - spec/integration/multiple_scoped_spec.rb
129
- - spec/integration/no_indexed_spec.rb
130
- - spec/integration/scoped_spec.rb
131
- - spec/integration/simple_spec.rb
132
- - spec/integration/string_scoped_spec.rb
133
- - spec/integration/zero_based_spec.rb
134
- - spec/spec_helper.rb
135
- - spec/support/models.rb
136
64
  homepage: https://github.com/mongoid/mongoid_orderable
137
65
  licenses:
138
66
  - MIT
139
- metadata: {}
67
+ metadata:
68
+ rubygems_mfa_required: 'true'
140
69
  post_install_message:
141
70
  rdoc_options: []
142
71
  require_paths:
@@ -152,24 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
81
  - !ruby/object:Gem::Version
153
82
  version: '0'
154
83
  requirements: []
155
- rubygems_version: 3.4.4
84
+ rubygems_version: 3.5.16
156
85
  signing_key:
157
86
  specification_version: 4
158
87
  summary: Mongoid orderable list implementation
159
- test_files:
160
- - spec/integration/cascadeable_spec.rb
161
- - spec/integration/concurrency_spec.rb
162
- - spec/integration/conditional_spec.rb
163
- - spec/integration/customized_spec.rb
164
- - spec/integration/embedded_spec.rb
165
- - spec/integration/foreign_key_spec.rb
166
- - spec/integration/inherited_spec.rb
167
- - spec/integration/multiple_fields_spec.rb
168
- - spec/integration/multiple_scoped_spec.rb
169
- - spec/integration/no_indexed_spec.rb
170
- - spec/integration/scoped_spec.rb
171
- - spec/integration/simple_spec.rb
172
- - spec/integration/string_scoped_spec.rb
173
- - spec/integration/zero_based_spec.rb
174
- - spec/spec_helper.rb
175
- - spec/support/models.rb
88
+ test_files: []
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::Orderable::Mixins::Cascadeable do
4
-
5
- it do
6
- eo = EmbedsOrderable.create!
7
- orderable = eo.embedded_orderables.create!
8
- expect(orderable.in_callback_state?(:update)).to eq false
9
- orderable.move_to = 2
10
- expect(orderable.in_callback_state?(:update)).to eq true
11
- end
12
- end