nested_set 1.6.3 → 1.6.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/README.md +2 -0
- data/VERSION +1 -1
- data/lib/nested_set/base.rb +35 -18
- data/lib/nested_set/depth.rb +5 -4
- data/nested_set.gemspec +2 -2
- data/test/db/schema.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -36,6 +36,8 @@ To make use of nested_set, your model needs to have 3 fields: lft, rgt, and pare
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
###NB: There is no reason to use depth column. It's only add additional queries to DB without benefit. If you need level you should use `each_with_level` instead.
|
40
|
+
|
39
41
|
Enable the nested set functionality by declaring acts_as_nested_set on your model
|
40
42
|
|
41
43
|
class Category < ActiveRecord::Base
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.4
|
data/lib/nested_set/base.rb
CHANGED
@@ -99,7 +99,7 @@ module CollectiveIdea #:nodoc:
|
|
99
99
|
}
|
100
100
|
scope :leaves, lambda {
|
101
101
|
where("#{quoted_right_column_name} - #{quoted_left_column_name} = 1").
|
102
|
-
order(quoted_left_column_name)
|
102
|
+
order(quoted_left_column_name)
|
103
103
|
}
|
104
104
|
scope :with_depth, proc {|level| where(:depth => level).order(quoted_left_column_name) }
|
105
105
|
|
@@ -208,34 +208,24 @@ module CollectiveIdea #:nodoc:
|
|
208
208
|
# Don't rebuild a valid tree.
|
209
209
|
return true if valid?
|
210
210
|
|
211
|
-
scope = lambda{|node|}
|
212
|
-
if acts_as_nested_set_options[:scope]
|
213
|
-
scope = lambda{|node|
|
214
|
-
scope_column_names.inject(""){|str, column_name|
|
215
|
-
str << "AND #{connection.quote_column_name(column_name)} = #{connection.quote(node.send(column_name.to_sym))} "
|
216
|
-
}
|
217
|
-
}
|
218
|
-
end
|
219
211
|
indices = {}
|
220
212
|
|
221
213
|
set_left_and_rights = lambda do |node|
|
214
|
+
node_scope = scope_for_rebuild(node)
|
222
215
|
# set left
|
223
|
-
node[left_column_name] = indices[
|
216
|
+
node[left_column_name] = indices[node_scope] += 1
|
224
217
|
# find
|
225
|
-
|
226
|
-
order("#{quoted_left_column_name}, #{quoted_right_column_name}, id").
|
227
|
-
all.each{|n| set_left_and_rights.call(n) }
|
218
|
+
nodes_for_rebuild(node, node_scope).each{ |n| set_left_and_rights.call(n) }
|
228
219
|
# set right
|
229
|
-
node[right_column_name] = indices[
|
220
|
+
node[right_column_name] = indices[node_scope] += 1
|
230
221
|
node.save!
|
231
222
|
end
|
232
223
|
|
233
224
|
# Find root node(s)
|
234
|
-
|
235
|
-
|
236
|
-
all.each do |root_node|
|
225
|
+
root_nodes_for_rebuild.each do |root_node|
|
226
|
+
node_scope = scope_for_rebuild(root_node)
|
237
227
|
# setup index for this scope
|
238
|
-
indices[
|
228
|
+
indices[node_scope] ||= 0
|
239
229
|
set_left_and_rights.call(root_node)
|
240
230
|
end
|
241
231
|
end
|
@@ -269,6 +259,33 @@ module CollectiveIdea #:nodoc:
|
|
269
259
|
def after_move(*args, &block)
|
270
260
|
set_callback :move, :after, *args, &block
|
271
261
|
end
|
262
|
+
|
263
|
+
private
|
264
|
+
|
265
|
+
def scope_for_rebuild(node)
|
266
|
+
scope_column_names.inject({}) do |hash, column_name|
|
267
|
+
hash[column_name] = node.send(column_name.to_sym)
|
268
|
+
hash
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
def nodes_for_rebuild(node, node_scope)
|
273
|
+
where(parent_column_name => node).
|
274
|
+
where(node_scope).
|
275
|
+
order(order_for_rebuild).
|
276
|
+
all
|
277
|
+
end
|
278
|
+
|
279
|
+
def root_nodes_for_rebuild
|
280
|
+
where(parent_column_name => nil).
|
281
|
+
order(order_for_rebuild).
|
282
|
+
all
|
283
|
+
end
|
284
|
+
|
285
|
+
def order_for_rebuild
|
286
|
+
"#{quoted_left_column_name}, #{quoted_right_column_name}, id"
|
287
|
+
end
|
288
|
+
|
272
289
|
end
|
273
290
|
|
274
291
|
# Mixed into both classes and instances to provide easy access to the column names
|
data/lib/nested_set/depth.rb
CHANGED
@@ -21,10 +21,11 @@ module CollectiveIdea #:nodoc:
|
|
21
21
|
|
22
22
|
# Update cached_level attribute
|
23
23
|
def update_depth
|
24
|
-
|
25
|
-
if
|
26
|
-
self.
|
27
|
-
|
24
|
+
self.depth = level
|
25
|
+
if depth_changed?
|
26
|
+
self.self_and_descendants.
|
27
|
+
update_all(["#{self.class.quoted_depth_column_name} = #{self.class.quoted_depth_column_name} + ?",
|
28
|
+
depth_change[1] - depth_change[0].to_i])
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
data/nested_set.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{nested_set}
|
8
|
-
s.version = "1.6.
|
8
|
+
s.version = "1.6.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brandon Keepers", "Daniel Morrison"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-02-10}
|
13
13
|
s.description = %q{An awesome nested set implementation for Active Record}
|
14
14
|
s.email = %q{info@collectiveidea.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/test/db/schema.rb
CHANGED
@@ -6,7 +6,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
6
6
|
t.column :lft, :integer
|
7
7
|
t.column :rgt, :integer
|
8
8
|
t.column :organization_id, :integer
|
9
|
-
t.column :depth, :integer
|
9
|
+
t.column :depth, :integer
|
10
10
|
end
|
11
11
|
|
12
12
|
create_table :departments, :force => true do |t|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 1.6.
|
8
|
+
- 4
|
9
|
+
version: 1.6.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brandon Keepers
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-10 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -153,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
153
|
requirements:
|
154
154
|
- - ">="
|
155
155
|
- !ruby/object:Gem::Version
|
156
|
-
hash:
|
156
|
+
hash: 462466689
|
157
157
|
segments:
|
158
158
|
- 0
|
159
159
|
version: "0"
|