acts_as_many_trees 0.1.1 → 0.2.0
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.
- checksums.yaml +4 -4
- data/lib/acts_as_many_trees/hierarchy_table.rb +58 -23
- data/lib/acts_as_many_trees/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cb9522ff927a74b55edbe763d0d20f035e862d9
|
4
|
+
data.tar.gz: 86bb4f983cc3de97fde2809852b1d0f98c293b32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1861df1b3c04446f86761ea74a26325993cf840b4c77417135d70bca9166257da786a94208953a4990744e0cc0bb770e3203a9ab0794fe5f19534f34f5b2a58
|
7
|
+
data.tar.gz: c47ce4acd75e28b18c49ad7ceca5e66daa775ed05b0a89e7ece1bdf8975a0b2e475ccc584fc00c91f3a9d2678f9fefd2a0d75835868ec0b878e3947357c6a09b
|
@@ -98,6 +98,8 @@ module ActsAsManyTrees
|
|
98
98
|
wrk_item=self.create(descendant_id:item.id,ancestor_id:item.id,generation: 0,hierarchy_scope: hierarchy_scope,position: position)
|
99
99
|
end
|
100
100
|
temp_name = SecureRandom.hex
|
101
|
+
# BEWARE this works when added default trees and adding default trees to a new scope but it won't work when moving
|
102
|
+
# items within a named tree or when adding items from one named scope to another
|
101
103
|
create_tree(wrk_item,wrk_parent,temp_name)
|
102
104
|
delete_item_ancestors(wrk_item)
|
103
105
|
delete_ancestors_of_item_children(wrk_item,hierarchy_scope)
|
@@ -129,9 +131,10 @@ module ActsAsManyTrees
|
|
129
131
|
position
|
130
132
|
end
|
131
133
|
|
132
|
-
def self.create_tree(wrk_item,wrk_parent,temp_name)
|
134
|
+
def self.create_tree(wrk_item,wrk_parent,temp_name,existing_name='')
|
133
135
|
if wrk_parent
|
134
|
-
|
136
|
+
if existing_name != wrk_item.hierarchy_scope
|
137
|
+
sql=<<-SQL
|
135
138
|
insert into #{table_name}(ancestor_id,descendant_id,generation,hierarchy_scope,position)
|
136
139
|
select a.ancestor_id,b.descendant_id,a.generation+b.generation+1,'#{temp_name}',b.position
|
137
140
|
from #{table_name} a, #{table_name} b
|
@@ -144,7 +147,35 @@ module ActsAsManyTrees
|
|
144
147
|
from #{table_name} c
|
145
148
|
where c.ancestor_id = #{wrk_item.descendant_id}
|
146
149
|
and c.hierarchy_scope = '#{wrk_item.hierarchy_scope}'
|
147
|
-
|
150
|
+
union
|
151
|
+
select c.ancestor_id,c.descendant_id,c.generation,'#{temp_name}',c.position
|
152
|
+
from #{table_name} c
|
153
|
+
where c.ancestor_id = #{wrk_item.descendant_id}
|
154
|
+
and c.ancestor_id <> c.descendant_id
|
155
|
+
and c.hierarchy_scope = '#{existing_name}'
|
156
|
+
union
|
157
|
+
select #{wrk_parent.descendant_id},c.descendant_id,c.generation,'#{temp_name}',c.position
|
158
|
+
from #{table_name} c
|
159
|
+
where c.ancestor_id = #{wrk_item.descendant_id}
|
160
|
+
and c.ancestor_id <> c.descendant_id
|
161
|
+
and c.hierarchy_scope = '#{existing_name}'
|
162
|
+
SQL
|
163
|
+
else
|
164
|
+
sql=<<-SQL
|
165
|
+
insert into #{table_name}(ancestor_id,descendant_id,generation,hierarchy_scope,position)
|
166
|
+
select a.ancestor_id,b.descendant_id,a.generation+b.generation+1,'#{temp_name}',b.position
|
167
|
+
from #{table_name} a, #{table_name} b
|
168
|
+
where a.descendant_id=#{wrk_parent.descendant_id}
|
169
|
+
and b.ancestor_id=#{wrk_item.ancestor_id}
|
170
|
+
and a.hierarchy_scope = b.hierarchy_scope
|
171
|
+
and a.hierarchy_scope = '#{wrk_item.hierarchy_scope}'
|
172
|
+
union
|
173
|
+
select c.ancestor_id,c.descendant_id,c.generation,'#{temp_name}',c.position
|
174
|
+
from #{table_name} c
|
175
|
+
where c.ancestor_id = #{wrk_item.descendant_id}
|
176
|
+
and c.hierarchy_scope = '#{wrk_item.hierarchy_scope}'
|
177
|
+
SQL
|
178
|
+
end
|
148
179
|
else
|
149
180
|
sql=<<-SQL
|
150
181
|
insert into #{table_name}(ancestor_id,descendant_id,generation,hierarchy_scope,position)
|
@@ -155,6 +186,10 @@ module ActsAsManyTrees
|
|
155
186
|
SQL
|
156
187
|
end
|
157
188
|
connection.execute(sql)
|
189
|
+
# puts '============='
|
190
|
+
# wrk_item.class.find_by_sql("select * from #{table_name} where hierarchy_scope='#{temp_name}'").each do | i |
|
191
|
+
# puts "a=#{i.ancestor_id} d=#{i.descendant_id} scope = #{i.hierarchy_scope} wrk.a = #{wrk_item.ancestor_id} wrk.b=#{wrk_item.descendant_id} parent_scope = #{wrk_parent.hierarchy_scope} parent.a =#{wrk_parent.ancestor_id} parent.d =#{wrk_parent.descendant_id}"
|
192
|
+
# end
|
158
193
|
end
|
159
194
|
|
160
195
|
def self.delete_item_ancestors(wrk_item)
|
@@ -208,19 +243,19 @@ module ActsAsManyTrees
|
|
208
243
|
def self.reset_descendant_position(parent,before_position,hierarchy_scope='')
|
209
244
|
after_position = parent.position
|
210
245
|
gap = before_position - after_position
|
211
|
-
# p "before position: #{before_position}, after_position: #{after_position} gap: #{gap}"
|
212
|
-
# sql = <<-SQL
|
213
|
-
# select ancestor_id,descendant_id,hierarchy_scope,(#{after_position} + (
|
214
|
-
# (CAST ((rank() over (partition by ancestor_id order by position)-1) AS numeric))
|
215
|
-
# /( CAST (count(*) over (partition by ancestor_id) AS numeric)) * #{gap})) as position
|
216
|
-
# from #{table_name}
|
217
|
-
# where ancestor_id=#{parent.descendant_id}
|
218
|
-
# and hierarchy_scope='#{hierarchy_scope}'
|
219
|
-
# SQL
|
220
|
-
# res = connection.execute(sql)
|
221
|
-
# res.each_row do |row|
|
222
|
-
# p row
|
223
|
-
# end
|
246
|
+
# p "before position: #{before_position}, after_position: #{after_position} gap: #{gap}"
|
247
|
+
# sql = <<-SQL
|
248
|
+
# select ancestor_id,descendant_id,hierarchy_scope,(#{after_position} + (
|
249
|
+
# (CAST ((rank() over (partition by ancestor_id order by position)-1) AS numeric))
|
250
|
+
# /( CAST (count(*) over (partition by ancestor_id) AS numeric)) * #{gap})) as position
|
251
|
+
# from #{table_name}
|
252
|
+
# where ancestor_id=#{parent.descendant_id}
|
253
|
+
# and hierarchy_scope='#{hierarchy_scope}'
|
254
|
+
# SQL
|
255
|
+
# res = connection.execute(sql)
|
256
|
+
# res.each_row do |row|
|
257
|
+
# p row
|
258
|
+
# end
|
224
259
|
sql = <<-SQL
|
225
260
|
with new_position as (select ancestor_id,descendant_id,hierarchy_scope,(#{after_position} + (
|
226
261
|
(CAST ((rank() over (partition by ancestor_id order by position)-1) AS numeric))
|
@@ -237,13 +272,13 @@ module ActsAsManyTrees
|
|
237
272
|
and t.hierarchy_scope = new_position.hierarchy_scope
|
238
273
|
SQL
|
239
274
|
connection.execute(sql)
|
240
|
-
# sql=<<-SQL
|
241
|
-
# select * from #{table_name} where hierarchy_scope='#{hierarchy_scope}' order by position
|
242
|
-
# SQL
|
243
|
-
# res = connection.execute(sql)
|
244
|
-
# res.each_row do |row|
|
245
|
-
# p row
|
246
|
-
# end
|
275
|
+
# sql=<<-SQL
|
276
|
+
# select * from #{table_name} where hierarchy_scope='#{hierarchy_scope}' order by position
|
277
|
+
# SQL
|
278
|
+
# res = connection.execute(sql)
|
279
|
+
# res.each_row do |row|
|
280
|
+
# p row
|
281
|
+
# end
|
247
282
|
end
|
248
283
|
end
|
249
284
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_many_trees
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Small
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|