plunk 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5505fcd0ad4d40a7f6194b21fb79117bafd55ff
4
- data.tar.gz: 77bab32e0ebb6e0abf15f77878b12741e2e1f4fe
3
+ metadata.gz: 4aa7d1a015e39272fa148c9fa5c1444c54d73ef2
4
+ data.tar.gz: 25dc10cf92e207b31ffaf872ecff020c9c9f2b5e
5
5
  SHA512:
6
- metadata.gz: 754126eedfa73415b97280dc2aba93c54d359b721adac035563ed3d98e2820698c57a8ca64e7c5c05d6fb729a9452f8d503ffd6e1b5534d9da66b0615c82f21a
7
- data.tar.gz: f400be0e7a58b4cd1b39381e167fd2a96941b26a617cef3b8dcdcd0d36e16f8e64025ed9f85a1890c9e6752f84b02f84d07482a8b27c6c496f3a252b729327c4
6
+ metadata.gz: ec0e2b28fa9734eac3a1e4c20e5e0234da7584d92630415f9f005d7fb31f9c1a76ec2c34ee2f5d472ff926628c74a40581350bdf9a5d21c35d1f4ddbe64f1cde
7
+ data.tar.gz: db9072977470120635367f40d576206c5d67e8b190a4a32a42b128ae4cbcd2271a674ece6a51c0579043e6dcf80ba77990fd3d6f117e453034e5347ca025f77e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- plunk (0.2.8)
4
+ plunk (0.2.9)
5
5
  activesupport
6
6
  elasticsearch
7
7
  json
data/lib/plunk/parser.rb CHANGED
@@ -44,14 +44,16 @@ module Plunk
44
44
  }
45
45
 
46
46
  # Field / value
47
- rule(:identifier) { match('[^=\s]').repeat(1) }
47
+ rule(:identifier) { match('[^=\s)(|]').repeat(1) >> match('[^=\s]').repeat }
48
48
  # possible right-hand side values
49
49
  rule(:wildcard) { match('[^=\s)(|]').repeat(1) }
50
50
  rule(:searchop) { match('[=]').as(:op) }
51
+
51
52
  rule(:query_value) { string | wildcard | datetime | number }
52
53
 
53
54
  # boolean operators search
54
55
  rule(:concatop) { (str('OR') | str('AND')) >> space? }
56
+ rule(:negateop) { str('NOT') >> space? }
55
57
  rule(:operator) { match('[|]').as(:op) >> space? }
56
58
  rule(:timerange) {
57
59
  integer.as(:quantity) >> match('s|m|h|d|w').as(:quantifier)
@@ -63,13 +65,18 @@ module Plunk
63
65
  }
64
66
 
65
67
  rule(:boolean_value) {
66
- booleanparen | query_value
68
+ booleanparen | (negateop.maybe >> query_value)
67
69
  }
68
70
 
69
- rule(:booleanop) {
70
- boolean_value >> (space >> concatop >> boolean_value).repeat
71
+ # AND, OR
72
+ rule(:boolean_logic) {
73
+ space >> concatop >> boolean_value
71
74
  }
72
75
 
76
+ # handles recursion for parentheses and values
77
+ rule(:booleanop) {
78
+ boolean_value >> boolean_logic.repeat
79
+ }
73
80
  rule(:booleanparen) {
74
81
  lparen >> space? >> booleanop >> space? >> rparen
75
82
  }
@@ -88,10 +95,6 @@ module Plunk
88
95
  rhs.as(:value) | rhs.as(:match)
89
96
  }
90
97
 
91
- rule(:binaryop) {
92
- (search | paren).as(:left) >> space? >> operator >> job.as(:right)
93
- }
94
-
95
98
  rule(:subsearch) {
96
99
  str('`') >> space? >> nested_search >> str('`')
97
100
  }
@@ -106,7 +109,7 @@ module Plunk
106
109
  }
107
110
 
108
111
  rule(:job) {
109
- last | search | binaryop | paren
112
+ last | search | paren
110
113
  }
111
114
 
112
115
  rule(:plunk_query) {
data/plunk.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "plunk"
3
- s.version = "0.2.9"
3
+ s.version = "0.2.10"
4
4
  s.add_runtime_dependency "json"
5
5
  s.add_runtime_dependency "parslet"
6
6
  s.add_runtime_dependency "elasticsearch"
data/spec/boolean_spec.rb CHANGED
@@ -14,4 +14,29 @@ describe 'boolean searches' do
14
14
  query: '(foo OR (bar AND baz))'
15
15
  }}}}})
16
16
  end
17
+
18
+ pending 'should parse (foo=bar OR foo=bar)' do
19
+ result = @transformer.apply @parser.parse '(foo=bar OR foo=bar)'
20
+ expect(result.query).to eq({query:{filtered:{query:{query_string:{
21
+ query: '(foo:bar OR foo:bar)'
22
+ }}}}})
23
+ end
24
+
25
+ pending 'should parse foo=bar OR baz=fez' do
26
+ result = @transformer.apply @parser.parse 'foo=bar OR baz=fez'
27
+ expect(result.query).to eq({query:{filtered:{query:{
28
+ query_string:{
29
+ query: 'foo:bar OR baz:fez'
30
+ }},
31
+ }}})
32
+ end
33
+
34
+ pending 'should parse (foo=bar AND baz=fez) OR ham=cheese' do
35
+ result = @transformer.apply @parser.parse '(foo=bar AND baz=fez) OR ham=cheese'
36
+ expect(result.query).to eq({query:{filtered:{query:{
37
+ query_string:{
38
+ query: '(foo:bar AND baz:fez) OR ham:cheese'
39
+ }},
40
+ }}})
41
+ end
17
42
  end
@@ -35,4 +35,11 @@ describe 'field / value searches' do
35
35
  query: 'foo:bar-baz'
36
36
  }}}}})
37
37
  end
38
+
39
+ it 'should parse foo=(NOT bar)' do
40
+ result = @transformer.apply @parser.parse 'foo=(NOT bar)'
41
+ expect(result.query).to eq({query:{filtered:{query:{query_string:{
42
+ query: 'foo:(NOT bar)'
43
+ }}}}})
44
+ end
38
45
  end
data/spec/regexp_spec.rb CHANGED
@@ -14,4 +14,11 @@ describe 'regexp searches' do
14
14
  query: 'foo:/blah\/ foo/'
15
15
  }}}}})
16
16
  end
17
+
18
+ it 'should parse foo=/blah\. foo/' do
19
+ result = @transformer.apply @parser.parse('foo=/blah\. foo/')
20
+ expect(result.query).to eq({query:{filtered:{query:{query_string:{
21
+ query: 'foo:/blah\. foo/'
22
+ }}}}})
23
+ end
17
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plunk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ram Mehta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-06 00:00:00.000000000 Z
12
+ date: 2014-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json