Class: Safe::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/universum/event.rb

Overview

base class for events

Class Method Summary collapse

Class Method Details

.build_class(class_name, *fields) ⇒ Object Also known as: new

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



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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