mongoid-tree 0.6.2 → 0.7.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.
- data/Gemfile +1 -1
- data/Rakefile +1 -2
- data/lib/mongoid/tree/traversal.rb +9 -4
- data/spec/mongoid/tree/traversal_spec.rb +16 -28
- data/spec/mongoid/tree_spec.rb +1 -1
- metadata +17 -17
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -76,9 +76,9 @@ module Mongoid # :nodoc:
|
|
76
76
|
# They're extended into the base class automatically.
|
77
77
|
module ClassMethods # :nodoc:
|
78
78
|
def traverse(type = :depth_first, &block)
|
79
|
-
|
80
|
-
roots.each { |root| root.traverse(type, &block) }
|
81
|
-
|
79
|
+
res = []
|
80
|
+
roots.each { |root| res.concat root.traverse(type, &block) }
|
81
|
+
res
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
@@ -94,9 +94,14 @@ module Mongoid # :nodoc:
|
|
94
94
|
# root.traverse(:depth_first) do |node|
|
95
95
|
# results << node
|
96
96
|
# end
|
97
|
+
#
|
98
|
+
# root.traverse(:depth_first).map(&:name)
|
99
|
+
#
|
97
100
|
def traverse(type = :depth_first, &block)
|
98
|
-
|
101
|
+
res = []
|
102
|
+
block ||= lambda { |node| res << node }
|
99
103
|
send("#{type}_traversal", &block)
|
104
|
+
res
|
100
105
|
end
|
101
106
|
|
102
107
|
private
|
@@ -8,10 +8,6 @@ describe Mongoid::Tree::Traversal do
|
|
8
8
|
|
9
9
|
subject { Node.new }
|
10
10
|
|
11
|
-
it "should require a block" do
|
12
|
-
expect { subject.traverse }.to raise_error(/No block given/)
|
13
|
-
end
|
14
|
-
|
15
11
|
[:depth_first, :breadth_first].each do |method|
|
16
12
|
it "should support #{method} traversal" do
|
17
13
|
expect { subject.traverse(method) {} }.to_not raise_error
|
@@ -86,12 +82,17 @@ describe Mongoid::Tree::Traversal do
|
|
86
82
|
node(:node5).move_above(node(:node6))
|
87
83
|
end
|
88
84
|
|
89
|
-
it 'should
|
85
|
+
it 'should iterate through the nodes in the correct order' do
|
90
86
|
result = []
|
91
87
|
node(:node1).traverse(:depth_first) { |node| result << node }
|
92
88
|
result.collect { |n| n.name.to_sym }.should == [:node1, :node2, :node3, :node4, :node5, :node6, :node7]
|
93
89
|
end
|
94
90
|
|
91
|
+
it 'should return the nodes in the correct order' do
|
92
|
+
result = node(:node1).traverse(:depth_first)
|
93
|
+
result.collect { |n| n.name.to_sym }.should == [:node1, :node2, :node3, :node4, :node5, :node6, :node7]
|
94
|
+
end
|
95
|
+
|
95
96
|
end
|
96
97
|
|
97
98
|
end
|
@@ -117,21 +118,12 @@ describe Mongoid::Tree::Traversal do
|
|
117
118
|
end
|
118
119
|
|
119
120
|
describe '.traverse' do
|
120
|
-
|
121
|
-
describe 'when not given a block' do
|
122
|
-
|
123
|
-
it 'raises an error' do
|
124
|
-
expect {Node.traverse}.to raise_error ArgumentError, 'No block given'
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
121
|
before :each do
|
129
122
|
setup_tree <<-ENDTREE
|
130
123
|
- root1
|
131
124
|
- root2
|
132
125
|
ENDTREE
|
133
126
|
|
134
|
-
@block = Proc.new {}
|
135
127
|
@root1 = node(:root1)
|
136
128
|
@root2 = node(:root2)
|
137
129
|
|
@@ -141,35 +133,31 @@ describe Mongoid::Tree::Traversal do
|
|
141
133
|
it 'grabs each root' do
|
142
134
|
Node.should_receive(:roots).and_return []
|
143
135
|
|
144
|
-
Node.traverse
|
136
|
+
Node.traverse.should == []
|
145
137
|
end
|
146
138
|
|
147
139
|
it 'defaults the "type" arg to :depth_first' do
|
148
|
-
@root1.should_receive(:traverse).with(:depth_first)
|
149
|
-
@root2.should_receive(:traverse).with(:depth_first)
|
140
|
+
@root1.should_receive(:traverse).with(:depth_first).and_return([])
|
141
|
+
@root2.should_receive(:traverse).with(:depth_first).and_return([])
|
150
142
|
|
151
|
-
Node.traverse
|
143
|
+
Node.traverse.should == []
|
152
144
|
end
|
153
145
|
|
154
146
|
it 'traverses each root' do
|
155
|
-
@root1.should_receive(:traverse)
|
156
|
-
@root2.should_receive(:traverse)
|
147
|
+
@root1.should_receive(:traverse).and_return([1, 2])
|
148
|
+
@root2.should_receive(:traverse).and_return([3, 4])
|
157
149
|
|
158
|
-
Node.traverse
|
150
|
+
Node.traverse.should == [1, 2, 3, 4]
|
159
151
|
end
|
160
152
|
|
161
153
|
describe 'when the "type" arg is :breadth_first' do
|
162
154
|
|
163
155
|
it 'traverses breadth-first' do
|
164
|
-
@root1.should_receive(:traverse).with(:breadth_first)
|
165
|
-
@root2.should_receive(:traverse).with(:breadth_first)
|
156
|
+
@root1.should_receive(:traverse).with(:breadth_first).and_return([])
|
157
|
+
@root2.should_receive(:traverse).with(:breadth_first).and_return([])
|
166
158
|
|
167
|
-
Node.traverse :breadth_first
|
159
|
+
Node.traverse :breadth_first
|
168
160
|
end
|
169
161
|
end
|
170
|
-
|
171
|
-
it 'returns nil' do
|
172
|
-
Node.traverse(&@block).should be nil
|
173
|
-
end
|
174
162
|
end
|
175
163
|
end
|
data/spec/mongoid/tree_spec.rb
CHANGED
@@ -45,7 +45,7 @@ describe Mongoid::Tree do
|
|
45
45
|
it "should save its unsaved children" do
|
46
46
|
root = Node.new(:name => 'root'); child = Node.new(:name => 'child')
|
47
47
|
root.children << child
|
48
|
-
child.should_receive(:save)
|
48
|
+
child.should_receive(:save).at_most(2).times
|
49
49
|
root.save
|
50
50
|
end
|
51
51
|
end
|
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: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &70188241262500 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '2.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70188241262500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70188241262000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.8.7
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70188241262000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70188241261520 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,29 +43,29 @@ dependencies:
|
|
43
43
|
version: '2.3'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70188241261520
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
48
|
+
name: rdoc
|
49
|
+
requirement: &70188241261040 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 4
|
54
|
+
version: '2.4'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70188241261040
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement: &
|
59
|
+
name: autotest
|
60
|
+
requirement: &70188241260560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
65
|
+
version: 4.3.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70188241260560
|
69
69
|
description: A tree structure for Mongoid documents using the materialized path pattern
|
70
70
|
email:
|
71
71
|
- benedikt@synatic.net
|