Module: TogoStanza::Stanza::ExpressionMap::Macro

Included in:
Base
Defined in:
lib/togostanza/stanza/expression_map.rb

Instance Method Summary collapse

Instance Method Details

#define_expression_map(name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/togostanza/stanza/expression_map.rb', line 9

def define_expression_map(name)
  class_attribute name

  __send__ "#{name}=", ExpressionMap.new

  define_singleton_method name.to_s.singularize do |key, val = nil, &block|
    raise ArgumentError, 'You must specify exactly one of either a value or block' unless [val, block].one?(&:nil?)

    __send__ "#{name}=", __send__(name).merge(key => block || val)
  end
end