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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/plunk/parser.rb +12 -9
- data/plunk.gemspec +1 -1
- data/spec/boolean_spec.rb +25 -0
- data/spec/field_value_spec.rb +7 -0
- data/spec/regexp_spec.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4aa7d1a015e39272fa148c9fa5c1444c54d73ef2
|
4
|
+
data.tar.gz: 25dc10cf92e207b31ffaf872ecff020c9c9f2b5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec0e2b28fa9734eac3a1e4c20e5e0234da7584d92630415f9f005d7fb31f9c1a76ec2c34ee2f5d472ff926628c74a40581350bdf9a5d21c35d1f4ddbe64f1cde
|
7
|
+
data.tar.gz: db9072977470120635367f40d576206c5d67e8b190a4a32a42b128ae4cbcd2271a674ece6a51c0579043e6dcf80ba77990fd3d6f117e453034e5347ca025f77e
|
data/Gemfile.lock
CHANGED
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
|
-
|
70
|
-
|
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 |
|
112
|
+
last | search | paren
|
110
113
|
}
|
111
114
|
|
112
115
|
rule(:plunk_query) {
|
data/plunk.gemspec
CHANGED
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
|
data/spec/field_value_spec.rb
CHANGED
@@ -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.
|
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-
|
12
|
+
date: 2014-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|