Class: ActiveDynamo::Query::QueryGenerator::Lexer
- Inherits:
-
Object
- Object
- ActiveDynamo::Query::QueryGenerator::Lexer
- Defined in:
- lib/active_dynamo/query/query_generator.rb
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(query) ⇒ Lexer
constructor
S -> PARTION_EXPRESSION SORT_EXPRESSION FILTER_EXPRESSION $ PARTION_EXPRESSION -> partition_key = :value SORT_EXPRESSION -> ‘and’ sort_key = :value | E FILTER_EXPRESSION -> ‘and’ (SINGLE_EXPRESSION | DOUBLE_EXPRESSION) FILTER_EXPRESSION | E SINGLE_EXPRESSION -> key (=|<|>|<=|>=) :value DOUBLE_EXPRESSION -> key ‘BETWEEN’ :value1 ‘AND’ :value2.
Constructor Details
#initialize(query) ⇒ Lexer
S -> PARTION_EXPRESSION SORT_EXPRESSION FILTER_EXPRESSION $ PARTION_EXPRESSION -> partition_key = :value SORT_EXPRESSION -> ‘and’ sort_key = :value | E FILTER_EXPRESSION -> ‘and’ (SINGLE_EXPRESSION | DOUBLE_EXPRESSION) FILTER_EXPRESSION | E SINGLE_EXPRESSION -> key (=|<|>|<=|>=) :value DOUBLE_EXPRESSION -> key ‘BETWEEN’ :value1 ‘AND’ :value2
83 84 85 86 |
# File 'lib/active_dynamo/query/query_generator.rb', line 83 def initialize(query) @query = query @tokens = [] end |
Instance Method Details
#call ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/active_dynamo/query/query_generator.rb', line 88 def call grammar = [ /(?<key>[\w\d_.-]+)\s*(?<op>BETWEEN)\s*(?<value1>[\w\d_.-]+)\s*AND\s*(?<value2>[\w\d_.-]+)/, /(?<key>[\w\d_.-]+)\s*(?<op>(>=|<=|>|<))\s*(?<value>[\w\d_.-]+)/, /(?<key>[\w\d_.-]+)\s*(?<op>(=))\s*(?<value>[\w\d_.-]+)/ ] @query.split('and').each do |sub_query| grammar.each do |g| if g.match(sub_query) @tokens << g.match(sub_query).named_captures break end end end @tokens end |