simple_nested_set 0.0.28 → 0.0.29
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.
@@ -53,12 +53,26 @@ module SimpleNestedSet
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
# FIXME This needs to be abstracted away into the SqlAbstraction module
|
56
57
|
# FIXME we don't always want to call this on after_save, do we? it's only relevant when
|
57
58
|
# either the structure or the slug has changed
|
58
59
|
def denormalize!
|
59
60
|
sql = []
|
60
|
-
|
61
|
-
|
61
|
+
|
62
|
+
case db_adapter
|
63
|
+
when :mysql, :mysql2
|
64
|
+
sql << denormalize_query_mysql(:level) do |table|
|
65
|
+
table[:id].count.to_sql
|
66
|
+
end if node.has_attribute?(:level)
|
67
|
+
|
68
|
+
sql << denormalize_query_mysql(:path) do |table|
|
69
|
+
group_concat(db_adapter, :slug)
|
70
|
+
end if node.has_attribute?(:path)
|
71
|
+
else
|
72
|
+
sql << denormalize_level_query if node.has_attribute?(:level)
|
73
|
+
sql << denormalize_path_query if node.has_attribute?(:path)
|
74
|
+
end
|
75
|
+
|
62
76
|
update_all(sql.join(',')) unless sql.blank?
|
63
77
|
end
|
64
78
|
|
@@ -129,10 +143,11 @@ module SimpleNestedSet
|
|
129
143
|
Rebuild::FromPaths.new.run(self)
|
130
144
|
end
|
131
145
|
|
132
|
-
def rebuild_from_parents!(sort_order =
|
146
|
+
def rebuild_from_parents!(sort_order = :id)
|
133
147
|
Rebuild::FromParents.new.run(self, sort_order)
|
134
148
|
end
|
135
149
|
|
150
|
+
# sqlite3, postgresql
|
136
151
|
def denormalize_level_query
|
137
152
|
aliaz = arel_table.as(:l)
|
138
153
|
query = aliaz.project(aliaz[:id].count).
|
@@ -142,6 +157,7 @@ module SimpleNestedSet
|
|
142
157
|
"level = (#{query.join(' AND ')})"
|
143
158
|
end
|
144
159
|
|
160
|
+
# sqlite3, postgresql
|
145
161
|
def denormalize_path_query
|
146
162
|
aliaz = arel_table.as(:l)
|
147
163
|
query = aliaz.project(group_concat(db_adapter, :slug)).
|
@@ -151,6 +167,28 @@ module SimpleNestedSet
|
|
151
167
|
"path = (#{query.join(' AND ')})"
|
152
168
|
end
|
153
169
|
|
170
|
+
def denormalize_query_mysql(field)
|
171
|
+
synonym = field.to_s.reverse.to_sym
|
172
|
+
aliaz = arel_table.as("table_#{synonym}")
|
173
|
+
|
174
|
+
field_sql = yield aliaz
|
175
|
+
|
176
|
+
query = [
|
177
|
+
aliaz.project("#{field_sql} AS field_#{synonym}", aliaz[:lft], aliaz[:rgt]).to_sql,
|
178
|
+
' WHERE ',
|
179
|
+
where_clauses.map { |clause| clause.gsub(arel_table.name, aliaz.table_alias.to_s) }.join(' AND ')
|
180
|
+
].join
|
181
|
+
|
182
|
+
<<-sql
|
183
|
+
#{field} = (
|
184
|
+
SELECT #{aliaz.table_alias.to_s}.field_#{synonym}
|
185
|
+
FROM (#{query}) AS #{aliaz.table_alias.to_s}
|
186
|
+
WHERE #{aliaz[:lft].lt(arel_table[:lft]).to_sql}
|
187
|
+
AND #{aliaz[:rgt].gt(arel_table[:rgt]).to_sql}
|
188
|
+
)
|
189
|
+
sql
|
190
|
+
end
|
191
|
+
|
154
192
|
def db_adapter
|
155
193
|
node.class.connection.instance_variable_get('@config')[:adapter].to_sym
|
156
194
|
end
|
@@ -9,7 +9,7 @@ module SimpleNestedSet
|
|
9
9
|
@num = 0
|
10
10
|
end
|
11
11
|
|
12
|
-
def run(nested_set, sort_order =
|
12
|
+
def run(nested_set, sort_order = :id)
|
13
13
|
order_columns = ([:parent_id] + Array[sort_order]).uniq.compact
|
14
14
|
|
15
15
|
db_adapter = nested_set.first.class.connection.instance_variable_get('@config')[:adapter].to_sym
|
metadata
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_nested_set
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 37
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 29
|
10
|
+
version: 0.0.29
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Fuchs
|
14
|
+
- Matthias Viehweger
|
14
15
|
autorequire:
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date:
|
19
|
+
date: 2011-01-25 00:00:00 +01:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -63,7 +64,7 @@ dependencies:
|
|
63
64
|
type: :development
|
64
65
|
version_requirements: *id003
|
65
66
|
- !ruby/object:Gem::Dependency
|
66
|
-
name:
|
67
|
+
name: ruby-debug
|
67
68
|
prerelease: false
|
68
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
70
|
none: false
|
@@ -77,23 +78,21 @@ dependencies:
|
|
77
78
|
type: :development
|
78
79
|
version_requirements: *id004
|
79
80
|
- !ruby/object:Gem::Dependency
|
80
|
-
name:
|
81
|
+
name: rake
|
81
82
|
prerelease: false
|
82
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
84
|
none: false
|
84
85
|
requirements:
|
85
|
-
- - "
|
86
|
+
- - ">="
|
86
87
|
- !ruby/object:Gem::Version
|
87
|
-
hash:
|
88
|
+
hash: 3
|
88
89
|
segments:
|
89
90
|
- 0
|
90
|
-
|
91
|
-
- 2
|
92
|
-
version: 0.5.2
|
91
|
+
version: "0"
|
93
92
|
type: :development
|
94
93
|
version_requirements: *id005
|
95
94
|
- !ruby/object:Gem::Dependency
|
96
|
-
name: ruby
|
95
|
+
name: sqlite3-ruby
|
97
96
|
prerelease: false
|
98
97
|
requirement: &id006 !ruby/object:Gem::Requirement
|
99
98
|
none: false
|
@@ -106,6 +105,54 @@ dependencies:
|
|
106
105
|
version: "0"
|
107
106
|
type: :development
|
108
107
|
version_requirements: *id006
|
108
|
+
- !ruby/object:Gem::Dependency
|
109
|
+
name: pg
|
110
|
+
prerelease: false
|
111
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - "="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
hash: 59
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
- 9
|
120
|
+
- 0
|
121
|
+
version: 0.9.0
|
122
|
+
type: :development
|
123
|
+
version_requirements: *id007
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: mysql2
|
126
|
+
prerelease: false
|
127
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - "="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
hash: 27
|
133
|
+
segments:
|
134
|
+
- 0
|
135
|
+
- 2
|
136
|
+
- 6
|
137
|
+
version: 0.2.6
|
138
|
+
type: :development
|
139
|
+
version_requirements: *id008
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: database_cleaner
|
142
|
+
prerelease: false
|
143
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - "="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
hash: 7
|
149
|
+
segments:
|
150
|
+
- 0
|
151
|
+
- 6
|
152
|
+
- 0
|
153
|
+
version: 0.6.0
|
154
|
+
type: :development
|
155
|
+
version_requirements: *id009
|
109
156
|
description: simple_nested_set allows to easily handle nested sets in ActiveRecord
|
110
157
|
email: svenfuchs@artweb-design.de
|
111
158
|
executables: []
|