Module: CMS::Orderable::ClassMethods

Defined in:
lib/cms/orderable.rb

Instance Method Summary collapse

Instance Method Details

#order_scope(scope = false) ⇒ Object



29
30
31
# File 'lib/cms/orderable.rb', line 29

def order_scope scope = false
  if scope then @order_scope = scope else @order_scope end
end

#orderable(name, options = {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/cms/orderable.rb', line 13

def orderable name, options = {}
  default_scope order(name)
  after_save :"order_#{name}"
  if options[:order_scope] then order_scope(options[:order_scope]) end

  define_method :"order_#{name}" do
    order_scope.where("#{name} >= #{send(name)}").where("id != #{id}").select(:id).select(name).inject(send(name)) do |i, record|
      record.update_column name, (i += 1) ; i
    end

    order_scope.all.inject(1) do |i, record|
      record.update_column name, i ; i + 1
    end
  end
end