Class: Synvert::Core::NodeQuery::Compiler::DynamicAttribute

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/synvert/core/node_query/compiler/dynamic_attribute.rb

Overview

DynamicAttribute represents a ruby dynamic attribute. e.g. code is { a: a }, query is '.hash > .pair[key={{value}}]', {{value}} is the dynamic attribute.

Constant Summary

Constants included from Comparable

Comparable::ARRAY_VALID_OPERATORS, Comparable::NUMBER_VALID_OPERATORS, Comparable::REGEXP_VALID_OPERATORS, Comparable::SIMPLE_VALID_OPERATORS, Comparable::STRING_VALID_OPERATORS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Comparable

#match?, #valid_operator?

Constructor Details

#initialize(value:) ⇒ DynamicAttribute

Initialize a DynamicAttribute.

Parameters:

  • value (String)

    the dynamic attribute value



14
15
16
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 14

def initialize(value:)
  @value = value
end

Instance Attribute Details

#base_nodeObject

Returns the value of attribute base_node.



10
11
12
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 10

def base_node
  @base_node
end

Instance Method Details

#actual_value(node) ⇒ String

Get the actual value of a node.

Parameters:

  • node

    the node

Returns:



22
23
24
25
26
27
28
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 22

def actual_value(node)
  if node.is_a?(::Parser::AST::Node)
    node.to_source
  else
    node
  end
end

#expected_valueString

Get the expected value.

Returns:

  • (String)

    Query the node by @valud from base_node, if the node is a Parser::AST::Node, return the node source code, otherwise return the node itself.



33
34
35
36
37
38
39
40
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 33

def expected_value
  node = base_node.child_node_by_name(@value)
  if node.is_a?(::Parser::AST::Node)
    node.to_source
  else
    node
  end
end

#to_sObject



47
48
49
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 47

def to_s
  "{{#{@value}}}"
end

#valid_operatorsObject

Get valid operators.



43
44
45
# File 'lib/synvert/core/node_query/compiler/dynamic_attribute.rb', line 43

def valid_operators
  SIMPLE_VALID_OPERATORS
end