Class: TogoStanza::Stanza::ExpressionMap

Inherits:
HashWithIndifferentAccess
  • Object
show all
Defined in:
lib/togostanza/stanza/expression_map.rb

Defined Under Namespace

Modules: Macro

Instance Method Summary collapse

Instance Method Details

#resolve(context, key, params) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/togostanza/stanza/expression_map.rb', line 22

def resolve(context, key, params)
  val = self[key]

  return val unless val.respond_to?(:call)

  args = val.parameters.reject {|type, _|
    type == :block
  }.map {|_, key|
    params[key]
  }

  context.instance_exec(*args, &val)
end

#resolve_all_in_parallel(context, params) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/togostanza/stanza/expression_map.rb', line 36

def resolve_all_in_parallel(context, params)
  Parallel.map(self, in_threads: 16) {|k, v|
    [k, resolve(context, k, params)]
  }.each_with_object({}) {|(k, v), memo|
    memo[k] = v
  }
end