awesome_nested_set 2.1.5 → 2.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/lib/awesome_nested_set/awesome_nested_set.rb +50 -27
- data/lib/awesome_nested_set/version.rb +1 -1
- metadata +39 -7
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2.1.6
|
2
|
+
* Fixed rebuild! when there is a default_scope with order [Adrian Serafin]
|
3
|
+
* Testing with stable bundler, ruby 2.0, MySQL and PostgreSQL [Philip Arndt]
|
4
|
+
* Optimized move_to for large trees [ericsmith66]
|
5
|
+
|
1
6
|
2.1.5
|
2
7
|
* Worked around issues where AR#association wasn't present on Rails 3.0.x. [Philip Arndt]
|
3
8
|
* Adds option 'order_column' which defaults to 'left_column_name'. [gudata]
|
@@ -181,34 +181,37 @@ module CollectiveIdea #:nodoc:
|
|
181
181
|
# Rebuilds the left & rights if unset or invalid.
|
182
182
|
# Also very useful for converting from acts_as_tree.
|
183
183
|
def rebuild!(validate_nodes = true)
|
184
|
-
#
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
scope = lambda{|node|
|
190
|
-
|
191
|
-
|
184
|
+
# default_scope with order may break database queries so we do all operation without scope
|
185
|
+
unscoped do
|
186
|
+
# Don't rebuild a valid tree.
|
187
|
+
return true if valid?
|
188
|
+
|
189
|
+
scope = lambda{|node|}
|
190
|
+
if acts_as_nested_set_options[:scope]
|
191
|
+
scope = lambda{|node|
|
192
|
+
scope_column_names.inject(""){|str, column_name|
|
193
|
+
str << "AND #{connection.quote_column_name(column_name)} = #{connection.quote(node.send(column_name.to_sym))} "
|
194
|
+
}
|
192
195
|
}
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
end
|
196
|
+
end
|
197
|
+
indices = {}
|
198
|
+
|
199
|
+
set_left_and_rights = lambda do |node|
|
200
|
+
# set left
|
201
|
+
node[left_column_name] = indices[scope.call(node)] += 1
|
202
|
+
# find
|
203
|
+
where(["#{quoted_parent_column_full_name} = ? #{scope.call(node)}", node]).order("#{quoted_left_column_full_name}, #{quoted_right_column_full_name}, id").each{|n| set_left_and_rights.call(n) }
|
204
|
+
# set right
|
205
|
+
node[right_column_name] = indices[scope.call(node)] += 1
|
206
|
+
node.save!(:validate => validate_nodes)
|
207
|
+
end
|
206
208
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
209
|
+
# Find root node(s)
|
210
|
+
root_nodes = where("#{quoted_parent_column_full_name} IS NULL").order("#{quoted_left_column_full_name}, #{quoted_right_column_full_name}, id").each do |root_node|
|
211
|
+
# setup index for this scope
|
212
|
+
indices[scope.call(root_node)] ||= 0
|
213
|
+
set_left_and_rights.call(root_node)
|
214
|
+
end
|
212
215
|
end
|
213
216
|
end
|
214
217
|
|
@@ -652,7 +655,27 @@ module CollectiveIdea #:nodoc:
|
|
652
655
|
else target[parent_column_name]
|
653
656
|
end
|
654
657
|
|
655
|
-
|
658
|
+
where_statement = ["not (#{quoted_left_column_name} = CASE " +
|
659
|
+
"WHEN #{quoted_left_column_name} BETWEEN :a AND :b " +
|
660
|
+
"THEN #{quoted_left_column_name} + :d - :b " +
|
661
|
+
"WHEN #{quoted_left_column_name} BETWEEN :c AND :d " +
|
662
|
+
"THEN #{quoted_left_column_name} + :a - :c " +
|
663
|
+
"ELSE #{quoted_left_column_name} END AND " +
|
664
|
+
"#{quoted_right_column_name} = CASE " +
|
665
|
+
"WHEN #{quoted_right_column_name} BETWEEN :a AND :b " +
|
666
|
+
"THEN #{quoted_right_column_name} + :d - :b " +
|
667
|
+
"WHEN #{quoted_right_column_name} BETWEEN :c AND :d " +
|
668
|
+
"THEN #{quoted_right_column_name} + :a - :c " +
|
669
|
+
"ELSE #{quoted_right_column_name} END AND " +
|
670
|
+
"#{quoted_parent_column_name} = CASE " +
|
671
|
+
"WHEN #{self.class.base_class.primary_key} = :id THEN :new_parent " +
|
672
|
+
"ELSE #{quoted_parent_column_name} END)" ,
|
673
|
+
{:a => a, :b => b, :c => c, :d => d, :id => self.id, :new_parent => new_parent} ]
|
674
|
+
|
675
|
+
|
676
|
+
|
677
|
+
|
678
|
+
self.nested_set_scope.where(*where_statement).update_all([
|
656
679
|
"#{quoted_left_column_name} = CASE " +
|
657
680
|
"WHEN #{quoted_left_column_name} BETWEEN :a AND :b " +
|
658
681
|
"THEN #{quoted_left_column_name} + :d - :b " +
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awesome_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2013-02-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activerecord
|
@@ -36,7 +36,7 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ~>
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '2.
|
39
|
+
version: '2.12'
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -44,7 +44,39 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2.
|
47
|
+
version: '2.12'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rake
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '10'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ~>
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '10'
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: combustion
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 0.3.3
|
72
|
+
type: :development
|
73
|
+
prerelease: false
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.3.3
|
48
80
|
description: An awesome nested set implementation for Active Record
|
49
81
|
email: info@collectiveidea.com
|
50
82
|
executables: []
|
@@ -60,7 +92,8 @@ files:
|
|
60
92
|
- README.rdoc
|
61
93
|
- CHANGELOG
|
62
94
|
homepage: http://github.com/collectiveidea/awesome_nested_set
|
63
|
-
licenses:
|
95
|
+
licenses:
|
96
|
+
- MIT
|
64
97
|
post_install_message:
|
65
98
|
rdoc_options:
|
66
99
|
- --main
|
@@ -83,9 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
116
|
version: '0'
|
84
117
|
requirements: []
|
85
118
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.8.
|
119
|
+
rubygems_version: 1.8.25
|
87
120
|
signing_key:
|
88
121
|
specification_version: 3
|
89
122
|
summary: An awesome nested set implementation for Active Record
|
90
123
|
test_files: []
|
91
|
-
has_rdoc:
|