module Enum

Extend in order to apply methods for Enum instantiation.

Public Class Methods

extended(base) click to toggle source

Restrict enum instantiation to the value method.

# File lib/mangopay/util/enum.rb, line 5
def self.extended(base)
  base.class_eval do
    disable_instantiation
  end
end

Public Instance Methods

value_of(string) click to toggle source
# File lib/mangopay/util/enum.rb, line 11
def value_of(string)
  value = nil
  constants.each do |const|
    value = const_get const if const.to_s == string
  end
  value
end

Private Instance Methods

disable_instantiation() click to toggle source

Disables instantiation of extending class.

# File lib/mangopay/util/enum.rb, line 45
def disable_instantiation
  class_eval do
    define_method :initialize do
      raise 'Use the Enum#value method to instantiate Enums.'
    end
  end
end
enable_instantiation() click to toggle source

Enables instantiation of extending class.

# File lib/mangopay/util/enum.rb, line 37
def enable_instantiation
  class_eval do
    define_method :initialize do
    end
  end
end
value(enum_value) click to toggle source

Temporary self-called method which instantiates Enums. Assign returned values to accordingly-named constant variables.

@param enum_value Representation value for the Enum instance

# File lib/mangopay/util/enum.rb, line 25
def value(enum_value)
  enable_instantiation
  enum_instance = new
  disable_instantiation
  enum_instance.instance_variable_set :@value, enum_value
  enum_instance.define_singleton_method :to_s do
    enum_value.to_s
  end
  enum_instance
end