ordered_tree 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/ordered_tree.rb +3 -13
- data/lib/ordered_tree/instance_methods/misc.rb +10 -2
- data/ordered_tree.gemspec +1 -1
- data/spec/fixtures/category.rb +1 -1
- data/spec/ordered_tree_spec.rb +12 -2
- data/spec/spec_helper.rb +1 -0
- metadata +30 -30
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.9
|
data/lib/ordered_tree.rb
CHANGED
@@ -30,29 +30,19 @@ module OrderedTree #:nodoc:
|
|
30
30
|
belongs_to :parent_node,
|
31
31
|
:class_name => self.name,
|
32
32
|
:foreign_key => ordered_tree_config[:foreign_key],
|
33
|
-
:primary_key => ordered_tree_config[:primary_key]
|
33
|
+
:primary_key => ordered_tree_config[:primary_key],
|
34
|
+
:conditions => proc {scope_condition}
|
34
35
|
has_many :child_nodes,
|
35
36
|
:class_name => self.name,
|
36
37
|
:foreign_key => ordered_tree_config[:foreign_key],
|
37
38
|
:primary_key => ordered_tree_config[:primary_key],
|
39
|
+
:conditions => proc {scope_condition},
|
38
40
|
:order => ordered_tree_config[:order]
|
39
41
|
scope :roots, lambda { |*args|
|
40
42
|
scope_condition = args[0]
|
41
43
|
where(scope_condition).where(self.ordered_tree_config[:foreign_key].to_sym => 0).order(self.ordered_tree_config[:order])
|
42
44
|
}
|
43
45
|
|
44
|
-
# If the scope is something like :person, then turn it into :person_id
|
45
|
-
if self.ordered_tree_config[:scope].is_a?(Symbol) && self.ordered_tree_config[:scope].to_s !~ /_id$/
|
46
|
-
self.ordered_tree_config[:scope] = "#{self.ordered_tree_config[:scope]}_id".intern
|
47
|
-
end
|
48
|
-
|
49
|
-
if self.ordered_tree_config[:scope].is_a?(Symbol) # ie :person_id
|
50
|
-
define_method "scope_condition" do
|
51
|
-
hash = {self.class.ordered_tree_config[:scope].to_sym => send(self.class.ordered_tree_config[:scope].to_sym)}
|
52
|
-
self.class.send(:sanitize_sql_hash_for_conditions, hash)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
46
|
include OrderedTree::ClassMethods
|
57
47
|
include OrderedTree::InstanceMethods
|
58
48
|
end #ordered_tree
|
@@ -13,9 +13,17 @@ module OrderedTree
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
# Overwrite this method to define the scope of the list changes
|
17
16
|
def scope_condition
|
18
|
-
|
17
|
+
return @scope_condition if defined?(@scope_condition)
|
18
|
+
scope = self.class.ordered_tree_config[:scope]
|
19
|
+
# If the scope is something like :person, then turn it into :person_id
|
20
|
+
scope = :"#{scope}_id" if scope.is_a?(Symbol) && scope.to_s !~ /_id$/
|
21
|
+
|
22
|
+
@scope_condition = if scope
|
23
|
+
self.class.send(:sanitize_sql_hash_for_conditions, {scope => send(scope)})
|
24
|
+
else
|
25
|
+
"1=1"
|
26
|
+
end
|
19
27
|
end
|
20
28
|
end
|
21
29
|
end
|
data/ordered_tree.gemspec
CHANGED
data/spec/fixtures/category.rb
CHANGED
data/spec/ordered_tree_spec.rb
CHANGED
@@ -8,10 +8,20 @@ describe OrderedTree do
|
|
8
8
|
|
9
9
|
describe "when a primary_key is supplied" do
|
10
10
|
it "should use the parent_id to point to the primary_key instead of :id" do
|
11
|
-
c1 = Category.create(:alt_id => 10)
|
12
|
-
c2 = Category.create(:parent_id => 10)
|
11
|
+
c1 = Category.create(:person_id => 1, :alt_id => 10)
|
12
|
+
c2 = Category.create(:person_id => 1, :parent_id => 10)
|
13
|
+
d1 = Category.create(:person_id => 2, :alt_id => 10)
|
14
|
+
d2 = Category.create(:person_id => 2, :parent_id => 10)
|
15
|
+
|
13
16
|
c2.parent.should == c1
|
14
17
|
c1.children.should include(c2)
|
18
|
+
d1.children.should_not include(c2)
|
19
|
+
c2.root.should == c1
|
20
|
+
|
21
|
+
d2.parent.should == d1
|
22
|
+
d1.children.should include(d2)
|
23
|
+
c1.children.should_not include(d2)
|
24
|
+
d2.root.should == d1
|
15
25
|
end
|
16
26
|
end
|
17
27
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ordered_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 9
|
10
|
+
version: 0.1.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ramon Tayag
|
@@ -19,8 +19,9 @@ date: 2011-08-07 00:00:00 +08:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
name: activerecord
|
22
23
|
type: :runtime
|
23
|
-
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
@@ -31,12 +32,12 @@ dependencies:
|
|
31
32
|
- 0
|
32
33
|
- 0
|
33
34
|
version: 3.0.0
|
34
|
-
name: activerecord
|
35
|
-
version_requirements: *id001
|
36
35
|
prerelease: false
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
38
39
|
type: :development
|
39
|
-
|
40
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
41
|
none: false
|
41
42
|
requirements:
|
42
43
|
- - ~>
|
@@ -47,12 +48,12 @@ dependencies:
|
|
47
48
|
- 6
|
48
49
|
- 0
|
49
50
|
version: 2.6.0
|
50
|
-
name: rspec
|
51
|
-
version_requirements: *id002
|
52
51
|
prerelease: false
|
52
|
+
requirement: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
+
name: bundler
|
54
55
|
type: :development
|
55
|
-
|
56
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
57
|
none: false
|
57
58
|
requirements:
|
58
59
|
- - ~>
|
@@ -63,12 +64,12 @@ dependencies:
|
|
63
64
|
- 0
|
64
65
|
- 0
|
65
66
|
version: 1.0.0
|
66
|
-
name: bundler
|
67
|
-
version_requirements: *id003
|
68
67
|
prerelease: false
|
68
|
+
requirement: *id003
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
+
name: jeweler
|
70
71
|
type: :development
|
71
|
-
|
72
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
73
74
|
requirements:
|
74
75
|
- - ~>
|
@@ -79,12 +80,12 @@ dependencies:
|
|
79
80
|
- 6
|
80
81
|
- 2
|
81
82
|
version: 1.6.2
|
82
|
-
name: jeweler
|
83
|
-
version_requirements: *id004
|
84
83
|
prerelease: false
|
84
|
+
requirement: *id004
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
+
name: rcov
|
86
87
|
type: :development
|
87
|
-
|
88
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
89
|
none: false
|
89
90
|
requirements:
|
90
91
|
- - ">="
|
@@ -93,12 +94,12 @@ dependencies:
|
|
93
94
|
segments:
|
94
95
|
- 0
|
95
96
|
version: "0"
|
96
|
-
name: rcov
|
97
|
-
version_requirements: *id005
|
98
97
|
prerelease: false
|
98
|
+
requirement: *id005
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
|
+
name: sqlite3
|
100
101
|
type: :development
|
101
|
-
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
102
103
|
none: false
|
103
104
|
requirements:
|
104
105
|
- - ">="
|
@@ -107,12 +108,12 @@ dependencies:
|
|
107
108
|
segments:
|
108
109
|
- 0
|
109
110
|
version: "0"
|
110
|
-
name: sqlite3
|
111
|
-
version_requirements: *id006
|
112
111
|
prerelease: false
|
112
|
+
requirement: *id006
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
|
+
name: guard-rspec
|
114
115
|
type: :development
|
115
|
-
|
116
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
116
117
|
none: false
|
117
118
|
requirements:
|
118
119
|
- - ">="
|
@@ -121,12 +122,12 @@ dependencies:
|
|
121
122
|
segments:
|
122
123
|
- 0
|
123
124
|
version: "0"
|
124
|
-
name: guard-rspec
|
125
|
-
version_requirements: *id007
|
126
125
|
prerelease: false
|
126
|
+
requirement: *id007
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
|
+
name: libnotify
|
128
129
|
type: :development
|
129
|
-
|
130
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
130
131
|
none: false
|
131
132
|
requirements:
|
132
133
|
- - ">="
|
@@ -135,12 +136,12 @@ dependencies:
|
|
135
136
|
segments:
|
136
137
|
- 0
|
137
138
|
version: "0"
|
138
|
-
name: libnotify
|
139
|
-
version_requirements: *id008
|
140
139
|
prerelease: false
|
140
|
+
requirement: *id008
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
|
+
name: rb-inotify
|
142
143
|
type: :development
|
143
|
-
|
144
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
144
145
|
none: false
|
145
146
|
requirements:
|
146
147
|
- - ">="
|
@@ -149,9 +150,8 @@ dependencies:
|
|
149
150
|
segments:
|
150
151
|
- 0
|
151
152
|
version: "0"
|
152
|
-
name: rb-inotify
|
153
|
-
version_requirements: *id009
|
154
153
|
prerelease: false
|
154
|
+
requirement: *id009
|
155
155
|
description: Uses parent_id and position to create an ordered tree.
|
156
156
|
email: ramon@tayag.net
|
157
157
|
executables: []
|