class Safe::Event

base class for events

Public Class Methods

build_class( class_name, *fields ) click to toggle source

meta-programming “macro” - build class (on the fly)

# File lib/universum/event.rb, line 34
def self.build_class( class_name, *fields )
  klass = Class.new( Event ) do
    define_method( :initialize ) do |*args|
      fields.zip( args ).each do |field, arg|
        instance_variable_set( "@#{field}", arg )
      end
      freeze    ### note: add freeze - assumes "immutable" struct-like class
    end

    fields.each do |field|
      define_method( field ) do
        instance_variable_get( "@#{field}" )
      end
    end
  end

  ## add self.new too - note: call/forward to "old" orginal self.new of Event (base) class
  klass.define_singleton_method( :new ) do |*args|
    old_new( *args )
  end

  ## note: use Safe (module) and NOT Object for namespacing
  ##   use include Safe to make all structs global
  Safe.const_set( class_name, klass )   ## returns klass (plus sets global constant class name)

  klass
end
Also aliased as: new
new( class_name, *fields )
Also aliased as: old_new
Alias for: build_class
old_new( class_name, *fields )
Alias for: new