mongoid_orderable 4.1.1 → 6.0.1

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 (54) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +77 -17
  3. data/LICENSE.txt +20 -0
  4. data/README.md +256 -127
  5. data/Rakefile +24 -6
  6. data/lib/config/locales/en.yml +12 -9
  7. data/lib/mongoid/orderable.rb +29 -22
  8. data/lib/mongoid/orderable/configs/field_config.rb +79 -0
  9. data/lib/mongoid/orderable/configs/global_config.rb +26 -0
  10. data/lib/mongoid/orderable/engine.rb +206 -0
  11. data/lib/mongoid/orderable/errors/invalid_target_position.rb +19 -18
  12. data/lib/mongoid/orderable/errors/transaction_failed.rb +20 -0
  13. data/lib/mongoid/orderable/generators/base.rb +21 -0
  14. data/lib/mongoid/orderable/generators/helpers.rb +29 -0
  15. data/lib/mongoid/orderable/generators/listable.rb +41 -0
  16. data/lib/mongoid/orderable/generators/lock_collection.rb +37 -0
  17. data/lib/mongoid/orderable/generators/movable.rb +62 -0
  18. data/lib/mongoid/orderable/generators/position.rb +26 -0
  19. data/lib/mongoid/orderable/generators/scope.rb +26 -0
  20. data/lib/mongoid/orderable/installer.rb +63 -0
  21. data/lib/mongoid/orderable/mixins/callbacks.rb +29 -0
  22. data/lib/mongoid/orderable/mixins/helpers.rb +39 -0
  23. data/lib/mongoid/orderable/mixins/listable.rb +49 -0
  24. data/lib/mongoid/orderable/mixins/movable.rb +60 -0
  25. data/lib/mongoid/orderable/version.rb +7 -0
  26. data/lib/mongoid_orderable.rb +29 -56
  27. data/spec/mongoid/orderable_spec.rb +1486 -1408
  28. data/spec/spec_helper.rb +21 -37
  29. metadata +62 -42
  30. data/.gitignore +0 -4
  31. data/.rspec +0 -1
  32. data/.rvmrc +0 -1
  33. data/.travis.yml +0 -20
  34. data/Gemfile +0 -15
  35. data/lib/mongoid/orderable/callbacks.rb +0 -75
  36. data/lib/mongoid/orderable/configuration.rb +0 -60
  37. data/lib/mongoid/orderable/errors.rb +0 -2
  38. data/lib/mongoid/orderable/errors/mongoid_orderable_error.rb +0 -14
  39. data/lib/mongoid/orderable/generator.rb +0 -34
  40. data/lib/mongoid/orderable/generator/helpers.rb +0 -29
  41. data/lib/mongoid/orderable/generator/listable.rb +0 -41
  42. data/lib/mongoid/orderable/generator/movable.rb +0 -62
  43. data/lib/mongoid/orderable/generator/position.rb +0 -26
  44. data/lib/mongoid/orderable/generator/scope.rb +0 -17
  45. data/lib/mongoid/orderable/helpers.rb +0 -50
  46. data/lib/mongoid/orderable/listable.rb +0 -49
  47. data/lib/mongoid/orderable/movable.rb +0 -58
  48. data/lib/mongoid/orderable/orderable_class.rb +0 -51
  49. data/lib/mongoid_orderable/mongoid/contexts/enumerable.rb +0 -15
  50. data/lib/mongoid_orderable/mongoid/contexts/mongo.rb +0 -18
  51. data/lib/mongoid_orderable/mongoid/contextual/memory.rb +0 -15
  52. data/lib/mongoid_orderable/mongoid/criteria.rb +0 -4
  53. data/lib/mongoid_orderable/version.rb +0 -3
  54. data/mongoid_orderable.gemspec +0 -25
