Module: Acts::AsOrderable::AddActsAsMethod
- Defined in:
- lib/acts_as_orderable.rb
Instance Method Summary collapse
-
#acts_as_orderable(*sources) ⇒ Object
Should new element be first || last.
Instance Method Details
#acts_as_orderable(*sources) ⇒ Object
Should new element be first || last
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/acts_as_orderable.rb', line 11 def acts_as_orderable(*sources) class_eval <<-END scope :ordered, ->{ order('element_order ASC') } after_create :init_me! include Acts::AsOrderable::InstanceMethods END = sources..stringify_keys new_pos = .delete("position") new_pos = (new_pos && new_pos.to_sym == :first) ? :first : :last parent_column = .delete("tree_column") # Determine tree column (first from param - else check default acts_as_tree "parent_id") if self.table_exists? unless parent_column parent_column = 'parent_id' if self.column_names.include? 'parent_id' end end # Set class attributes cattr_accessor :new_element_position self.new_element_position = new_pos cattr_accessor :parent_column self.parent_column = parent_column # Define methods for assigning new parent - when we change parent # we need to be first or last element (according to new_el_pos) self.send(:define_method, :"#{parent_column}=") do |new_parent| old_parent = self.send(:"#{parent_column}") super new_parent # If object exist (been saved and we're just changing its parent) init_me! unless self.new_record? || old_parent.to_i == new_parent.to_i end if parent_column end |