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