Sha256: 91472e23bc59d7630083798cb276b2db9e231d169644273f8d331559e061a05e

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

# Extend in order to apply methods for Enum instantiation.
module Enum

  # Restrict enum instantiation to the +value+ method.
  def self.extended(base)
    base.class_eval do
      disable_instantiation
    end
  end

  def value_of(string)
    value = nil
    constants.each do |const|
      value = const_get const if const.to_s == string
    end
    value
  end

  private

  # Temporary self-called method which instantiates Enums.
  # Assign returned values to accordingly-named constant variables.
  #
  # @param +enum_value+ Representation value for the Enum instance
  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

  # Enables instantiation of extending class.
  def enable_instantiation
    class_eval do
      define_method :initialize do
      end
    end
  end

  # Disables instantiation of extending class.
  def disable_instantiation
    class_eval do
      define_method :initialize do
        raise 'Use the Enum#value method to instantiate Enums.'
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mangopay-v4-4.0.0 lib/mangopay/util/enum.rb