Module: ApiQueryLanguage::Filtering::FilterParserHelper

Defined in:
lib/api_query_language/filtering/filter_parser_helper.rb

Instance Method Summary collapse

Instance Method Details

#lexerObject



6
7
8
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 6

def lexer
  @lexer ||= ExpressionLexer.new
end

#parse_condition(tokens) ⇒ Object



30
31
32
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 30

def parse_condition(tokens)
  Nodes::Conditions.new(nodes: tokens)
end

#parse_condition_field(tokens) ⇒ Object



53
54
55
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 53

def parse_condition_field(tokens)
  Nodes::Field.new(field: tokens.first, value: tokens.last)
end

#parse_condition_field_with_comparison(tokens) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 38

def parse_condition_field_with_comparison(tokens)
  field, comparison = tokens.first
  Nodes::FieldComparison.new(
    field:,
    comparison:,
    value: parse_value_expression(
      [
        parse_encoded_value(
          [tokens.last]
        )
      ]
    )
  )
end

#parse_condition_not(tokens) ⇒ Object



34
35
36
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 34

def parse_condition_not(tokens)
  Nodes::ConditionsNot.new(node: tokens[1])
end

#parse_condition_null_field(tokens) ⇒ Object



57
58
59
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 57

def parse_condition_null_field(tokens)
  Nodes::Field.new(field: tokens.first, value: Nodes::Value.new(value: nil))
end

#parse_conditions_and(tokens) ⇒ Object



22
23
24
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 22

def parse_conditions_and(tokens)
  Nodes::ConditionsAnd.new(nodes: [tokens.first, tokens.last])
end

#parse_conditions_group(tokens) ⇒ Object



18
19
20
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 18

def parse_conditions_group(tokens)
  Nodes::ConditionsGroup.new(nodes: tokens[1..-2])
end

#parse_conditions_or(tokens) ⇒ Object



26
27
28
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 26

def parse_conditions_or(tokens)
  Nodes::ConditionsOr.new(nodes: [tokens.first, tokens.last])
end

#parse_encoded_value(tokens) ⇒ Object



79
80
81
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 79

def parse_encoded_value(tokens)
  Nodes::Value.new(value: tokens.first)
end

#parse_encoded_value_wildcard(tokens) ⇒ Object



83
84
85
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 83

def parse_encoded_value_wildcard(tokens)
  Nodes::ValueWithWildcard.new(parts: tokens)
end

#parse_error_contextObject



10
11
12
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 10

def parse_error_context
  " at position #{lexer.ss.pos + 1}. Did you forget to encode the value?"
end

#parse_query(tokens) ⇒ Object



14
15
16
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 14

def parse_query(tokens)
  Nodes::Root.new(node: tokens.first)
end

#parse_value_expression(tokens) ⇒ Object



75
76
77
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 75

def parse_value_expression(tokens)
  Nodes::ValueExpression.new(nodes: tokens)
end

#parse_value_expression_and(tokens) ⇒ Object



68
69
70
71
72
73
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 68

def parse_value_expression_and(tokens)
  Nodes::ValueExpressionAnd.new(nodes: [
    tokens.first,
    tokens.last
  ])
end

#parse_value_expression_or(tokens) ⇒ Object



61
62
63
64
65
66
# File 'lib/api_query_language/filtering/filter_parser_helper.rb', line 61

def parse_value_expression_or(tokens)
  Nodes::ValueExpressionOr.new(nodes: [
    tokens.first,
    tokens.last
  ])
end