Module: Enumeric

Defined in:
lib/enumeric.rb,
lib/enumeric/version.rb

Defined Under Namespace

Modules: ModuleMethods Classes: Error

Constant Summary collapse

VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.define(name_and_values) ⇒ Module

Parameters:

  • values (Hash<Symbol, Object>)

Returns:

  • (Module)


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

def define(name_and_values)
  name_and_values_frozen = name_and_values.each_with_object({}) {|(name, value), h|
    raise Error, "`#{name.inspect}` is not a Symbol" unless name.is_a?(Symbol)
    raise Error, "`#{value.inspect}` does not have `freeze` method" unless value.respond_to?(:freeze)

    h[name] = value.freeze
  }.freeze

  m = Module.new do
    @name_and_values = name_and_values_frozen
    @name_and_values.each do |k, v|
      const_set(k, v)
    end

    extend ModuleMethods
  end

  m
end