module ActiveRecordExtensions::ClassMethods
Public Class Methods
enabled_fields()
click to toggle source
# File lib/rails_core_extensions/active_record_extensions.rb, line 40 def enabled_fields @enabled_fields || @optional_fields_loader.try(:call) end
enabled_fields=(fields)
click to toggle source
# File lib/rails_core_extensions/active_record_extensions.rb, line 44 def enabled_fields=(fields) @enabled_fields = fields end
Public Instance Methods
database(key)
click to toggle source
Like establish_connection but postfixes the key with the rails environment e.g. database('hello') in development will look for the database
which in config/database.yml is called hello_development
# File lib/rails_core_extensions/active_record_extensions.rb, line 10 def database(key) establish_connection("#{key}_#{Rails.env}") end
enum_int(field, values, options = {})
click to toggle source
# File lib/rails_core_extensions/active_record_extensions.rb, line 14 def enum_int(field, values, options = {}) const_set("#{field.to_s.upcase}_OPTIONS", values) select_options = values.map.with_index{|v, i| [v.to_s.humanize, i]} const_set("#{field.to_s.upcase}_SELECT_OPTIONS", select_options) values.each.with_index do |value, i| const_set("#{field.to_s.upcase}_#{value.to_s.upcase}", i) method_name = options[:short_name] ? "#{value}?" : "#{field}_#{value}?" class_eval <<-ENUM def #{method_name} #{field} == #{i} end ENUM end class_eval <<-ENUM def #{field}_name #{field.to_s.upcase}_OPTIONS[#{field}] end ENUM end
optional_fields(*possible_fields)
click to toggle source
# File lib/rails_core_extensions/active_record_extensions.rb, line 36 def optional_fields(*possible_fields) @optional_fields_loader = possible_fields.pop if possible_fields.last.is_a?(Proc) class << self def enabled_fields @enabled_fields || @optional_fields_loader.try(:call) end def enabled_fields=(fields) @enabled_fields = fields end end possible_fields.each do |field| instance_eval <<-EVAL def #{field}_enabled? enabled_fields.include?(:#{field}) end EVAL end end
position_helpers_for(*collections)
click to toggle source
# File lib/rails_core_extensions/active_record_extensions.rb, line 58 def position_helpers_for(*collections) collections.each do |collection| class_eval <<-EVAL after_save do |record| record.rebalance_#{collection.to_s.singularize}_positions! end def assign_#{collection.to_s.singularize}_position(object) object.position = (#{collection}.last.try(:position) || 0) + 1 unless object.position end def rebalance_#{collection.to_s.singularize}_positions!(object = nil) reload #{collection}.sort_by(&:position).each_with_index do |o, index| if o.position != (index + 1) o.update_attribute(:position, index + 1) end end end EVAL end end