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 +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
|