@@ -1,37 +1,21 @@
1
- require 'bundler'
2
- Bundler.require
3
-
4
- DATABASE_NAME = "mongoid_#{Process.pid}"
5
-
6
- if MongoidOrderable.mongoid2?
7
- Mongoid.configure do |config|
8
- # database = Mongo::Connection.new.db DATABASE_NAME
9
- # database.add_user "mongoid", "test"
10
- config.master = Mongo::Connection.new.db DATABASE_NAME
11
- config.logger = nil
12
- end
13
- else
14
- Mongoid.configure do |config|
15
- config.connect_to DATABASE_NAME
16
- end
17
- end
18
-
19
- RSpec.configure do |config|
20
- config.mock_with :rspec
21
-
22
- config.before :suite do
23
- #DatabaseCleaner[:mongoid].strategy = :truncation
24
- end
25
-
26
- config.after :each do
27
- #DatabaseCleaner[:mongoid].clean
28
- end
29
-
30
- config.after(:suite) do
31
- if MongoidOrderable.mongoid2?
32
- Mongoid.master.connection.drop_database DATABASE_NAME
33
- else
34
- Mongoid.default_session.drop
35
- end
36
- end
37
- end
1
+ require 'bundler'
2
+ Bundler.require
3
+ require 'rspec'
4
+ require 'rspec/retry'
5
+
6
+ Mongoid.configure do |config|
7
+ config.connect_to 'mongoid_orderable_test'
8
+ end
9
+
10
+ Mongoid.logger.level = Logger::INFO
11
+ Mongo::Logger.logger.level = Logger::INFO
12
+ Mongoid::Config.belongs_to_required_by_default = false
13
+
14
+ RSpec.configure do |config|
15
+ config.before(:each) do
16
+ Mongoid.purge!
17
+ Mongoid.models.each do |model|
18
+ model.create_indexes if model.name =~ /Mongoid::Orderable::Models/
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,99 +1,120 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_orderable
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyromaniac
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-19 00:00:00.000000000 Z
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
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
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
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
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: mongoid
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - '>='
73
+ - - ">="
46
74
  - !ruby/object:Gem::Version
47
- version: '0'
75
+ version: 7.0.0
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - '>='
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: '0'
55
- description: Gem allows mongoid model behave as orderable list
82
+ version: 7.0.0
83
+ description: Enables Mongoid models to track their position in list
56
84
  email:
57
85
  - kinwizard@gmail.com
58
86
  executables: []
59
87
  extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
62
- - .gitignore
63
- - .rspec
64
- - .rvmrc
65
- - .travis.yml
66
90
  - CHANGELOG.md
67
- - Gemfile
91
+ - LICENSE.txt
68
92
  - README.md
69
93
  - Rakefile
70
94
  - lib/config/locales/en.yml
71
95
  - lib/mongoid/orderable.rb
72
- - lib/mongoid/orderable/callbacks.rb
73
- - lib/mongoid/orderable/configuration.rb
74
- - lib/mongoid/orderable/errors.rb
96
+ - lib/mongoid/orderable/configs/field_config.rb
97
+ - lib/mongoid/orderable/configs/global_config.rb
98
+ - lib/mongoid/orderable/engine.rb
75
99
  - lib/mongoid/orderable/errors/invalid_target_position.rb
76
- - lib/mongoid/orderable/errors/mongoid_orderable_error.rb
77
- - lib/mongoid/orderable/generator.rb
78
- - lib/mongoid/orderable/generator/helpers.rb
79
- - lib/mongoid/orderable/generator/listable.rb
80
- - lib/mongoid/orderable/generator/movable.rb
81
- - lib/mongoid/orderable/generator/position.rb
82
- - lib/mongoid/orderable/generator/scope.rb
83
- - lib/mongoid/orderable/helpers.rb
84
- - lib/mongoid/orderable/listable.rb
85
- - lib/mongoid/orderable/movable.rb
86
- - lib/mongoid/orderable/orderable_class.rb
100
+ - lib/mongoid/orderable/errors/transaction_failed.rb
101
+ - lib/mongoid/orderable/generators/base.rb
102
+ - lib/mongoid/orderable/generators/helpers.rb
103
+ - lib/mongoid/orderable/generators/listable.rb
104
+ - lib/mongoid/orderable/generators/lock_collection.rb
105
+ - lib/mongoid/orderable/generators/movable.rb
106
+ - lib/mongoid/orderable/generators/position.rb
107
+ - lib/mongoid/orderable/generators/scope.rb
108
+ - lib/mongoid/orderable/installer.rb
109
+ - lib/mongoid/orderable/mixins/callbacks.rb
110
+ - lib/mongoid/orderable/mixins/helpers.rb
111
+ - lib/mongoid/orderable/mixins/listable.rb
112
+ - lib/mongoid/orderable/mixins/movable.rb
113
+ - lib/mongoid/orderable/version.rb
87
114
  - lib/mongoid_orderable.rb
