Module: EnumField::DefineEnum::ClassMethods

Defined in:
lib/enum_field/define_enum.rb

Instance Method Summary collapse

Instance Method Details

#define_enum(options = {}, &block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/enum_field/define_enum.rb', line 18

def define_enum(options = {}, &block)
  @enum_builder ||= EnumField::Builder.new(self, options)
  @enum_builder.instance_exec(&block) unless @enum_builder.frozen?

  EnumField::Builder::METHODS.each do |method|
    define_singleton_method method do |*args, &method_block|
      @enum_builder.send(method, *args, &method_block)
    end
  end

  @enum_builder.names.each do |method|
    define_singleton_method method do
      @enum_builder[method]
    end

    define_method "#{method}?" do
      @name == method
    end
  end

  define_singleton_method '[]' do |value|
    @enum_builder[value]
  end

  @enum_builder.freeze!
end