Module: Kernel

Defined in:
lib/midori/core_ext/define_class.rb

Overview

Meta-programming Kernel for Syntactic Sugars

Instance Method Summary collapse

Instance Method Details

#define_class(name, ancestor = Object) { ... } ⇒ Class

This method is implemented to dynamically generate class with given name and template. Referenced from Ruby China

Parameters:

  • name (String)

    name of class

  • ancestor (Class) (defaults to: Object)

    class to be inherited

Yields:

  • inner block to be inserted into class

Returns:

  • (Class)

    the class defined



10
11
12
13
14
# File 'lib/midori/core_ext/define_class.rb', line 10

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

#define_error(*args) ⇒ nil

Define a batch of error handler with given name

Examples:

define_error(:foo_error, :bar_error) 
=> nil, FooError < StandardError and BarError < StandardError would be defined

Parameters:

  • args (Array<Symbol>)

    names to be defined

Returns:

  • (nil)

    nil



22
23
24
25
26
27
28
# File 'lib/midori/core_ext/define_class.rb', line 22

def define_error(*args)
  args.each do |arg|
    class_name = arg.to_s.split('_').collect(&:capitalize).join
    define_class(class_name, StandardError)
  end
  nil
end