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