mongoid_acts_as_tree 0.1.3 → 0.1.4
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/CHANGELOG +3 -0
- data/VERSION +1 -1
- data/lib/mongoid_acts_as_tree.rb +11 -4
- data/mongoid_acts_as_tree.gemspec +2 -2
- data/test/test_tree.rb +31 -0
- metadata +3 -3
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/lib/mongoid_acts_as_tree.rb
CHANGED
@@ -29,6 +29,13 @@ module Mongoid
|
|
29
29
|
field path_field, :type => Array, :default => [], :index => true
|
30
30
|
field depth_field, :type => Integer, :default => 0
|
31
31
|
|
32
|
+
self.class_eval do
|
33
|
+
define_method "#{parent_id_field}=" do | new_parent_id |
|
34
|
+
new_parent = self.class.find new_parent_id
|
35
|
+
new_parent.children << self
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
32
39
|
after_save :move_children
|
33
40
|
validate :will_save_tree
|
34
41
|
before_destroy :destroy_descendants
|
@@ -64,11 +71,11 @@ module Mongoid
|
|
64
71
|
|
65
72
|
def fix_position
|
66
73
|
if parent.nil?
|
67
|
-
self
|
74
|
+
self.write_attribute parent_id_field, nil
|
68
75
|
self[path_field] = []
|
69
76
|
self[depth_field] = 0
|
70
77
|
else
|
71
|
-
self
|
78
|
+
self.write_attribute parent_id_field, parent._id
|
72
79
|
self[path_field] = parent[path_field] + [parent._id]
|
73
80
|
self[depth_field] = parent[depth_field] + 1
|
74
81
|
self.save
|
@@ -181,7 +188,7 @@ module Mongoid
|
|
181
188
|
if object.descendants.include? @parent
|
182
189
|
object.instance_variable_set :@_cyclic, true
|
183
190
|
else
|
184
|
-
object
|
191
|
+
object.write_attribute object.parent_id_field, @parent._id
|
185
192
|
object[object.path_field] = @parent[@parent.path_field] + [@parent._id]
|
186
193
|
object[object.depth_field] = @parent[@parent.depth_field] + 1
|
187
194
|
object.instance_variable_set :@_will_move, true
|
@@ -201,7 +208,7 @@ module Mongoid
|
|
201
208
|
object_or_id
|
202
209
|
end
|
203
210
|
|
204
|
-
object
|
211
|
+
object.write_attribute object.parent_id_field, nil
|
205
212
|
object[object.path_field] = []
|
206
213
|
object[object.depth_field] = 0
|
207
214
|
object.save
|
@@ -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.4"
|
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-
|
12
|
+
s.date = %q{2010-07-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 = [
|
data/test/test_tree.rb
CHANGED
@@ -53,6 +53,37 @@ class TestMongoidActsAsTree < Test::Unit::TestCase
|
|
53
53
|
assert eql_arrays?(Category.roots, [@root_1, @root_2])
|
54
54
|
end
|
55
55
|
|
56
|
+
should "assign parent_id" do
|
57
|
+
child = Category.create :name => 'child'
|
58
|
+
parent = Category.create :name => 'parent'
|
59
|
+
|
60
|
+
child.parent_id = parent.id
|
61
|
+
child.save
|
62
|
+
|
63
|
+
assert_equal parent.children.first.id, child.id
|
64
|
+
assert_equal parent.id, child.parent_id
|
65
|
+
assert parent.children.include? child
|
66
|
+
|
67
|
+
assert_equal 1, child.depth
|
68
|
+
assert_equal [parent.id], child.path
|
69
|
+
|
70
|
+
more_deep_child = Category.create :name => 'more deep child'
|
71
|
+
more_deep_child.parent_id = child.id
|
72
|
+
|
73
|
+
assert_equal child.children.first.id, more_deep_child.id
|
74
|
+
assert_equal child.id, more_deep_child.parent_id
|
75
|
+
assert child.children.include? more_deep_child
|
76
|
+
|
77
|
+
assert_equal 2, more_deep_child.depth
|
78
|
+
assert_equal [parent.id, child.id], more_deep_child.path
|
79
|
+
|
80
|
+
assert parent.descendants.include? child
|
81
|
+
assert parent.descendants.include? more_deep_child
|
82
|
+
|
83
|
+
assert more_deep_child.ancestors.include? child
|
84
|
+
assert more_deep_child.ancestors.include? parent
|
85
|
+
end
|
86
|
+
|
56
87
|
context "node" do
|
57
88
|
should "have a root" do
|
58
89
|
assert_equal @root_1.root, @root_1
|
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
|
+
- 4
|
9
|
+
version: 0.1.4
|
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-
|
17
|
+
date: 2010-07-05 00:00:00 +03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|