module SwiftyEnum::ClassMethods

Public Instance Methods

def_case(name, rawvalue = nil) click to toggle source

define enum case as subclass @param [String] name enum case name @param [Object] rawvalue enum case rawvalue @raise [RuntimeError] SwiftyEnum::Messages::ERR_DUPLICATE_ENUM_RAWVALUE

# 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) { |klass, args| ... } click to toggle source

define enum method @param [String] name enum method name

# 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 |*args|
      yield klass, args
    end
  end
end
enum_cases() click to toggle source

get all enum cases @return [Array] enum cases

# File lib/swifty_enum.rb, line 76
def enum_cases
  return @_enum_hash.values
end
get(rawvalue) click to toggle source

get enum case @param [Object] rawvalue enum case rawvalue @return [Class] enum case

# File lib/swifty_enum.rb, line 69
def get(rawvalue)
  @_enum_hash ||= {}
  return @_enum_hash.fetch rawvalue, nil
end