class PersistentEnum::ActsAsEnum::State

Attributes

by_name[R]
by_name_insensitive[R]
by_ordinal[R]
enum_spec[R]
required_by_ordinal[R]

Public Class Methods

new(enum_spec, enum_values, required_enum_constants) click to toggle source
# File lib/persistent_enum/acts_as_enum.rb, line 14
def initialize(enum_spec, enum_values, required_enum_constants)
  @enum_spec = enum_spec

  enum_values.each do |val|
    val.attributes.each_value { |attr| attr.freeze }
    val.freeze
  end

  @by_ordinal = enum_values.index_by(&:ordinal).freeze

  @by_name    = enum_values
                  .index_by { |v| v.read_attribute(enum_spec.name_attr) }
                  .with_indifferent_access
                  .freeze

  @by_name_insensitive = enum_values
                           .index_by { |v| v.read_attribute(enum_spec.name_attr).downcase }
                           .with_indifferent_access
                           .freeze

  @required_by_ordinal = required_enum_constants
                           .map { |name| by_name.fetch(name) }
                           .index_by(&:ordinal)
                           .freeze

  @insensitive_lookup  = (by_name.size == by_name_insensitive.size)

  freeze
end

Public Instance Methods

insensitive_lookup?() click to toggle source
# File lib/persistent_enum/acts_as_enum.rb, line 44
def insensitive_lookup?
  @insensitive_lookup
end