Parent

Enumerize::Attribute

Attributes

default_value[R]
i18n_scope[R]
name[R]
values[R]

Public Class Methods

new(klass, name, options={}) click to toggle source
# File lib/enumerize/attribute.rb, line 5
def initialize(klass, name, options={})
  raise ArgumentError, ':in option is required' unless options[:in]

  extend Multiple if options[:multiple]

  @klass  = klass
  @name   = name.to_sym
  @values = Array(options[:in]).map { |v| Value.new(self, *v) }
  @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }]
  @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }]

  if options[:i18n_scope]
    raise ArgumentError, ':i18n_scope option accepts only String or Array of strings' unless Array(options[:i18n_scope]).all? { |s| s.is_a?(String) }
    @i18n_scope = options[:i18n_scope]
  end

  if options[:default]
    @default_value = find_default_value(options[:default])
    raise ArgumentError, 'invalid default value' unless @default_value
  end
end

Public Instance Methods

define_methods!(mod) click to toggle source
# File lib/enumerize/attribute.rb, line 70
def define_methods!(mod)
  mod.module_eval         def #{name}          if defined?(super)            self.class.enumerized_attributes[:#{name}].find_value(super)          elsif respond_to?(:read_attribute)            self.class.enumerized_attributes[:#{name}].find_value(read_attribute(:#{name}))          else            if defined?(@#{name})              self.class.enumerized_attributes[:#{name}].find_value(@#{name})            else              @#{name} = nil            end          end        end        def #{name}=(new_value)          _enumerized_values_for_validation[:#{name}] = new_value.nil? ? nil : new_value.to_s          allowed_value_or_nil = self.class.enumerized_attributes[:#{name}].find_value(new_value)          allowed_value_or_nil = allowed_value_or_nil.value unless allowed_value_or_nil.nil?          if defined?(super)            super allowed_value_or_nil          elsif respond_to?(:write_attribute, true)            write_attribute '#{name}', allowed_value_or_nil          else            @#{name} = allowed_value_or_nil          end        end        def #{name}_text          self.#{name} && self.#{name}.text        end        def #{name}_value          self.#{name} && self.#{name}.value        end, __FILE__, __LINE__ + 1
end
find_default_value(value) click to toggle source
# File lib/enumerize/attribute.rb, line 27
def find_default_value(value)
  if value.respond_to?(:call)
    value
  else
    find_value(value)
  end
end
find_value(value) click to toggle source
# File lib/enumerize/attribute.rb, line 35
def find_value(value)
  @value_hash[value.to_s] unless value.nil?
end
i18n_scopes() click to toggle source
# File lib/enumerize/attribute.rb, line 39
def i18n_scopes
  @i18n_scopes ||= if i18n_scope
    scopes = Array(i18n_scope)
  elsif @klass.respond_to?(:model_name)
    scopes = ["enumerize.#{@klass.model_name.i18n_key}.#{name}"]
  else
    []
  end
end
options(options = {}) click to toggle source
# File lib/enumerize/attribute.rb, line 49
def options(options = {})
  values = if options.empty?
    @values
  else
    raise ArgumentError, 'Options cannot have both :only and :except' if options[:only] && options[:except]

    only = Array(options[:only]).map(&:to_s)
    except = Array(options[:except]).map(&:to_s)

    @values.reject do |value|
      if options[:only]
        !only.include?(value)
      elsif options[:except]
        except.include?(value)
      end
    end
  end

  values.map { |v| [v.text, v.to_s] }
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.