Class: DecisionAgent::Dmn::Feel::Transformer
- Inherits:
-
Parslet::Transform
- Object
- Parslet::Transform
- DecisionAgent::Dmn::Feel::Transformer
- Defined in:
- lib/decision_agent/dmn/feel/transformer.rb
Overview
Transforms Parslet parse tree into AST
Class Method Summary collapse
-
.apply_postfix_op(current, op) ⇒ Object
Apply a single postfix operation to the current AST node.
-
.extract_entry_key(key_node) ⇒ Object
Extract a context entry key from various node representations.
-
.extract_name(name_node) ⇒ Object
Extract a name string from a node that may be a Hash or raw value.
-
.extract_variable_name(var_node) ⇒ Object
Extract variable name from a potentially transformed node.
Class Method Details
.apply_postfix_op(current, op) ⇒ Object
Apply a single postfix operation to the current AST node
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/decision_agent/dmn/feel/transformer.rb', line 34 def self.apply_postfix_op(current, op) return current unless op.is_a?(Hash) if op[:property_access] { type: :property_access, object: current, property: op[:property_access][:property][:identifier].to_s } elsif op[:function_call] { type: :function_call, name: current, arguments: op[:function_call][:arguments] || [] } elsif op[:filter] { type: :filter, list: current, condition: op[:filter][:filter] } else current end end |
.extract_entry_key(key_node) ⇒ Object
Extract a context entry key from various node representations
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/decision_agent/dmn/feel/transformer.rb', line 12 def self.extract_entry_key(key_node) return key_node.to_s if key_node.is_a?(Parslet::Slice) return key_node.to_s unless key_node.is_a?(Hash) case key_node[:type] when :field then key_node[:name].to_s when :string then key_node[:value].to_s when :identifier then key_node[:name].to_s else key_node[:identifier]&.to_s || key_node[:string]&.to_s || key_node.to_s end end |
.extract_name(name_node) ⇒ Object
Extract a name string from a node that may be a Hash or raw value
26 27 28 29 30 31 |
# File 'lib/decision_agent/dmn/feel/transformer.rb', line 26 def self.extract_name(name_node) return name_node.to_s.strip unless name_node.is_a?(Hash) return name_node[:name].to_s.strip if name_node[:type] == :field name_node[:identifier]&.to_s&.strip || name_node.to_s end |
.extract_variable_name(var_node) ⇒ Object
Extract variable name from a potentially transformed node
49 50 51 52 53 54 55 56 57 |
# File 'lib/decision_agent/dmn/feel/transformer.rb', line 49 def self.extract_variable_name(var_node) if var_node.is_a?(Hash) && var_node[:type] == :field var_node[:name] elsif var_node.is_a?(Hash) && var_node[:identifier] var_node[:identifier].to_s else var_node.to_s end end |