class EnumRecords::Definer

use the Enumeration class capture enum names as methods or contants

Public Class Methods

new(model_class, &block) click to toggle source
# File lib/enum_records.rb, line 56
def initialize model_class, &block
  @model_class = model_class
  EnumNameCapturer.new(self, &block)
end

Public Instance Methods

add_new_enum(method_sym, options) click to toggle source
# File lib/enum_records.rb, line 61
def add_new_enum(method_sym, options)
  # Check that the model's translation table exist if locales are passed so that in migration we will not have an exception
  return if @model_class._enums[:globalized] && !@model_class.connection.table_exists?(@model_class.translations_table_name)

  enum_name = method_sym.to_s
  @model_class._enums[:definitions][enum_name] = options

  # Reject options that aren't real data base fields.
  fields = options.reject { |k, v| !@model_class.columns_hash.keys.include?(k.to_s) }

  localized_fields = options[:locales] || {}
  
  # Create or find the record associated with the enum.
  if !localized_fields.blank? # In case locales hash is passed
    # Reject options that aren't real data base fields for localized fields.
    for locale in localized_fields.keys
      localized_fields[locale] = localized_fields[locale].reject { |k, v| !@model_class.columns_hash.keys.include?(k.to_s) }
    end
    if @model_class.enum(enum_name).nil? #enum hasn't been created yet
      record = find_or_create_enum_record(enum_name, fields)
      localized_fields.each_pair do |locale, l_fields|
        Globalize.with_locale locale do
          record.update_attributes(l_fields)
        end
      end
    end
  else # no localization needed => create or find the record associated with the enum.
    find_or_create_enum_record(enum_name, fields)
  end
end
find_or_create_enum_record(enum_name, fields) click to toggle source
# File lib/enum_records.rb, line 92
def find_or_create_enum_record(enum_name, fields)
  @model_class.send "find_or_create_by_#{@model_class._enums[:column_name]}", enum_name, fields
end