Class: IgniterLang::TemporalAccessRuntime::RuntimeMachineHook

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter_lang/temporal_access_runtime.rb

Instance Method Summary collapse

Constructor Details

#initialize(backend:, capabilities: nil) ⇒ RuntimeMachineHook

Returns a new instance of RuntimeMachineHook.



120
121
122
123
124
# File 'lib/igniter_lang/temporal_access_runtime.rb', line 120

def initialize(backend:, capabilities: nil)
  @backend = backend
  @capabilities = Array(capabilities || infer_capabilities(backend))
  @evaluator = SemanticIRTemporalAccessEvaluator.new(backend)
end

Instance Method Details

#evaluate(access_node, temporal_inputs:, inputs:) ⇒ Object



139
140
141
142
143
144
145
# File 'lib/igniter_lang/temporal_access_runtime.rb', line 139

def evaluate(access_node, temporal_inputs:, inputs:)
  input_node = temporal_inputs.fetch(access_node.fetch("source_ref"))
  axis = Capabilities.axis_for(access_node, input_node)
  ensure_capabilities!(Capabilities.for_axis(axis), access_node)
  ensure_backend_contract!(axis)
  @evaluator.evaluate(access_node, temporal_inputs: temporal_inputs, inputs: inputs)
end

#load_check(contract:, requirements: {}) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/igniter_lang/temporal_access_runtime.rb', line 126

def load_check(contract:, requirements: {})
  nodes = contract.fetch("nodes", [])
  temporal_inputs = temporal_inputs_for(nodes)
  checks = nodes
    .select { |node| node.fetch("kind") == "temporal_access_node" }
    .map { |node| load_check_node(node, temporal_inputs, requirements) }
  {
    "kind" => "temporal_access_hook_load_check",
    "status" => checks.all? { |check| check.fetch("status") == "ok" } ? "ok" : "blocked",
    "checks" => checks
  }
end