Module: Kernel

Defined in:
lib/const_enum/kernel.rb

Instance Method Summary collapse

Instance Method Details

#const_enum(&block) ⇒ Object

無名の定数クラスを作成して返します 与えたブロック内で以下のように記述することで定数とラベルを定義できます CLAZZNAME = const_enum do

HOGE 1, "ほげ"
FUGA 2, "ふが"
PIYO 3, "ぴよ"

end puts CLAZZNAME::HOGE # 1 puts CLAZZNAME # ふが



13
14
15
16
17
18
19
20
21
# File 'lib/const_enum/kernel.rb', line 13

def const_enum(&block)
  clazz = Class.new(ConstEnum::Base)
  clazz.singleton_class.__send__(:define_method, :method_missing) do |name, *args|
    /\A[A-Z][a-zA-Z_0-9]*\z/ === name.to_s ? define_const(name, *args) : super
  end
  clazz.class_eval &block
  clazz.singleton_class.__send__(:remove_method, :method_missing)
  clazz
end