mongoid_acts_as_tree 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +17 -0
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/mongoid_acts_as_tree.rb +33 -9
- data/mongoid_acts_as_tree.gemspec +3 -2
- data/test/test_tree.rb +22 -0
- metadata +4 -3
data/CHANGELOG
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
*0.1.1 (April 5th, 2010)*
|
2
|
+
|
3
|
+
*Imroved #children.delete()
|
4
|
+
|
5
|
+
*Add #children.clear, #children=, #children.replace
|
6
|
+
|
7
|
+
*Ruby1.8.7p174 compatible
|
8
|
+
|
9
|
+
*Ruby1.9.1p243 compatible
|
10
|
+
|
11
|
+
|
12
|
+
*0.1.0 (April 4th, 2010)*
|
13
|
+
|
14
|
+
*Support for Mongoid instead of mongo-mapper
|
15
|
+
|
16
|
+
*Proxy object #children added with methods: <<, delete
|
17
|
+
|
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/lib/mongoid_acts_as_tree.rb
CHANGED
@@ -108,6 +108,15 @@ module Mongoid
|
|
108
108
|
Children.new self
|
109
109
|
end
|
110
110
|
|
111
|
+
def children=(new_children_list)
|
112
|
+
self.children.clear
|
113
|
+
new_children_list.each do | child |
|
114
|
+
self.children << child
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
alias replace children=
|
119
|
+
|
111
120
|
def descendants
|
112
121
|
return [] if new_record?
|
113
122
|
self.class.where(path_field => self._id).order_by tree_order
|
@@ -145,7 +154,7 @@ module Mongoid
|
|
145
154
|
|
146
155
|
if @_will_move
|
147
156
|
@_will_move = false
|
148
|
-
|
157
|
+
self.children.each do | child |
|
149
158
|
child.fix_position
|
150
159
|
child.save
|
151
160
|
end
|
@@ -160,17 +169,14 @@ module Mongoid
|
|
160
169
|
|
161
170
|
#proxy class
|
162
171
|
class Children < Array
|
172
|
+
#TODO: improve accessors to options to eliminate object[object.parent_id_field]
|
163
173
|
|
164
174
|
def initialize(owner)
|
165
175
|
@parent = owner
|
166
176
|
self.concat find_children_for_owner.to_a
|
167
177
|
end
|
168
178
|
|
169
|
-
|
170
|
-
@parent.class.where(@parent.parent_id_field => @parent.id).
|
171
|
-
order_by @parent.tree_order
|
172
|
-
end
|
173
|
-
|
179
|
+
#Add new child to list of object children
|
174
180
|
def <<(object)
|
175
181
|
if object.descendants.include? @parent
|
176
182
|
object.instance_variable_set :@_cyclic, true
|
@@ -185,20 +191,38 @@ module Mongoid
|
|
185
191
|
super(object)
|
186
192
|
end
|
187
193
|
|
194
|
+
#Deletes object only from children list.
|
195
|
+
#To delete object use <tt>object.destroy</tt>.
|
188
196
|
def delete(object_or_id)
|
189
197
|
object = case object_or_id
|
190
198
|
when String
|
191
|
-
@parent.class.
|
199
|
+
@parent.class.find object_or_id
|
192
200
|
else
|
193
201
|
object_or_id
|
194
202
|
end
|
195
203
|
|
196
|
-
object.
|
197
|
-
object
|
204
|
+
object[object.parent_id_field] = nil
|
205
|
+
object[object.path_field] = []
|
206
|
+
object[object.depth_field] = 0
|
198
207
|
object.save
|
208
|
+
|
199
209
|
super(object)
|
200
210
|
end
|
201
211
|
|
212
|
+
#Clear children list
|
213
|
+
def clear
|
214
|
+
self.each do | child |
|
215
|
+
@parent.children.delete child
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
private
|
220
|
+
|
221
|
+
def find_children_for_owner
|
222
|
+
@parent.class.where(@parent.parent_id_field => @parent.id).
|
223
|
+
order_by @parent.tree_order
|
224
|
+
end
|
225
|
+
|
202
226
|
end
|
203
227
|
|
204
228
|
module Fields
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid_acts_as_tree}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jakob Vidmar, Aliaksandr Rahalevich"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-05}
|
13
13
|
s.description = %q{Port of the old, venerable ActsAsTree with a bit of a twist}
|
14
14
|
s.email = %q{saksmlz@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
|
+
"CHANGELOG",
|
22
23
|
"LICENSE",
|
23
24
|
"README.rdoc",
|
24
25
|
"Rakefile",
|
data/test/test_tree.rb
CHANGED
@@ -27,6 +27,28 @@ class TestMongoidActsAsTree < Test::Unit::TestCase
|
|
27
27
|
assert child.parent == @root_1
|
28
28
|
end
|
29
29
|
|
30
|
+
should "delete child" do
|
31
|
+
@root_1.children.delete @child_1
|
32
|
+
assert_equal(2, @root_1.children.size)
|
33
|
+
@root_1.children.delete @child_2.id
|
34
|
+
assert_equal(@child_3, @root_1.children.first)
|
35
|
+
end
|
36
|
+
|
37
|
+
should "clear children list" do
|
38
|
+
@root_1.children.clear
|
39
|
+
assert_equal([], @root_1.children)
|
40
|
+
end
|
41
|
+
|
42
|
+
should "replace children list" do
|
43
|
+
new_children_list = [Category.create(:name => "test 1"), Category.create(:name => "test 2")]
|
44
|
+
|
45
|
+
@root_1.children = new_children_list
|
46
|
+
assert_equal(new_children_list, @root_1.children)
|
47
|
+
|
48
|
+
@root_1.children = []
|
49
|
+
assert_equal([], @root_1.children)
|
50
|
+
end
|
51
|
+
|
30
52
|
should "have roots" do
|
31
53
|
assert eql_arrays?(Category.roots, [@root_1, @root_2])
|
32
54
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jakob Vidmar, Aliaksandr Rahalevich
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-05 00:00:00 +03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,7 @@ extra_rdoc_files:
|
|
57
57
|
files:
|
58
58
|
- .document
|
59
59
|
- .gitignore
|
60
|
+
- CHANGELOG
|
60
61
|
- LICENSE
|
61
62
|
- README.rdoc
|
62
63
|
- Rakefile
|