class ActiveMocker::AttributeTypes::Enum

Attributes

attribute[RW]
db_value_type[RW]
enums[RW]
ignore_value[RW]
key_type[RW]
table_name[RW]

Public Class Methods

build(db_value_type:, table_name:, attribute:, enums:, ignore_value: false) click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 8
def build(db_value_type:, table_name:, attribute:, enums:, ignore_value: false)
  klass               = Class.new(ActiveMocker::AttributeTypes::Enum)
  klass.table_name    = table_name.to_sym
  klass.attribute     = attribute.to_sym
  klass.ignore_value  = ignore_value
  enums               = if enums.is_a?(Array)
                          enums.each_with_object({}).with_index { |(k, h), i| h[k] = i }
                        else
                          enums
                        end
  klass.key_type      = String
  klass.db_value_type = db_value_type
  klass.enums         = Hash[enums.map do |k, v|
    [Virtus::Attribute.build(klass.key_type).coerce(k),
     Virtus::Attribute.build(klass.db_value_type).coerce(v)]
  end]
  klass
end
to_s() click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 27
def to_s
  "ActiveMocker::AttributeTypes::Enum.build(ignore_value: #{ignore_value}, db_value_type: #{db_value_type}, table_name: :#{table_name}, attribute: :#{attribute}, enums: #{enums.inspect})"
end

Public Instance Methods

coerce(key) click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 34
def coerce(key)
  return if key.nil?
  coerced_key = key_type.coerce(key)
  if key && self.class.enums.key?(coerced_key)
    if self.class.ignore_value
      coerced_key
    else
      get_value(key)
    end
  else
    raise ArgumentError, "'#{coerced_key}' is not a valid #{self.class.attribute}"
  end
end
db_value_type() click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 60
def db_value_type
  Virtus::Attribute.build(self.class.db_value_type)
end
get_key(value) click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 48
def get_key(value)
  self.class.enums.invert[db_value_type.coerce(value)]
end
get_value(key) click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 52
def get_value(key)
  self.class.enums[key_type.coerce(key)]
end
key_type() click to toggle source
# File lib/active_mocker/attribute_types/enum.rb, line 56
def key_type
  Virtus::Attribute.build(self.class.key_type)
end