diff options
author | Reverite <github@reverite.sh> | 2019-07-31 01:41:31 -0700 |
---|---|---|
committer | Reverite <github@reverite.sh> | 2019-07-31 01:41:31 -0700 |
commit | 7a312a38f904e853f5703a0b678d0aec83fa858c (patch) | |
tree | eba4b787f6a617e1c2c5f7d4b5be66320212be1d /app/lib/search_query_parser.rb | |
parent | 3013c6cb78358ed8a95a35d5db79608fcb06963f (diff) | |
parent | 4ecfa8f298399d9857737f212fc8f5767ffa7c6d (diff) |
Merge branch 'glitch' into production
Diffstat (limited to 'app/lib/search_query_parser.rb')
-rw-r--r-- | app/lib/search_query_parser.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/app/lib/search_query_parser.rb b/app/lib/search_query_parser.rb new file mode 100644 index 000000000..405ad15b8 --- /dev/null +++ b/app/lib/search_query_parser.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class SearchQueryParser < Parslet::Parser + rule(:term) { match('[^\s":]').repeat(1).as(:term) } + rule(:quote) { str('"') } + rule(:colon) { str(':') } + rule(:space) { match('\s').repeat(1) } + rule(:operator) { (str('+') | str('-')).as(:operator) } + rule(:prefix) { (term >> colon).as(:prefix) } + rule(:phrase) { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) } + rule(:clause) { (prefix.maybe >> operator.maybe >> (phrase | term)).as(:clause) } + rule(:query) { (clause >> space.maybe).repeat.as(:query) } + root(:query) +end |