Class: Safe::Event
- Inherits:
-
Object
- Object
- Safe::Event
- Defined in:
- lib/universum/event.rb
Overview
base class for events
Class Method Summary collapse
-
.build_class(class_name, *fields) ⇒ Object
(also: new)
meta-programming “macro” - build class (on the fly).
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 |