noodall-core 0.4.7 → 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/noodall/node.rb +47 -23
- data/noodall-core.gemspec +1 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.8
|
data/lib/noodall/node.rb
CHANGED
@@ -31,6 +31,7 @@ module Noodall
|
|
31
31
|
alias_method :keywords=, :tag_list=
|
32
32
|
|
33
33
|
attr_accessor :publish, :hide #for publishing
|
34
|
+
attr_accessor :previous_parent_id, :moved #for redordering
|
34
35
|
|
35
36
|
acts_as_tree :order => "position", :search_class => Noodall::Node
|
36
37
|
|
@@ -76,31 +77,17 @@ module Noodall
|
|
76
77
|
end
|
77
78
|
|
78
79
|
def last?
|
79
|
-
position ==
|
80
|
+
position == siblings.count
|
80
81
|
end
|
82
|
+
|
81
83
|
def move_lower
|
82
84
|
sibling = search_class.first(:position => {"$gt" => self.position}, parent_id_field => self[parent_id_field], :order => 'position ASC')
|
83
|
-
|
84
|
-
tmp = sibling.position
|
85
|
-
sibling.position = self.position
|
86
|
-
self.position = tmp
|
87
|
-
|
88
|
-
search_class.collection.update({:_id => self._id}, self.to_mongo)
|
89
|
-
search_class.collection.update({:_id => sibling._id}, sibling.to_mongo)
|
90
|
-
|
91
|
-
global_updated!
|
85
|
+
switch_position(sibling)
|
92
86
|
end
|
87
|
+
|
93
88
|
def move_higher
|
94
89
|
sibling = search_class.first(:position => {"$lt" => self.position}, parent_id_field => self[parent_id_field], :order => 'position DESC')
|
95
|
-
|
96
|
-
tmp = sibling.position
|
97
|
-
sibling.position = self.position
|
98
|
-
self.position = tmp
|
99
|
-
|
100
|
-
search_class.collection.update({:_id => self._id}, self.to_mongo)
|
101
|
-
search_class.collection.update({:_id => sibling._id}, sibling.to_mongo)
|
102
|
-
|
103
|
-
global_updated!
|
90
|
+
switch_position(sibling)
|
104
91
|
end
|
105
92
|
|
106
93
|
def run_callbacks(kind, options = {}, &block)
|
@@ -154,7 +141,6 @@ module Noodall
|
|
154
141
|
|
155
142
|
def self_and_siblings
|
156
143
|
search_class.where(parent_id_field => self[parent_id_field]).order(tree_order)
|
157
|
-
|
158
144
|
end
|
159
145
|
|
160
146
|
def children
|
@@ -167,6 +153,17 @@ module Noodall
|
|
167
153
|
|
168
154
|
private
|
169
155
|
|
156
|
+
def switch_position(sibling)
|
157
|
+
tmp = sibling.position
|
158
|
+
sibling.position = self.position
|
159
|
+
self.position = tmp
|
160
|
+
|
161
|
+
search_class.collection.update({:_id => self._id}, self.to_mongo)
|
162
|
+
search_class.collection.update({:_id => sibling._id}, sibling.to_mongo)
|
163
|
+
|
164
|
+
global_updated!
|
165
|
+
end
|
166
|
+
|
170
167
|
def current_time
|
171
168
|
self.class.current_time
|
172
169
|
end
|
@@ -235,11 +232,38 @@ module Noodall
|
|
235
232
|
end
|
236
233
|
end
|
237
234
|
|
235
|
+
before_update :move_check
|
236
|
+
def move_check
|
237
|
+
set_previous_parent if self.parent_id_changed?
|
238
|
+
self.moved = true if self.position_changed? or self.parent_id_changed?
|
239
|
+
end
|
240
|
+
|
241
|
+
before_destroy :set_previous_parent #so the child list it was removed from normalises order
|
242
|
+
def set_previous_parent
|
243
|
+
self.previous_parent_id = self.parent_id_was
|
244
|
+
end
|
245
|
+
|
246
|
+
before_create :set_moved #so if it is placed at the top of list it normalises order
|
247
|
+
def set_moved
|
248
|
+
self.moved = true
|
249
|
+
end
|
250
|
+
|
238
251
|
after_save :order_siblings
|
239
252
|
def order_siblings
|
240
|
-
if
|
241
|
-
|
242
|
-
|
253
|
+
search_class.collection.update({:_id => {"$ne" => self._id}, :position => {"$gte" => self.position}, parent_id_field => self[parent_id_field]}, { "$inc" => { :position => 1 }}, { :multi => true }) if moved
|
254
|
+
self_and_siblings.each_with_index do |sibling, index|
|
255
|
+
unless sibling.position == index
|
256
|
+
sibling.position = index
|
257
|
+
search_class.collection.save(sibling.to_mongo, :safe => true)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
order_previous_siblings
|
261
|
+
end
|
262
|
+
|
263
|
+
after_destroy :order_previous_siblings
|
264
|
+
def order_previous_siblings
|
265
|
+
unless previous_parent_id.nil?
|
266
|
+
search_class.where(parent_id_field => previous_parent_id).each_with_index do |sibling, index|
|
243
267
|
unless sibling.position == index
|
244
268
|
sibling.position = index
|
245
269
|
search_class.collection.save(sibling.to_mongo, :safe => true)
|
data/noodall-core.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noodall-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 8
|
10
|
+
version: 0.4.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Steve England
|