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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +77 -17
- data/LICENSE.txt +20 -0
- data/README.md +256 -127
- data/Rakefile +24 -6
- data/lib/config/locales/en.yml +12 -9
- data/lib/mongoid/orderable.rb +29 -22
- data/lib/mongoid/orderable/configs/field_config.rb +79 -0
- data/lib/mongoid/orderable/configs/global_config.rb +26 -0
- data/lib/mongoid/orderable/engine.rb +206 -0
- data/lib/mongoid/orderable/errors/invalid_target_position.rb +19 -18
- data/lib/mongoid/orderable/errors/transaction_failed.rb +20 -0
- data/lib/mongoid/orderable/generators/base.rb +21 -0
- data/lib/mongoid/orderable/generators/helpers.rb +29 -0
- data/lib/mongoid/orderable/generators/listable.rb +41 -0
- data/lib/mongoid/orderable/generators/lock_collection.rb +37 -0
- data/lib/mongoid/orderable/generators/movable.rb +62 -0
- data/lib/mongoid/orderable/generators/position.rb +26 -0
- data/lib/mongoid/orderable/generators/scope.rb +26 -0
- data/lib/mongoid/orderable/installer.rb +63 -0
- data/lib/mongoid/orderable/mixins/callbacks.rb +29 -0
- data/lib/mongoid/orderable/mixins/helpers.rb +39 -0
- data/lib/mongoid/orderable/mixins/listable.rb +49 -0
- data/lib/mongoid/orderable/mixins/movable.rb +60 -0
- data/lib/mongoid/orderable/version.rb +7 -0
- data/lib/mongoid_orderable.rb +29 -56
- data/spec/mongoid/orderable_spec.rb +1486 -1408
- data/spec/spec_helper.rb +21 -37
- metadata +62 -42
- data/.gitignore +0 -4
- data/.rspec +0 -1
- data/.rvmrc +0 -1
- data/.travis.yml +0 -20
- data/Gemfile +0 -15
- data/lib/mongoid/orderable/callbacks.rb +0 -75
- data/lib/mongoid/orderable/configuration.rb +0 -60
- data/lib/mongoid/orderable/errors.rb +0 -2
- data/lib/mongoid/orderable/errors/mongoid_orderable_error.rb +0 -14
- data/lib/mongoid/orderable/generator.rb +0 -34
- data/lib/mongoid/orderable/generator/helpers.rb +0 -29
- data/lib/mongoid/orderable/generator/listable.rb +0 -41
- data/lib/mongoid/orderable/generator/movable.rb +0 -62
- data/lib/mongoid/orderable/generator/position.rb +0 -26
- data/lib/mongoid/orderable/generator/scope.rb +0 -17
- data/lib/mongoid/orderable/helpers.rb +0 -50
- data/lib/mongoid/orderable/listable.rb +0 -49
- data/lib/mongoid/orderable/movable.rb +0 -58
- data/lib/mongoid/orderable/orderable_class.rb +0 -51
- data/lib/mongoid_orderable/mongoid/contexts/enumerable.rb +0 -15
- data/lib/mongoid_orderable/mongoid/contexts/mongo.rb +0 -18
- data/lib/mongoid_orderable/mongoid/contextual/memory.rb +0 -15
- data/lib/mongoid_orderable/mongoid/criteria.rb +0 -4
- data/lib/mongoid_orderable/version.rb +0 -3
- data/mongoid_orderable.gemspec +0 -25
data/spec/spec_helper.rb
CHANGED
@@ -1,37 +1,21 @@
|
|
1
|
-
require 'bundler'
|
2
|
-
Bundler.require
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
+
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:
|
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:
|
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:
|
55
|
-
description:
|
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
|
-
-
|
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/
|
73
|
-
- lib/mongoid/orderable/
|
74
|
-
- lib/mongoid/orderable/
|
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/
|
77
|
-
- lib/mongoid/orderable/
|
78
|
-
- lib/mongoid/orderable/
|
79
|
-
- lib/mongoid/orderable/
|
80
|
-
- lib/mongoid/orderable/
|
81
|
-
- lib/mongoid/orderable/
|
82
|
-
- lib/mongoid/orderable/
|
83
|
-
- lib/mongoid/orderable/
|
84
|
-
- lib/mongoid/orderable/
|
85
|
-
- lib/mongoid/orderable/
|
86
|
-
- lib/mongoid/orderable/
|
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
|
-
|
115
|
-
rubygems_version: 2.2.2
|
135
|
+
rubygems_version: 3.1.2
|
116
136
|
signing_key:
|
117
137
|
specification_version: 4
|
118
|
-
summary:
|
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
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--colour
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use 2.0.0@mongoid_orderable --create
|
data/.travis.yml
DELETED
@@ -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,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
|