Class: Enum

Inherits:
Hash
  • Object
show all
Defined in:
lib/enum.rb

Instance Method Summary collapse

Constructor Details

#initialize(*members) ⇒ Enum

Public: Initialize an enum.

members - Array of enum members or Hash of enum members.

Array of enum members may also contain a hash of options:
:start - the number of first enum member. Defaults to 1.

Examples

FRUITS = Enum.new(:apple, :orange, :kiwi) # array
FRUITS = Enum.new(:apple, :orange, :kiwi, start: 0) # array
FRUITS = Enum.new(apple: 1, orange: 2, kiwi: 3) # hash


16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/enum.rb', line 16

def initialize(*members)
  super({})

  if members[0].is_a?(Hash)
    # hash
    update Hash[members[0]]
  else
    # array
    options = members.extract_options!
    start = options.fetch(:start) { 1 }
    update Hash[members.zip(start..members.count + start)]
  end
end

Instance Method Details

#[](id_or_value) ⇒ Object

Public: Access the number/value of member.

ids_or_value - number or value of member.

Returns value if number was provided, and number if value was provided.



35
36
37
# File 'lib/enum.rb', line 35

def [](id_or_value)
  fetch(id_or_value) { key(id_or_value) }
end

#except(*keys) ⇒ Object

Public: Create a subset of enum, preserve all items but specified ones.



50
51
52
# File 'lib/enum.rb', line 50

def except(*keys)
  dup.tap { |d| d.delete_if { |k| keys.include?(k) } }
end

#only(*keys) ⇒ Object

Public: Create a subset of enum, only include specified keys.



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

def only(*keys)
  dup.tap { |d| d.keep_if { |k| keys.include?(k) } }
end

#valid?(member) ⇒ Boolean

Public: Check if supplied member is valid.

Returns:

  • (Boolean)


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

def valid?(member)
  has_key?(member)
end