Class: ActiveRecord::Base

Inherits:
Object show all
Defined in:
lib/smklib/movable_children.rb

Class Method Summary collapse

Class Method Details

.has_movable(association_id, options = {}, &extension) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/smklib/movable_children.rb', line 3

def self.has_movable(association_id, options = {}, &extension)
	define_method('last_order_index') do
		max = -6500
		self.send(association_id.to_s).each { |p| max = p.order_index.to_i if p.order_index.to_i > max.to_i }
		max < -1 ? -1 : max
	end

	define_method('update_order_indexes') do |moved_page_id, above_page_id|
		moved_page = self.send(association_id.to_s).find(moved_page_id)
		above_page = self.send(association_id.to_s).find(above_page_id)
		next_next_order_index = above_page.order_index.to_i + 2
		self.send(association_id.to_s).find(:all, :conditions => ['order_index > ?', above_page.order_index]).each { |p|
			p.order_index = next_next_order_index
			p.save
			next_next_order_index +=1
		}
		moved_page.order_index = above_page.order_index.to_i + 1
		moved_page.save
	end

end

.is_movable_within_a(association_id, options = {}, &extension) ⇒ Object



25
26
27
# File 'lib/smklib/movable_children.rb', line 25

def self.is_movable_within_a(association_id, options = {}, &extension)
	before_create { |model| model.order_index = model.send(association_id.to_s).last_order_index + 1 }
end