mongoid-tree 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +56 -0
- data/README.rdoc +1 -1
- data/lib/mongoid/tree.rb +9 -1
- data/spec/mongoid/tree_spec.rb +12 -3
- metadata +9 -7
data/Gemfile.lock
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mongoid-tree (0.2.1)
|
5
|
+
mongoid (>= 2.0.0.beta.14)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (3.0.0.rc)
|
11
|
+
activesupport (= 3.0.0.rc)
|
12
|
+
builder (~> 2.1.2)
|
13
|
+
i18n (~> 0.4.1)
|
14
|
+
activesupport (3.0.0.rc)
|
15
|
+
autotest (4.3.2)
|
16
|
+
bson (1.0.4)
|
17
|
+
bson_ext (1.0.4)
|
18
|
+
builder (2.1.2)
|
19
|
+
diff-lcs (1.1.2)
|
20
|
+
haml (2.2.24)
|
21
|
+
hanna (0.1.12)
|
22
|
+
haml (~> 2.2.8)
|
23
|
+
rake (~> 0.8.2)
|
24
|
+
rdoc (~> 2.3.0)
|
25
|
+
i18n (0.4.1)
|
26
|
+
mongo (1.0.6)
|
27
|
+
bson (>= 1.0.4)
|
28
|
+
mongoid (2.0.0.beta.14)
|
29
|
+
activemodel (= 3.0.0.rc)
|
30
|
+
bson (= 1.0.4)
|
31
|
+
mongo (= 1.0.6)
|
32
|
+
tzinfo (= 0.3.22)
|
33
|
+
will_paginate (~> 3.0.pre)
|
34
|
+
rake (0.8.7)
|
35
|
+
rdoc (2.3.0)
|
36
|
+
rspec (2.0.0.beta.19)
|
37
|
+
rspec-core (= 2.0.0.beta.19)
|
38
|
+
rspec-expectations (= 2.0.0.beta.19)
|
39
|
+
rspec-mocks (= 2.0.0.beta.19)
|
40
|
+
rspec-core (2.0.0.beta.19)
|
41
|
+
rspec-expectations (2.0.0.beta.19)
|
42
|
+
diff-lcs (>= 1.1.2)
|
43
|
+
rspec-mocks (2.0.0.beta.19)
|
44
|
+
tzinfo (0.3.22)
|
45
|
+
will_paginate (3.0.pre2)
|
46
|
+
|
47
|
+
PLATFORMS
|
48
|
+
ruby
|
49
|
+
|
50
|
+
DEPENDENCIES
|
51
|
+
autotest (>= 4.3.2)
|
52
|
+
bson_ext (>= 1.0.4)
|
53
|
+
hanna (>= 0.1.12)
|
54
|
+
mongoid (>= 2.0.0.beta.14)
|
55
|
+
mongoid-tree!
|
56
|
+
rspec (>= 2.0.0.beta.18)
|
data/README.rdoc
CHANGED
data/lib/mongoid/tree.rb
CHANGED
@@ -63,15 +63,18 @@ module Mongoid # :nodoc:
|
|
63
63
|
|
64
64
|
included do
|
65
65
|
references_many :children, :class_name => self.name, :foreign_key => :parent_id, :inverse_of => :parent
|
66
|
-
referenced_in :parent, :class_name => self.name, :inverse_of => :children
|
66
|
+
referenced_in :parent, :class_name => self.name, :inverse_of => :children, :index => true
|
67
67
|
|
68
68
|
field :parent_ids, :type => Array, :default => []
|
69
|
+
index :parent_ids
|
69
70
|
|
70
71
|
set_callback :save, :after, :rearrange_children, :if => :rearrange_children?
|
71
72
|
set_callback :validation, :before do
|
72
73
|
run_callbacks(:rearrange) { rearrange }
|
73
74
|
end
|
74
75
|
|
76
|
+
validate :position_in_tree
|
77
|
+
|
75
78
|
define_model_callbacks :rearrange, :only => [:before, :after]
|
76
79
|
end
|
77
80
|
|
@@ -242,5 +245,10 @@ module Mongoid # :nodoc:
|
|
242
245
|
@rearrange_children = false
|
243
246
|
self.children.find(:all).each { |c| c.save }
|
244
247
|
end
|
248
|
+
|
249
|
+
def position_in_tree
|
250
|
+
errors.add(:parent_id, :invalid) if self.parent_ids.include?(self.id)
|
251
|
+
end
|
252
|
+
|
245
253
|
end
|
246
254
|
end
|
data/spec/mongoid/tree_spec.rb
CHANGED
@@ -2,13 +2,13 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongoid::Tree do
|
4
4
|
|
5
|
-
it "should reference many children as inverse of parent" do
|
5
|
+
it "should reference many children as inverse of parent with index" do
|
6
6
|
a = Node.associations['children']
|
7
7
|
a.should_not be_nil
|
8
8
|
a.association.should == Mongoid::Associations::ReferencesMany
|
9
9
|
a.options.class_name.should == 'Node'
|
10
10
|
a.options.foreign_key.should == 'parent_id'
|
11
|
-
|
11
|
+
Node.index_options.should have_key('parent_id')
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should be referenced in one parent as inverse of children" do
|
@@ -17,13 +17,15 @@ describe Mongoid::Tree do
|
|
17
17
|
a.association.should == Mongoid::Associations::ReferencedIn
|
18
18
|
a.options.class_name.should == 'Node'
|
19
19
|
a.options.inverse_of.should == :children
|
20
|
+
a.options.index.should be_true
|
20
21
|
end
|
21
22
|
|
22
|
-
it "should store parent_ids as Array with [] as default" do
|
23
|
+
it "should store parent_ids as Array with [] as default with index" do
|
23
24
|
f = Node.fields['parent_ids']
|
24
25
|
f.should_not be_nil
|
25
26
|
f.options[:type].should == Array
|
26
27
|
f.options[:default].should == []
|
28
|
+
Node.index_options.should have_key(:parent_ids)
|
27
29
|
end
|
28
30
|
|
29
31
|
describe 'when saved' do
|
@@ -79,6 +81,13 @@ describe Mongoid::Tree do
|
|
79
81
|
root.save
|
80
82
|
end
|
81
83
|
|
84
|
+
it "should prevent cycles" do
|
85
|
+
child = node(:child)
|
86
|
+
child.parent = node(:subchild)
|
87
|
+
child.should_not be_valid
|
88
|
+
child.errors[:parent_id].should_not be_nil
|
89
|
+
end
|
90
|
+
|
82
91
|
end
|
83
92
|
|
84
93
|
describe 'utility methods' do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Benedikt Deicke
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-29 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,13 +26,14 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 62196479
|
30
30
|
segments:
|
31
31
|
- 2
|
32
32
|
- 0
|
33
33
|
- 0
|
34
|
-
-
|
35
|
-
|
34
|
+
- beta
|
35
|
+
- 14
|
36
|
+
version: 2.0.0.beta.14
|
36
37
|
type: :runtime
|
37
38
|
version_requirements: *id001
|
38
39
|
- !ruby/object:Gem::Dependency
|
@@ -107,6 +108,7 @@ files:
|
|
107
108
|
- README.rdoc
|
108
109
|
- Rakefile
|
109
110
|
- Gemfile
|
111
|
+
- Gemfile.lock
|
110
112
|
- .rspec
|
111
113
|
has_rdoc: true
|
112
114
|
homepage: http://github.com/benedikt/mongoid-tree
|