Module: RubyEnum::ClassMethods

Defined in:
lib/ruby_enum.rb

Instance Method Summary collapse

Instance Method Details

#[](name) ⇒ Object



76
77
78
# File 'lib/ruby_enum.rb', line 76

def [](name)
  _enumeration_values[_normalize(name)]
end

#allObject



80
81
82
# File 'lib/ruby_enum.rb', line 80

def all
  _enumeration_values.map { |_, instance| instance }
end

#const_missing(name) ⇒ Object

enable retrieving enumeration values as constants



59
60
61
# File 'lib/ruby_enum.rb', line 59

def const_missing(name)
  self[name] || super
end

#enum(name, value = nil) ⇒ Object

defines enumeration values



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/ruby_enum.rb', line 64

def enum(name, value = nil)
  normalized_name = _normalize name
  if self[normalized_name]
    raise ArgumentError, "An enumeration value for #{normalized_name} has " \
      "already been defined in #{self.name}."
  else
    value = normalized_name.to_s unless value
    _define_instance_accessor_for normalized_name
    _enumeration_values[normalized_name] = new(normalized_name, value)
  end
end

#find_by_value(value) ⇒ Object



93
94
95
# File 'lib/ruby_enum.rb', line 93

def find_by_value(value)
  all.find { |instance| instance.value == value }
end

#find_by_value!(value) ⇒ Object



84
85
86
87
88
89
90
91
# File 'lib/ruby_enum.rb', line 84

def find_by_value!(value)
  result = find_by_value(value) 
  unless result
    raise ArgumentError, "No enumeration value with associated value #{value} found"
  end

  result
end