mongoid-tree 1.1.0 → 2.0.0
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/Gemfile +6 -1
- data/README.md +7 -6
- data/lib/mongoid/tree.rb +1 -1
- data/lib/mongoid/tree/ordering.rb +11 -11
- data/spec/mongoid/tree/traversal_spec.rb +1 -1
- data/spec/mongoid/tree_spec.rb +5 -8
- data/spec/support/macros/tree_macros.rb +8 -7
- data/spec/support/models/node.rb +0 -4
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b077e8bfb9c59a23025951349cc64293d496ff2b
|
4
|
+
data.tar.gz: a16ee9fa51743425d25de01fb489ac1f193752b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b53ef6fb2bd5055dc441d43af840617806e48550328266d033b124f5d978c4e118627d3a1d95815d8e014c2eab6cd29f11936d6a605a292757163c931b85cacf
|
7
|
+
data.tar.gz: db8180d46265765c981e249ffd904f5d2d8b4414effda1e37402e3066512339ea9e820ed52ed6d58609bf5992163fc9a87372eb632aa1560ff1f1e5cce06109c
|
data/Gemfile
CHANGED
@@ -4,4 +4,9 @@ gemspec
|
|
4
4
|
|
5
5
|
gem 'guard-rspec', '>= 0.6.0'
|
6
6
|
gem 'ruby_gntp', '>= 0.3.4'
|
7
|
-
gem 'rb-fsevent' if RUBY_PLATFORM =~ /darwin/
|
7
|
+
gem 'rb-fsevent' if RUBY_PLATFORM =~ /darwin/
|
8
|
+
gem 'mongoid', :github => 'mongoid/mongoid'
|
9
|
+
|
10
|
+
platforms :rbx do
|
11
|
+
gem 'rubysl-rake', '~> 2.0'
|
12
|
+
end
|
data/README.md
CHANGED
@@ -4,9 +4,10 @@ A tree structure for Mongoid documents using the materialized path pattern
|
|
4
4
|
|
5
5
|
## Requirements
|
6
6
|
|
7
|
-
* mongoid (~>
|
7
|
+
* mongoid (~> 4.0)
|
8
8
|
|
9
|
-
For a mongoid
|
9
|
+
For a mongoid 3.x compatible version, please use mongoid-tree 1.0.x,
|
10
|
+
for a mongoid 2.x compatible version, please use mongoid-tree 0.7.x.
|
10
11
|
|
11
12
|
|
12
13
|
## Install
|
@@ -17,15 +18,15 @@ To install mongoid_tree, simply add it to your Gemfile:
|
|
17
18
|
|
18
19
|
In order to get the latest development version of mongoid-tree:
|
19
20
|
|
20
|
-
gem 'mongoid-tree', :git => 'git://github.com/benedikt/mongoid-tree'
|
21
|
+
gem 'mongoid-tree', :git => 'git://github.com/benedikt/mongoid-tree'
|
21
22
|
|
22
|
-
You might want to
|
23
|
+
You might want to add `:require => nil` option and explicitly `require 'mongoid/tree'` where needed and finally run
|
23
24
|
|
24
25
|
bundle install
|
25
26
|
|
26
|
-
### Upgrade from mongoid-tree 1.
|
27
|
+
### Upgrade from mongoid-tree 1.x
|
27
28
|
|
28
|
-
To fix issues with the ordering of ancestors, mongoid-tree
|
29
|
+
To fix issues with the ordering of ancestors, mongoid-tree 2.0 introduces a new `depth` field to the documents that include the `Mongoid::Tree` module. In case your project uses its own `depth` field, you can now rely on mongoid-tree to handle this.
|
29
30
|
|
30
31
|
## Usage
|
31
32
|
|
data/lib/mongoid/tree.rb
CHANGED
@@ -277,7 +277,7 @@ module Mongoid
|
|
277
277
|
#
|
278
278
|
# @return [Mongoid::Criteria] Mongoid criteria to retrieve the documents ancestors
|
279
279
|
def ancestors
|
280
|
-
base_class.where(:_id.in => parent_ids).
|
280
|
+
base_class.where(:_id.in => parent_ids).order(:depth => :asc)
|
281
281
|
end
|
282
282
|
|
283
283
|
##
|
@@ -35,7 +35,7 @@ module Mongoid
|
|
35
35
|
included do
|
36
36
|
field :position, :type => Integer
|
37
37
|
|
38
|
-
default_scope asc(:position)
|
38
|
+
default_scope ->{ asc(:position) }
|
39
39
|
|
40
40
|
before_save :assign_default_position, :if => :assign_default_position?
|
41
41
|
before_save :reposition_former_siblings, :if => :sibling_reposition_required?
|
@@ -157,11 +157,11 @@ module Mongoid
|
|
157
157
|
|
158
158
|
if position > other.position
|
159
159
|
new_position = other.position
|
160
|
-
self.siblings_between(other).inc(:position
|
161
|
-
other.inc(:position
|
160
|
+
self.siblings_between(other).inc(:position => 1)
|
161
|
+
other.inc(:position => 1)
|
162
162
|
else
|
163
163
|
new_position = other.position - 1
|
164
|
-
self.siblings_between(other).inc(:position
|
164
|
+
self.siblings_between(other).inc(:position => -1)
|
165
165
|
end
|
166
166
|
|
167
167
|
self.position = new_position
|
@@ -181,11 +181,11 @@ module Mongoid
|
|
181
181
|
|
182
182
|
if position > other.position
|
183
183
|
new_position = other.position + 1
|
184
|
-
self.siblings_between(other).inc(:position
|
184
|
+
self.siblings_between(other).inc(:position => 1)
|
185
185
|
else
|
186
186
|
new_position = other.position
|
187
|
-
self.siblings_between(other).inc(:position
|
188
|
-
other.inc(:position
|
187
|
+
self.siblings_between(other).inc(:position => -1)
|
188
|
+
other.inc(:position => -1)
|
189
189
|
end
|
190
190
|
|
191
191
|
self.position = new_position
|
@@ -195,8 +195,8 @@ module Mongoid
|
|
195
195
|
private
|
196
196
|
|
197
197
|
def switch_with_sibling_at_offset(offset)
|
198
|
-
siblings.where(:position => self.position + offset).first.inc(:position
|
199
|
-
inc(:position
|
198
|
+
siblings.where(:position => self.position + offset).first.inc(:position => -offset)
|
199
|
+
inc(:position => offset)
|
200
200
|
end
|
201
201
|
|
202
202
|
def ensure_to_be_sibling_of(other)
|
@@ -206,14 +206,14 @@ module Mongoid
|
|
206
206
|
end
|
207
207
|
|
208
208
|
def move_lower_siblings_up
|
209
|
-
lower_siblings.inc(:position
|
209
|
+
lower_siblings.inc(:position => -1)
|
210
210
|
end
|
211
211
|
|
212
212
|
def reposition_former_siblings
|
213
213
|
former_siblings = base_class.where(:parent_id => attribute_was('parent_id')).
|
214
214
|
and(:position.gt => (attribute_was('position') || 0)).
|
215
215
|
excludes(:id => self.id)
|
216
|
-
former_siblings.inc(:position
|
216
|
+
former_siblings.inc(:position => -1)
|
217
217
|
end
|
218
218
|
|
219
219
|
def sibling_reposition_required?
|
data/spec/mongoid/tree_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe Mongoid::Tree do
|
|
10
10
|
expect(a.macro).to eq(:has_many)
|
11
11
|
expect(a.class_name).to eq('Node')
|
12
12
|
expect(a.foreign_key).to eq('parent_id')
|
13
|
-
expect(Node.
|
13
|
+
expect(Node.index_specification(:parent_id => 1)).to be
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should be referenced in one parent as inverse of children" do
|
@@ -26,14 +26,14 @@ describe Mongoid::Tree do
|
|
26
26
|
expect(f).to be
|
27
27
|
expect(f.options[:type]).to eq(Array)
|
28
28
|
expect(f.options[:default]).to eq([])
|
29
|
-
expect(Node.
|
29
|
+
expect(Node.index_specification(:parent_ids => 1)).to be
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should store the depth as Integer with index" do
|
33
33
|
f = Node.fields['depth']
|
34
34
|
expect(f).to be
|
35
35
|
expect(f.options[:type]).to eq(Integer)
|
36
|
-
expect(Node.
|
36
|
+
expect(Node.index_specification(:depth => 1)).to be
|
37
37
|
end
|
38
38
|
|
39
39
|
describe 'when new' do
|
@@ -263,11 +263,8 @@ describe Mongoid::Tree do
|
|
263
263
|
end
|
264
264
|
|
265
265
|
it "should be updated when the nodes ancestors change" do
|
266
|
-
node(:child).update_attributes
|
267
|
-
|
268
|
-
puts node(:child).inspect
|
269
|
-
|
270
|
-
expect(node(:child).reload.depth).to eq(0)
|
266
|
+
node(:child).update_attributes(:parent => nil)
|
267
|
+
expect(node(:child).depth).to eq(0)
|
271
268
|
expect(node(:subchild).depth).to eq(1)
|
272
269
|
end
|
273
270
|
end
|
@@ -21,15 +21,16 @@ module Mongoid::Tree::TreeMacros
|
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
|
+
|
24
25
|
def create_tree(object)
|
25
26
|
case object
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
when String then return create_node(object)
|
28
|
+
when Array then object.each { |tree| create_tree(tree) }
|
29
|
+
when Hash then
|
30
|
+
name, children = object.first
|
31
|
+
node = create_node(name)
|
32
|
+
children.each { |c| node.children << create_tree(c) }
|
33
|
+
return node
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
data/spec/support/models/node.rb
CHANGED
@@ -4,8 +4,6 @@ class Node
|
|
4
4
|
include Mongoid::Tree::Traversal
|
5
5
|
|
6
6
|
field :name
|
7
|
-
|
8
|
-
attr_accessible :name, :parent
|
9
7
|
end
|
10
8
|
|
11
9
|
class SubclassedNode < Node
|
@@ -23,8 +21,6 @@ class OrderedNode
|
|
23
21
|
include Mongoid::Tree::Ordering
|
24
22
|
|
25
23
|
field :name
|
26
|
-
|
27
|
-
attr_accessible :name
|
28
24
|
end
|
29
25
|
|
30
26
|
class NodeWithEmbeddedDocument < Node
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benedikt Deicke
|
@@ -14,22 +14,22 @@ dependencies:
|
|
14
14
|
name: mongoid
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - <=
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
- - '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '4.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - <=
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '5.0'
|
30
30
|
- - '>='
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '4.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '3.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - ~>
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '3.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: yard
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|