Class: PersistentEnum::ActsAsEnum::State

Inherits:
Object
  • Object
show all
Defined in:
lib/persistent_enum/acts_as_enum.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(enum_spec, enum_values, required_enum_constants) ⇒ State

Returns a new instance of State.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 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

Instance Attribute Details

#by_nameObject (readonly)

Returns the value of attribute by_name.



11
12
13
# File 'lib/persistent_enum/acts_as_enum.rb', line 11

def by_name
  @by_name
end

#by_name_insensitiveObject (readonly)

Returns the value of attribute by_name_insensitive.



11
12
13
# File 'lib/persistent_enum/acts_as_enum.rb', line 11

def by_name_insensitive
  @by_name_insensitive
end

#by_ordinalObject (readonly)

Returns the value of attribute by_ordinal.



11
12
13
# File 'lib/persistent_enum/acts_as_enum.rb', line 11

def by_ordinal
  @by_ordinal
end

#enum_specObject (readonly)

Returns the value of attribute enum_spec.



11
12
13
# File 'lib/persistent_enum/acts_as_enum.rb', line 11

def enum_spec
  @enum_spec
end

#required_by_ordinalObject (readonly)

Returns the value of attribute required_by_ordinal.



11
12
13
# File 'lib/persistent_enum/acts_as_enum.rb', line 11

def required_by_ordinal
  @required_by_ordinal
end

Instance Method Details

#insensitive_lookup?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/persistent_enum/acts_as_enum.rb', line 44

def insensitive_lookup?
  @insensitive_lookup
end