module EnumTable::Record::ClassMethods
Public Instance Methods
enum(name, options={})
click to toggle source
# File lib/enum_table/record.rb, line 11 def enum(name, options={}) name = name.to_sym reflection = enums[name] ? enums[name].dup : Reflection.new(name) [:type, :id_name].each do |key| value = options[key] and reflection.send "#{key}=", value end reflection.to_populate do |ref| enum_map(name, options).each do |value, id| ref.add_value id, value end end self.enums = enums.merge(name => reflection, name.to_s => reflection) class_eval <<-EOS, __FILE__, __LINE__ + 1 def #{name} read_enum(:#{name}) end def #{name}=(value) write_enum(:#{name}, value) end def #{name}? query_enum(:#{name}) end def #{name}_changed? enum_changed?(:#{name}) end def #{name}_was enum_was(:#{name}) end def #{name}_change enum_change(:#{name}) end EOS reflection end
enum_id(name, value)
click to toggle source
# File lib/enum_table/record.rb, line 77 def enum_id(name, value) reflection = enums[name] or raise ArgumentError, "no such enum: #{name}" reflection.id(value) end
enum_map(name, options)
click to toggle source
# File lib/enum_table/record.rb, line 54 def enum_map(name, options) case (table = options[:table]) when Hash table when Array map = {} table.each_with_index { |element, i| map[element] = i + 1 } map else map = {} table_name = table || "#{self.table_name.singularize}_#{name.to_s.pluralize}" return {} if EnumTable.missing_tables_allowed? && !connection.tables.include?(table_name) connection.execute("SELECT id, value FROM #{connection.quote_table_name table_name}").each do |row| map[row[1]] = row[0] end map end end
enum_value(name, id)
click to toggle source
# File lib/enum_table/record.rb, line 83 def enum_value(name, id) reflection = enums[name] or raise ArgumentError, "no such enum: #{name}" reflection.value(id) end
reflect_on_enum(name)
click to toggle source
# File lib/enum_table/record.rb, line 73 def reflect_on_enum(name) enums[name] end