Module: SwiftyEnum::ClassMethods

Defined in:
lib/swifty_enum.rb

Instance Method Summary collapse

Instance Method Details

#def_case(name, rawvalue = nil) ⇒ Object

define enum case as subclass

Parameters:

  • name (String)

    enum case name

  • rawvalue (Object) (defaults to: nil)

    enum case rawvalue

Raises:

  • (RuntimeError)

    SwiftyEnum::Messages::ERR_DUPLICATE_ENUM_RAWVALUE



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/swifty_enum.rb', line 19

def def_case(name, rawvalue = nil)
  @_enum_hash ||= {}
  hashvalue = @_enum_hash.size
  rawvalue ||= hashvalue

  # check rawvalue is unique
  if @_enum_hash.has_key? rawvalue
    raise sprintf(SwiftyEnum::Messages::ERR_DUPLICATE_ENUM_RAWVALUE, rawvalue)
  end

  klass = Class.new
  klass.define_singleton_method 'hashvalue' do
    return hashvalue
  end
  klass.define_singleton_method 'rawvalue' do
    return rawvalue
  end
  klass.define_singleton_method '===' do |rhs|
    return klass == rhs
  end
  const_set :"#{name}", klass

  @_enum_hash[rawvalue] = klass
end

#def_method(name) ⇒ Object

define enum method

Parameters:

  • name (String)

    enum method name



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/swifty_enum.rb', line 46

def def_method(name)
  @_enum_hash ||= {}

  # check block given
  if ! block_given?
    raise SwiftyEnum::Messages::ERR_DEF_METHOD_WITHOUT_BLOCK
  end

  # check defined enum case existing
  if @_enum_hash.empty?
    raise SwiftyEnum::Messages::ERR_DEF_METHOD_FOR_EMPTY
  end

  @_enum_hash.values.each do |klass|
    klass.define_singleton_method name do
      yield klass
    end
  end
end

#enum_casesArray

get all enum cases

Returns:

  • (Array)

    enum cases



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

def enum_cases
  return @_enum_hash.values
end

#get(rawvalue) ⇒ Class

get enum case

Parameters:

  • rawvalue (Object)

    enum case rawvalue

Returns:

  • (Class)

    enum case



69
70
71
72
# File 'lib/swifty_enum.rb', line 69

def get(rawvalue)
  @_enum_hash ||= {}
  return @_enum_hash.fetch rawvalue, nil
end