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 message(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