module Kernel

Public Instance Methods

const_enum(&block) click to toggle source

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

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

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

Calls superclass method
# 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