mongoid_acts_as_tree 0.1.5 → 0.1.6
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/mongoid_acts_as_tree.rb +32 -13
- data/mongoid_acts_as_tree.gemspec +7 -5
- data/test/models/sub_category.rb +3 -0
- data/test/test_tree.rb +23 -2
- metadata +7 -5
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/lib/mongoid_acts_as_tree.rb
CHANGED
@@ -14,7 +14,8 @@ module Mongoid
|
|
14
14
|
options = {
|
15
15
|
:parent_id_field => "parent_id",
|
16
16
|
:path_field => "path",
|
17
|
-
:depth_field => "depth"
|
17
|
+
:depth_field => "depth",
|
18
|
+
:class => self
|
18
19
|
}.merge(options)
|
19
20
|
|
20
21
|
write_inheritable_attribute :acts_as_tree_options, options
|
@@ -25,14 +26,20 @@ module Mongoid
|
|
25
26
|
extend Fields
|
26
27
|
extend ClassMethods
|
27
28
|
|
28
|
-
field parent_id_field, :type => BSON::
|
29
|
+
field parent_id_field, :type => BSON::ObjectId
|
29
30
|
field path_field, :type => Array, :default => [], :index => true
|
30
31
|
field depth_field, :type => Integer, :default => 0
|
31
32
|
|
32
33
|
self.class_eval do
|
33
34
|
define_method "#{parent_id_field}=" do | new_parent_id |
|
34
|
-
|
35
|
-
|
35
|
+
if new_parent_id.present?
|
36
|
+
new_parent = acts_as_tree_options[:class].find new_parent_id
|
37
|
+
new_parent.children.push self, false
|
38
|
+
else
|
39
|
+
self.write_attribute parent_id_field, nil
|
40
|
+
self[path_field] = []
|
41
|
+
self[depth_field] = 0
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
38
45
|
|
@@ -59,7 +66,7 @@ module Mongoid
|
|
59
66
|
|
60
67
|
def ==(other)
|
61
68
|
return true if other.equal?(self)
|
62
|
-
return true if other.
|
69
|
+
return true if other.kind_of?(acts_as_tree_options[:class]) and other._id == self._id
|
63
70
|
false
|
64
71
|
end
|
65
72
|
|
@@ -83,7 +90,7 @@ module Mongoid
|
|
83
90
|
end
|
84
91
|
|
85
92
|
def parent
|
86
|
-
@_parent or (self[parent_id_field].nil? ? nil :
|
93
|
+
@_parent or (self[parent_id_field].nil? ? nil : acts_as_tree_options[:class].find(self[parent_id_field]))
|
87
94
|
end
|
88
95
|
|
89
96
|
def root?
|
@@ -91,12 +98,12 @@ module Mongoid
|
|
91
98
|
end
|
92
99
|
|
93
100
|
def root
|
94
|
-
self[path_field].first.nil? ? self :
|
101
|
+
self[path_field].first.nil? ? self : acts_as_tree_options[:class].find(self[path_field].first)
|
95
102
|
end
|
96
103
|
|
97
104
|
def ancestors
|
98
105
|
return [] if root?
|
99
|
-
|
106
|
+
acts_as_tree_options[:class].where(:_id.in => self[path_field]).order_by(depth_field)
|
100
107
|
end
|
101
108
|
|
102
109
|
def self_and_ancestors
|
@@ -104,11 +111,11 @@ module Mongoid
|
|
104
111
|
end
|
105
112
|
|
106
113
|
def siblings
|
107
|
-
|
114
|
+
acts_as_tree_options[:class].where(:_id.ne => self._id, parent_id_field => self[parent_id_field]).order_by tree_order
|
108
115
|
end
|
109
116
|
|
110
117
|
def self_and_siblings
|
111
|
-
|
118
|
+
acts_as_tree_options[:class].where(parent_id_field => self[parent_id_field]).order_by tree_order
|
112
119
|
end
|
113
120
|
|
114
121
|
def children
|
@@ -125,8 +132,12 @@ module Mongoid
|
|
125
132
|
alias replace children=
|
126
133
|
|
127
134
|
def descendants
|
128
|
-
|
129
|
-
|
135
|
+
# workorund for mongoid unexpected behavior
|
136
|
+
_new_record_var = self.instance_variable_get(:@new_record)
|
137
|
+
_new_record = _new_record_var != false
|
138
|
+
|
139
|
+
return [] if _new_record
|
140
|
+
acts_as_tree_options[:class].all_in(path_field => [self._id]).order_by tree_order
|
130
141
|
end
|
131
142
|
|
132
143
|
def self_and_descendants
|
@@ -198,13 +209,21 @@ module Mongoid
|
|
198
209
|
super(object)
|
199
210
|
end
|
200
211
|
|
212
|
+
def build(attributes)
|
213
|
+
child = @parent.class.new(attributes)
|
214
|
+
self.push child
|
215
|
+
child
|
216
|
+
end
|
217
|
+
|
218
|
+
alias create build
|
219
|
+
|
201
220
|
alias push <<
|
202
221
|
|
203
222
|
#Deletes object only from children list.
|
204
223
|
#To delete object use <tt>object.destroy</tt>.
|
205
224
|
def delete(object_or_id)
|
206
225
|
object = case object_or_id
|
207
|
-
when String
|
226
|
+
when String, BSON::ObjectId
|
208
227
|
@parent.class.find object_or_id
|
209
228
|
else
|
210
229
|
object_or_id
|
@@ -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.6"
|
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-11-02}
|
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 = [
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"test/helper.rb",
|
30
30
|
"test/models/category.rb",
|
31
31
|
"test/models/ordered_category.rb",
|
32
|
+
"test/models/sub_category.rb",
|
32
33
|
"test/test_order.rb",
|
33
34
|
"test/test_tree.rb"
|
34
35
|
]
|
@@ -38,11 +39,12 @@ Gem::Specification.new do |s|
|
|
38
39
|
s.rubygems_version = %q{1.3.7}
|
39
40
|
s.summary = %q{ActsAsTree plugin for Mongoid}
|
40
41
|
s.test_files = [
|
41
|
-
"test/
|
42
|
+
"test/models/category.rb",
|
42
43
|
"test/models/ordered_category.rb",
|
43
|
-
"test/models/
|
44
|
+
"test/models/sub_category.rb",
|
44
45
|
"test/helper.rb",
|
45
|
-
"test/test_tree.rb"
|
46
|
+
"test/test_tree.rb",
|
47
|
+
"test/test_order.rb"
|
46
48
|
]
|
47
49
|
|
48
50
|
if s.respond_to? :specification_version then
|
data/test/test_tree.rb
CHANGED
@@ -9,9 +9,9 @@ class TestMongoidActsAsTree < Test::Unit::TestCase
|
|
9
9
|
@root_1 = Category.create(:name => "Root 1")
|
10
10
|
@child_1 = Category.create(:name => "Child 1")
|
11
11
|
@child_2 = Category.create(:name => "Child 2")
|
12
|
-
@child_2_1 =
|
12
|
+
@child_2_1 = SubCategory.create(:name => "Child 2.1")
|
13
13
|
|
14
|
-
@child_3 =
|
14
|
+
@child_3 = SubCategory.create(:name => "Child 3")
|
15
15
|
@root_2 = Category.create(:name => "Root 2")
|
16
16
|
|
17
17
|
@root_1.children << @child_1
|
@@ -21,6 +21,11 @@ class TestMongoidActsAsTree < Test::Unit::TestCase
|
|
21
21
|
@child_2.children << @child_2_1
|
22
22
|
end
|
23
23
|
|
24
|
+
should "add child via create or build" do
|
25
|
+
@root_1.children.build :name => "Child 2.2"
|
26
|
+
assert Category.where(:name => "Child 2.2").first.parent == @root_1
|
27
|
+
end
|
28
|
+
|
24
29
|
should "add child via <<" do
|
25
30
|
child = Category.create(:name => "Child 2.2")
|
26
31
|
@root_1.children << child
|
@@ -90,6 +95,22 @@ class TestMongoidActsAsTree < Test::Unit::TestCase
|
|
90
95
|
assert more_deep_child.ancestors.include? parent
|
91
96
|
end
|
92
97
|
|
98
|
+
should "assign blank parent_id" do
|
99
|
+
@child_1.parent_id = ''
|
100
|
+
@child_1.save
|
101
|
+
|
102
|
+
assert_nil @child_1.reload.parent_id
|
103
|
+
assert_equal 0, @child_1.depth
|
104
|
+
assert_equal [], @child_1.path
|
105
|
+
|
106
|
+
@child_1.parent_id = nil
|
107
|
+
@child_1.save
|
108
|
+
|
109
|
+
assert_nil @child_1.reload.parent_id
|
110
|
+
assert_equal 0, @child_1.depth
|
111
|
+
assert_equal [], @child_1.path
|
112
|
+
end
|
113
|
+
|
93
114
|
context "node" do
|
94
115
|
should "have a root" do
|
95
116
|
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
|
+
- 6
|
9
|
+
version: 0.1.6
|
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-11-02 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- test/helper.rb
|
85
85
|
- test/models/category.rb
|
86
86
|
- test/models/ordered_category.rb
|
87
|
+
- test/models/sub_category.rb
|
87
88
|
- test/test_order.rb
|
88
89
|
- test/test_tree.rb
|
89
90
|
has_rdoc: true
|
@@ -119,8 +120,9 @@ signing_key:
|
|
119
120
|
specification_version: 3
|
120
121
|
summary: ActsAsTree plugin for Mongoid
|
121
122
|
test_files:
|
122
|
-
- test/test_order.rb
|
123
|
-
- test/models/ordered_category.rb
|
124
123
|
- test/models/category.rb
|
124
|
+
- test/models/ordered_category.rb
|
125
|
+
- test/models/sub_category.rb
|
125
126
|
- test/helper.rb
|
126
127
|
- test/test_tree.rb
|
128
|
+
- test/test_order.rb
|