Module: OOP::ValueCommunications::ClassMethods

Defined in:
lib/oop/value_communications.rb

Instance Method Summary collapse

Instance Method Details

#get_value_casterObject



61
62
63
# File 'lib/oop/value_communications.rb', line 61

def get_value_caster
  @value_caster || BasicRules.new
end

#get_value_providerObject



58
59
60
# File 'lib/oop/value_communications.rb', line 58

def get_value_provider
  @value_provider || ValueProvider.new
end

#import(*imports) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/oop/value_communications.rb', line 22

def import(*imports)
  imports.each do |import|
    define_method(import.to_sym) do
      value_provider.send(import)
    end
  end
end

#message(meth, &block) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/oop/value_communications.rb', line 13

def message(meth, &block)
  define_method(meth) do |*args, &blk|
    args = args.map do |arg|
      value_caster.cast_to_value(arg)
    end
    value_caster.cast_to_value(self.instance_exec(*(args + [blk]), &block))
  end
end

#value_caster(new_caster) ⇒ Object



7
8
9
# File 'lib/oop/value_communications.rb', line 7

def value_caster(new_caster)
  @value_caster = new_caster
end

#value_contructor(rules, *parts, &block) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/oop/value_communications.rb', line 30

def value_contructor(rules, *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[rules.cast_to_value(k)] = rules.cast_to_value(v)
    end
  end
  parts.each do |p|
    define_method(p.to_sym) do
      @opts[p]
    end
  end
end

#value_provider(new_provider) ⇒ Object



10
11
12
# File 'lib/oop/value_communications.rb', line 10

def value_provider(new_provider)
  @value_provider = new_provider
end