Module: Kumi::Core::Compiler::AccessEmit::Read

Extended by:
Base
Defined in:
lib/kumi/core/compiler/access_emit/read.rb

Class Method Summary collapse

Methods included from Base

array_guard_code, build_array_miss_action, build_miss_action, fetch_hash_code, segment_ops

Class Method Details

.build(plan) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/kumi/core/compiler/access_emit/read.rb', line 9

def build(plan)
  policy     = plan.on_missing || :error
  key_policy = plan.key_policy || :indifferent
  path_key   = plan.path
  ops        = plan.operations

  body = ops.map do |op|
    case op[:type]
    when :enter_hash
      fetch_hash_code(node_var: "node", key: op[:key], key_policy: key_policy,
                      preview_array: false, mode: :read, policy: policy,
                      path_key: path_key, map_depth: 0)
    when :enter_array
      %(raise TypeError, "Array encountered in :read accessor at '#{path_key}'")
    end
  end.join("\n      ")

  "    lambda do |data|\n      node = data\n      \#{body}\n      node\n    end\n  RUBY\nend\n"