Module: ActiveRecord::Acts::List::ColumnMethodDefiner
- Defined in:
- lib/acts_as_list/active_record/acts/column_method_definer.rb
Overview
:nodoc:
Class Method Summary collapse
Class Method Details
.call(caller_class, column) ⇒ Object
2 3 4 5 6 7 8 9 10 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 45 46 47 48 49 |
# File 'lib/acts_as_list/active_record/acts/column_method_definer.rb', line 2 def self.call(caller_class, column) caller_class.class_eval do attr_reader :position_changed define_method :position_column do column end define_method :"#{column}=" do |position| write_attribute(column, position) @position_changed = true end # only add to attr_accessible # if the class has some mass_assignment_protection if defined?(accessible_attributes) and !accessible_attributes.blank? attr_accessible :"#{column}" end define_singleton_method :quoted_position_column do @_quoted_position_column ||= connection.quote_column_name(column) end define_singleton_method :quoted_position_column_with_table_name do @_quoted_position_column_with_table_name ||= "#{caller_class.quoted_table_name}.#{quoted_position_column}" end define_singleton_method :decrement_all do update_all_with_touch "#{quoted_position_column} = (#{quoted_position_column_with_table_name} - 1)" end define_singleton_method :increment_all do update_all_with_touch "#{quoted_position_column} = (#{quoted_position_column_with_table_name} + 1)" end define_singleton_method :update_all_with_touch do |updates| record = new attrs = record.send(:timestamp_attributes_for_update_in_model) now = record.send(:current_time_from_proper_timezone) attrs.each do |attr| updates << ", #{connection.quote_column_name(attr)} = #{connection.quote(connection.quoted_date(now))}" end update_all(updates) end end end |