File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ query-parser
Original file line number Diff line number Diff line change 1+ 2.4.0
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+ source "https://rubygems.org"
3+
4+ gem 'parslet'
5+ gem 'minitest'
6+ gem 'awesome_print'
7+ gem 'pry'
Original file line number Diff line number Diff line change 1+ GEM
2+ remote: https://rubygems.org/
3+ specs:
4+ awesome_print (1.7.0 )
5+ blankslate (3.1.3 )
6+ coderay (1.1.1 )
7+ method_source (0.8.2 )
8+ minitest (5.10.1 )
9+ parslet (1.7.1 )
10+ blankslate (>= 2.0 , <= 4.0 )
11+ pry (0.10.4 )
12+ coderay (~> 1.1.0 )
13+ method_source (~> 0.8.1 )
14+ slop (~> 3.4 )
15+ slop (3.6.0 )
16+
17+ PLATFORMS
18+ ruby
19+
20+ DEPENDENCIES
21+ awesome_print
22+ minitest
23+ parslet
24+ pry
25+
26+ BUNDLED WITH
27+ 1.14.6
Original file line number Diff line number Diff line change 1+ require 'parslet'
2+
3+ class TermParser < Parslet ::Parser
4+ rule ( :term ) { match ( '[a-zA-Z0-9]' ) . repeat ( 1 ) }
5+ rule ( :space ) { match ( '\s' ) . repeat ( 1 ) }
6+ rule ( :query ) { ( term . as ( :term ) >> ( space >> term . as ( :term ) ) . repeat ) . as ( :query ) }
7+ root ( :query )
8+ end
9+
10+ class TermTransformer < Parslet ::Transform
11+ rule ( :term => simple ( :term ) ) { term . to_s }
12+ rule ( :query => sequence ( :terms ) ) { TermQuery . new ( terms ) }
13+ end
14+
15+ # A query represented by a list of parsed user terms
16+ class TermQuery
17+ attr_accessor :terms
18+
19+ def initialize ( terms )
20+ self . terms = terms
21+ end
22+
23+ def to_elasticsearch
24+ {
25+ :query => {
26+ :match => {
27+ :title => {
28+ :query => terms . join ( " " ) ,
29+ :operator => "or"
30+ }
31+ }
32+ }
33+ }
34+ end
35+ end
Original file line number Diff line number Diff line change 1+ require_relative 'term_parser'
2+ require 'minitest/autorun'
3+ require 'awesome_print'
4+
5+ class ParserTests < Minitest ::Test
6+ def test_term_parser
7+ tree = TermParser . new . parse ( "foo bar baz" )
8+ ap tree
9+
10+ term_query = TermTransformer . new . apply ( tree )
11+ ap term_query . to_elasticsearch
12+ end
13+ end
You can’t perform that action at this time.
0 commit comments