88
- - lib/mongoid_orderable/mongoid/contexts/enumerable.rb
89
- - lib/mongoid_orderable/mongoid/contexts/mongo.rb
90
- - lib/mongoid_orderable/mongoid/contextual/memory.rb
91
- - lib/mongoid_orderable/mongoid/criteria.rb
92
- - lib/mongoid_orderable/version.rb
93
- - mongoid_orderable.gemspec
94
115
  - spec/mongoid/orderable_spec.rb
95
116
  - spec/spec_helper.rb
96
- homepage: ''
117
+ homepage: https://github.com/mongoid/mongoid_orderable
97
118
  licenses: []
98
119
  metadata: {}
99
120
  post_install_message:
@@ -102,20 +123,19 @@ require_paths:
102
123
  - lib
103
124
  required_ruby_version: !ruby/object:Gem::Requirement
104
125
  requirements:
105
- - - '>='
126
+ - - ">="
106
127
  - !ruby/object:Gem::Version
107
128
  version: '0'
108
129
  required_rubygems_version: !ruby/object:Gem::Requirement
109
130
  requirements:
110
- - - '>='
131
+ - - ">="
111
132
  - !ruby/object:Gem::Version
112
133
  version: '0'
113
134
  requirements: []
114
- rubyforge_project: mongoid_orderable
115
- rubygems_version: 2.2.2
135
+ rubygems_version: 3.1.2
116
136
  signing_key:
117
137
  specification_version: 4
118
- summary: Acts as list mongoid implementation
138
+ summary: Mongoid orderable list implementation
119
139
  test_files:
120
140
  - spec/mongoid/orderable_spec.rb
