From 2bf8f95896a53f4b9fbec0b4d52140b7996ba6b8 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Thu, 23 Jan 2020 23:00:16 +0100 Subject: [PATCH] add simple grammar rules and tests for simple cases --- grammar.y | 11 ++++++++++- spec/query_parser_spec.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/grammar.y b/grammar.y index 72d6f25..7c8657c 100644 --- a/grammar.y +++ b/grammar.y @@ -1,8 +1,17 @@ class Query rule - expression: + target: expression + | /* none */ { result = 0 } + + expression: TERM_WITHOUT_QUOTES { result = {:DEFAULT_COLUMN => val[0]} } + | TERM_WITH_QUOTES { result = {:DEFAULT_COLUMN => val[0]} } + | TERM_WITHOUT_QUOTES COLON TERM_WITHOUT_QUOTES { result = {val[0] => val[2]} } + | TERM_WITHOUT_QUOTES COLON TERM_WITH_QUOTES { result = {val[0] => val[2]} } end +---- header + require_relative 'lexer' + ---- inner def parse(input) scan_str(input) diff --git a/spec/query_parser_spec.rb b/spec/query_parser_spec.rb index a314de2..8e2de5b 100644 --- a/spec/query_parser_spec.rb +++ b/spec/query_parser_spec.rb @@ -5,5 +5,31 @@ class QueryParserTester before do @evaluator = Query.new end + + it 'tests query with only one search term without quotes and without column name' do + @result = @evaluator.parse('-123') + + expect(@result[:DEFAULT_COLUMN]).to eq '-123' + end + + it 'tests query with only one search term with quotes and without column name' do + @result = @evaluator.parse('"OR 128"') + + expect(@result[:DEFAULT_COLUMN]).to eq '"OR 128"' + end + + it 'tests query with one column and search term without quotes' do + @result = @evaluator.parse('tag:mta') + + expect(@result['tag']).to eq 'mta' + end + + it 'tests query with one column and search term with quotes' do + @result = @evaluator.parse('tag:"tag 120"') + + expect(@result['tag']).to eq '"tag 120"' + end + + end end