Sha256: bd09024c645b25b463840e2ab7985be4c83853571f98e883e234161cd1116d23

Contents?: true

Size: 578 Bytes

Versions: 5

Compression:

Stored size: 578 Bytes

Contents

module Kernel #:nodoc:
  # This method is implemented to dynamically generate class with given name and template.
  # Referenced from {Ruby China}[https://ruby-china.org/topics/17382]
  def define_class(name, ancestor = Object)
    Object.const_set(name, Class.new(ancestor))
    Object.const_get(name).class_eval(&Proc.new) if block_given?
    Object.const_get(name)
  end

  def define_error(*args)
    args.each do |arg|
      class_name = arg.to_s.split('_').map { |word| word[0] = word[0].upcase; word }.join
      define_class(class_name, StandardError)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
em-midori-0.0.9.1 lib/em-midori/define_class.rb
em-midori-0.0.9 lib/em-midori/define_class.rb
em-midori-0.0.8 lib/em-midori/define_class.rb
em-midori-0.0.7.1 lib/em-midori/define_class.rb
em-midori-0.0.7 lib/em-midori/define_class.rb