module ActiveHash::Enum::Methods

Public Instance Methods

delete_all() click to toggle source
Calls superclass method
# File lib/enum/enum.rb, line 22
def delete_all
  if @enum_accessors.present?
    @records.each do |record|
      constant = constant_for(record, @enum_accessors)
      remove_const(constant) if const_defined?(constant, false)
    end
  end
  super
end
enum_accessor(*field_names) click to toggle source
# File lib/enum/enum.rb, line 12
def enum_accessor(*field_names)
  @enum_accessors = field_names
  reload
end
insert(record) click to toggle source
Calls superclass method
# File lib/enum/enum.rb, line 17
def insert(record)
  super
  set_constant(record) if defined?(@enum_accessors)
end

Private Instance Methods

constant_for(record, field_names) click to toggle source
# File lib/enum/enum.rb, line 45
def constant_for(record, field_names)
  field_value = field_names.map { |name| record.attributes[name] }.join("_")
  if constant = !field_value.nil? && field_value.dup
    constant.gsub!(/\W+/, "_")
    constant.gsub!(/^_|_$/, '')
    constant.upcase!
    constant
  end
end
set_constant(record) click to toggle source
# File lib/enum/enum.rb, line 32
def set_constant(record)
  constant = constant_for(record, @enum_accessors)
  return nil if constant.blank?

  unless const_defined?(constant, false)
    const_set(constant, record)
  else
    raise DuplicateEnumAccessor, "#{constant} already defined for #{self.class}" unless const_get(constant, false) == record
  end
end