Module: OOP::CellObject::ClassMethods
- Defined in:
- lib/oop/cell_object.rb
Instance Method Summary collapse
Instance Method Details
#constructor(*parts, &block) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/oop/cell_object.rb', line 23 def constructor(*parts, &block) define_method(:initialize) do |opts={}| opts ||= {} if block block.call(opts) end extra_args = (opts.keys - parts) missing_args = parts.select do |k| !opts.has_key?(k) && !opts.has_key?(k) end if extra_args.any? raise "extra args: #{extra_args}" elsif missing_args.any? raise "missing args: #{missing_args}" end @opts = opts; opts.each do |k, v| k = k.to_sym @opts[k] = v end end parts.each do |p| define_method(p.to_sym) do @opts[p] end end end |
#import(imports) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/oop/cell_object.rb', line 15 def import(imports) imports.each do |name, import| define_method(name.to_sym) do BasicRules.cast_to_value(import) end end end |
#message(meth, &block) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/oop/cell_object.rb', line 6 def (meth, &block) define_method(meth) do |*args, &blk| args = args.map do |arg| BasicRules.cast_to_value(arg) end BasicRules.cast_to_value(self.instance_exec(*(args + [blk]), &block)) end end |