noodall-core 0.4.7 → 0.4.8
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/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
|