121
141
  - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --colour
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 2.0.0@mongoid_orderable --create
@@ -1,20 +0,0 @@
1
- rvm:
2
- - 1.8.7
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.1
6
- # - rbx
7
-
8
- env:
9
- - MONGOID_VERSION=2
10
- - MONGOID_VERSION=3
11
- - MONGOID_VERSION=4
12
-
13
- matrix:
14
- exclude:
15
- - rvm: 1.8.7
16
- env: MONGOID_VERSION=3
17
- - rvm: 1.8.7
18
- env: MONGOID_VERSION=4
19
-
20
- services: mongodb
data/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mongoid_orderable.gemspec
4
- gemspec
5
-
6
- case version = ENV['MONGOID_VERSION'] || "~> 3.1"
7
- when /4/
8
- gem "mongoid", :github => 'mongoid/mongoid'
9
- when /3/
10
- gem "mongoid", "~> 3.1"
11
- when /2/
12
- gem "mongoid", "~> 2.8"
13
- else
14
- gem "mongoid", version
15
- end
@@ -1,75 +0,0 @@
1
- module Mongoid
2
- module Orderable
3
- module Callbacks
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
-
8
- protected
9
-
10
- def add_to_list
11
- self.orderable_keys.each do |column|
12
- apply_position column, move_all[column]
13
- end
14
- end
15
-
16
- def remove_from_list
17
- self.orderable_keys.each do |column|
18
- remove_position_from_list column
19
- end
20
- end
21
-
22
- def remove_position_from_list(column)
23
- col, pos = orderable_column(column), orderable_position(column)
24
- MongoidOrderable.inc orderable_scoped(column).where(col.gt => pos), col, -1
25
- end
26
-
27
- def apply_position column, target_position
28
- if persisted? && !embedded? && orderable_scope_changed?(column)
29
- self.class.unscoped.find(_id).remove_position_from_list(column)
30
- self.send("orderable_#{column}_position=", nil)
31
- end
32
-
33
- return if !target_position && in_list?(column)
34
-
35
- target_position = target_position_to_position column, target_position
36
- scope, col, pos = orderable_scoped(column), orderable_column(column), orderable_position(column)
37
-
38
- unless in_list?(column)
39
- MongoidOrderable.inc scope.where(col.gte => target_position), col, 1
40
- else
41
- MongoidOrderable.inc(scope.where(col.gte => target_position, col.lt => pos), col, 1) if target_position < pos
42
- MongoidOrderable.inc(scope.where(col.gt => pos, col.lte => target_position), col, -1) if target_position > pos
43
- end
44
-
45
- self.send("orderable_#{column}_position=", target_position)
46
- end
47
-
48
- def target_position_to_position column, target_position
49
- target_position = :bottom unless target_position
50
-
51
- target_position = case target_position.to_s
52
- when 'top' then orderable_base(column)
53
- when 'bottom' then bottom_orderable_position(column)
54
- when 'higher' then orderable_position(column).pred
55
- when 'lower' then orderable_position(column).next
56
- when /\A\d+\Z/ then target_position.to_i
57
- else raise Mongoid::Orderable::Errors::InvalidTargetPosition.new target_position
58
- end unless target_position.is_a? Numeric
59
-
60
- target_position = orderable_base(column) if target_position < orderable_base(column)
61
- target_position = bottom_orderable_position(column) if target_position > bottom_orderable_position(column)
62
- target_position
63
- end
64
-
65
- end
66
-
67
- module ClassMethods
68
- def add_orderable_callbacks
69
- before_save :add_to_list
70
- after_destroy :remove_from_list
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,60 +0,0 @@
1
- module Mongoid
2
- module Orderable
3
- class Configuration
4
-
5
- CONFIG_OPTIONS = %w(column scope foreign_key inherited base index default).map(&:to_sym)
6
- FIELD_OPTIONS = %w(as).map(&:to_sym)
7
- VALID_OPTIONS = CONFIG_OPTIONS + FIELD_OPTIONS
8
-
9
- attr_reader :orderable_class, :options
10
-
11
- def initialize(parent, options = {})
12
- @orderable_class = parent
13
- set_options(options)
14
- set_field_options
15
- set_orderable_scope
16
- end
17
-
18
- def default_configuration
19
- { :column => :position,
20
- :index => true,
21
- :scope => nil,
22
- :base => 1,
23
- :field_opts => { :type => Integer }}
24
- end
25
-
26
- def self.build(parent, options = {})
27
- new(parent, options).options
28
- end
29
-
30
- protected
31
-
32
- def set_options(options)
33
- @options = default_configuration
34
- return unless options.is_a? Hash
35
- @options.merge! options.symbolize_keys.slice(*VALID_OPTIONS)
36
- end
37
-
38
- def set_field_options
39
- FIELD_OPTIONS.each do |key|
40
- next unless options.has_key? key
41
- @options[:field_opts][key] = options.delete(key)
42
- end
43
- end
44
-
45
- def set_orderable_scope
46
- if options[:scope].is_a?(Symbol) && options[:scope].to_s !~ /_id$/
47
- scope_relation = @orderable_class.relations[options[:scope].to_s]
48
- if scope_relation
49
- @options[:scope] = scope_relation.key.to_sym
50
- else
51
- @options[:scope] = "#{options[:scope]}_id".to_sym
52
- end
53
- elsif options[:scope].is_a?(String)
54
- @options[:scope] = options[:scope].to_sym
55
- end
56
- end
57
-
58
- end
59
- end
60
- end
@@ -1,2 +0,0 @@
1
- require 'mongoid/orderable/errors/mongoid_orderable_error'
2
- require 'mongoid/orderable/errors/invalid_target_position'
@@ -1,14 +0,0 @@
1
- module Mongoid::Orderable
2
- module Errors
3
- class MongoidOrderableError < ::Mongoid::Errors::MongoidError
4
-
5
- if MongoidOrderable.mongoid2?
6
- def translate key, options
7
- [:message, :summary, :resolution].map do |section|
8
- ::I18n.translate "#{BASE_KEY}.#{key}.#{section}", options
9
- end.join ' '
10
- end
11
- end
12
- end
13
- end
14
- end