Class: Enum

Inherits:
Object show all
Includes:
Enumerable
Defined in:
lib/enum.rb,
lib/enum/version.rb

Defined Under Namespace

Modules: Helpers Classes: EnumValue

Constant Summary collapse

VERSION =
'2.0.2'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, klass = nil, hash = {}) ⇒ Enum



7
8
9
10
11
12
# File 'lib/enum.rb', line 7

def initialize(name, klass=nil, hash={})
  klass, hash = nil, klass unless klass.is_a?(Module)
  @name, @klass = name, klass
  map_hash(hash)
  generate_methods
end

Instance Attribute Details

#by_nameObject (readonly)

Returns the value of attribute by_name.



5
6
7
# File 'lib/enum.rb', line 5

def by_name
  @by_name
end

#by_valueObject (readonly)

Returns the value of attribute by_value.



5
6
7
# File 'lib/enum.rb', line 5

def by_value
  @by_value
end

#klassObject (readonly)

Returns the value of attribute klass.



5
6
7
# File 'lib/enum.rb', line 5

def klass
  @klass
end

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/enum.rb', line 5

def name
  @name
end

Instance Method Details

#[](*name_or_values) ⇒ Object



31
32
33
34
35
36
# File 'lib/enum.rb', line 31

def [](*name_or_values)
  return name_or_values.map { |name_or_value| get(name_or_value) } if name_or_values.length > 1

  name_or_value = name_or_values.first
  get(name_or_value) or raise "#{inspect} does not know #{name_or_value.inspect}"
end

#each(&block) ⇒ Object



27
28
29
# File 'lib/enum.rb', line 27

def each(&block)
  @by_name.each_value(&block)
end

#get(*name_or_values) ⇒ Object



38
39
40
41
42
43
# File 'lib/enum.rb', line 38

def get(*name_or_values)
  return name_or_values.map { |name_or_value| get(name_or_value) } if name_or_values.length > 1

  name_or_value = name_or_values.first
  @by_name_s[name_or_value.to_s] || @by_value_s[name_or_value.to_s]
end

#inspectObject



17
18
19
# File 'lib/enum.rb', line 17

def inspect
  "#{to_s}(#{@by_name.map { |n, ev| "#{n.inspect} => #{ev.value.inspect}"}.join(", ")})"
end

#namesObject



21
22
23
# File 'lib/enum.rb', line 21

def names
  @by_name.keys
end

#optionsObject



45
46
47
# File 'lib/enum.rb', line 45

def options
  Hash[map { |ev| [ev.t, ev] }]
end

#to_sObject



14
15
16
# File 'lib/enum.rb', line 14

def to_s
  @klass ? "#{@klass.name}::#{@name}" : @name.to_s
end

#valuesObject



24
25
26
# File 'lib/enum.rb', line 24

def values
  @by_value.keys
end