closure_tree 3.4.2 → 3.4.3
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/README.md +4 -0
- data/lib/closure_tree/acts_as_tree.rb +11 -21
- data/lib/closure_tree/version.rb +1 -1
- data/spec/db/schema.rb +1 -1
- data/spec/label_spec.rb +1 -1
- data/spec/support/models.rb +1 -1
- metadata +3 -3
data/README.md
CHANGED
@@ -323,6 +323,10 @@ Closure tree is [tested under every combination](http://travis-ci.org/#!/mceache
|
|
323
323
|
|
324
324
|
## Change log
|
325
325
|
|
326
|
+
### 3.4.3
|
327
|
+
|
328
|
+
* Fixed [issue 19](https://github.com/mceachen/closure_tree/issues/19), which caused
|
329
|
+
```self_and_siblings``` to fail if ```parent_id``` was not the ```parent_column_name```
|
326
330
|
|
327
331
|
### 3.4.2
|
328
332
|
|
@@ -88,19 +88,15 @@ module ClosureTree
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def self.leaves
|
91
|
-
s = joins(
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
(SELECT ancestor_id
|
99
|
-
FROM #{quoted_hierarchy_table_name}
|
100
|
-
GROUP BY 1
|
101
|
-
HAVING MAX(#{quoted_hierarchy_table_name}.generations) = 0) AS leaves
|
102
|
-
ON (#{quoted_table_name}.#{primary_key} = leaves.ancestor_id)
|
91
|
+
s = joins(<<-SQL)
|
92
|
+
INNER JOIN (
|
93
|
+
SELECT ancestor_id
|
94
|
+
FROM #{quoted_hierarchy_table_name}
|
95
|
+
GROUP BY 1
|
96
|
+
HAVING MAX(#{quoted_hierarchy_table_name}.generations) = 0
|
97
|
+
) AS leaves ON (#{quoted_table_name}.#{primary_key} = leaves.ancestor_id)
|
103
98
|
SQL
|
99
|
+
order_option ? s.order(order_option) : s
|
104
100
|
end
|
105
101
|
end
|
106
102
|
end
|
@@ -129,14 +125,7 @@ module ClosureTree
|
|
129
125
|
end
|
130
126
|
|
131
127
|
def leaves
|
132
|
-
|
133
|
-
self.class.leaves.where(<<-SQL
|
134
|
-
#{quoted_table_name}.#{self.class.primary_key} IN (
|
135
|
-
SELECT descendant_id
|
136
|
-
FROM #{quoted_hierarchy_table_name}
|
137
|
-
WHERE ancestor_id = #{id})
|
138
|
-
SQL
|
139
|
-
)
|
128
|
+
self_and_descendants.leaves
|
140
129
|
end
|
141
130
|
|
142
131
|
def depth
|
@@ -169,7 +158,7 @@ module ClosureTree
|
|
169
158
|
end
|
170
159
|
|
171
160
|
def self_and_siblings
|
172
|
-
s = self.class.scoped.where(
|
161
|
+
s = self.class.scoped.where(parent_column_sym => parent)
|
173
162
|
quoted_order_column ? s.order(quoted_order_column) : s
|
174
163
|
end
|
175
164
|
|
@@ -279,6 +268,7 @@ module ClosureTree
|
|
279
268
|
# The crazy double-wrapped sub-subselect works around MySQL's limitation of subselects on the same table that is being mutated.
|
280
269
|
# It shouldn't affect performance of postgresql.
|
281
270
|
# See http://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html
|
271
|
+
# Also: PostgreSQL doesn't support INNER JOIN on DELETE, so we can't use that.
|
282
272
|
connection.execute <<-SQL
|
283
273
|
DELETE FROM #{quoted_hierarchy_table_name}
|
284
274
|
WHERE descendant_id IN (
|
data/lib/closure_tree/version.rb
CHANGED
data/spec/db/schema.rb
CHANGED
data/spec/label_spec.rb
CHANGED
@@ -158,7 +158,7 @@ describe Label do
|
|
158
158
|
labels(:c2).append_sibling(labels(:e2), false)
|
159
159
|
labels(:e2).self_and_siblings.to_a.should == [labels(:b1), labels(:b2), labels(:c2), labels(:e2)]
|
160
160
|
labels(:a1).self_and_descendants.collect(&:name).should == %w(a1 b1 b2 c2 e2 d2 c1-six c1-seven c1-eight c1-nine)
|
161
|
-
labels(:a1).leaves.collect(&:name).should == %w(
|
161
|
+
labels(:a1).leaves.collect(&:name).should == %w(b2 e2 d2 c1-six c1-seven c1-eight c1-nine)
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
data/spec/support/models.rb
CHANGED
@@ -41,7 +41,7 @@ end
|
|
41
41
|
|
42
42
|
class Label < ActiveRecord::Base
|
43
43
|
attr_accessible :name # < - make sure order doesn't matter
|
44
|
-
acts_as_tree :order => "sort_order"
|
44
|
+
acts_as_tree :order => "sort_order", :parent_column_name => "mother_id"
|
45
45
|
|
46
46
|
def to_s
|
47
47
|
"#{self.class}: #{name}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: closure_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -192,7 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
192
192
|
version: '0'
|
193
193
|
segments:
|
194
194
|
- 0
|
195
|
-
hash:
|
195
|
+
hash: -1873822360950581335
|
196
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
197
|
none: false
|
198
198
|
requirements:
|
@@ -201,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
201
|
version: '0'
|
202
202
|
segments:
|
203
203
|
- 0
|
204
|
-
hash:
|
204
|
+
hash: -1873822360950581335
|
205
205
|
requirements: []
|
206
206
|
rubyforge_project:
|
207
207
|
rubygems_version: 1.8.23
|