plunk 0.2.9 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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