plunk 0.2.11 → 0.3.1

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.
data/plunk.gemspec CHANGED
@@ -1,16 +1,16 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "plunk"
3
- s.version = "0.2.11"
4
- s.add_runtime_dependency "json"
5
- s.add_runtime_dependency "parslet"
6
- s.add_runtime_dependency "elasticsearch"
7
- s.add_runtime_dependency "activesupport"
8
- s.add_development_dependency "rspec"
9
- s.add_development_dependency "timecop"
3
+ s.version = "0.3.1"
4
+ s.add_runtime_dependency "json", "~> 1.8", ">= 1.8.0"
5
+ s.add_runtime_dependency "parslet", "~> 1.5", ">= 1.5.0"
6
+ s.add_runtime_dependency "elasticsearch", "~> 0.4", ">= 0.4.3"
7
+ s.add_runtime_dependency "activesupport", "~> 4.0", ">= 4.0.0"
8
+ s.add_development_dependency "rspec", "~> 2.0", ">= 2.14.1"
9
+ s.add_development_dependency "timecop", "~> 0.7", ">= 0.7.1"
10
10
  s.summary = "Elasticsearch query language"
11
11
  s.description = "Human-friendly query language for Elasticsearch"
12
- s.authors = ["Ram Mehta", "Jamil Bou Kheir"]
13
- s.email = ["ram.mehta@gmail.com", "jamil@elbii.com"]
12
+ s.authors = ["Ram Mehta", "Jamil Bou Kheir", "Roman Heinrich"]
13
+ s.email = ["ram.mehta@gmail.com", "jamil@elbii.com", "roman.heinrich@gmail.com"]
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.homepage = "https://github.com/elbii/plunk"
16
16
  s.license = "MIT"
data/spec/basic_spec.rb CHANGED
@@ -1,17 +1,39 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'basic searches' do
4
+ def basic_builder(expected)
5
+ {
6
+ query: {
7
+ filtered: {
8
+ filter: {
9
+ query: {
10
+ query_string: {
11
+ query: expected
12
+ }
13
+ }
14
+ }
15
+ }
16
+ }
17
+ }
18
+ end
19
+
4
20
  it 'should parse bar' do
5
- result = @transformer.apply @parser.parse('bar')
6
- result.query.should eq({query:{filtered:{query:{query_string:{
7
- query: 'bar'
8
- }}}}})
21
+ result = Plunk.search 'bar'
22
+ result.should eq(basic_builder('bar'))
23
+ end
24
+
25
+ it 'should parse bar ' do
26
+ result = Plunk.search 'bar '
27
+ result.should eq(basic_builder('bar'))
28
+ end
29
+
30
+ it 'should parse (bar) ' do
31
+ result = Plunk.search '(bar) '
32
+ result.should eq(basic_builder('bar'))
9
33
  end
10
34
 
11
35
  it 'should parse bar ' do
12
- result = @transformer.apply @parser.parse(' bar ')
13
- result.query.should eq({query:{filtered:{query:{query_string:{
14
- query: 'bar'
15
- }}}}})
36
+ result = Plunk.search ' bar '
37
+ result.should eq(basic_builder('bar'))
16
38
  end
17
39
  end
data/spec/boolean_spec.rb CHANGED
@@ -1,42 +1,88 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'boolean searches' do
4
+
4
5
  it 'should parse (foo OR bar)' do
5
- result = @transformer.apply @parser.parse '(foo OR bar)'
6
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
7
- query: '(foo OR bar)'
8
- }}}}})
6
+ result = Plunk.search '(foo OR bar)'
7
+ expected = Plunk::Helper.filter_builder({
8
+ or: [
9
+ Plunk::Helper.query_builder('foo'),
10
+ Plunk::Helper.query_builder('bar')
11
+ ]
12
+ })
13
+ expect(result).to eq(expected)
14
+ end
15
+
16
+ it 'should parse (foo | bar)' do
17
+ result = Plunk.search '(foo | bar)'
18
+ expected = Plunk::Helper.filter_builder({
19
+ or: [
20
+ Plunk::Helper.query_builder('foo'),
21
+ Plunk::Helper.query_builder('bar')
22
+ ]
23
+ })
24
+ expect(result).to eq(expected)
9
25
  end
10
26
 
11
27
  it 'should parse (foo OR (bar AND baz))' do
12
- result = @transformer.apply @parser.parse '(foo OR (bar AND baz))'
13
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
14
- query: '(foo OR (bar AND baz))'
15
- }}}}})
28
+ result = Plunk.search '(foo OR (bar AND baz))'
29
+ expected = Plunk::Helper.filter_builder({
30
+ or: [
31
+ Plunk::Helper.query_builder('foo'),
32
+ {
33
+ and: [
34
+ Plunk::Helper.query_builder('bar'),
35
+ Plunk::Helper.query_builder('baz')
36
+ ]
37
+ }
38
+ ]
39
+ })
40
+ expect(result).to eq(expected)
41
+ end
42
+
43
+ it 'should parse (foo=bar OR foo=bar)' do
44
+ result = Plunk.search '(foo=bar OR foo=bar)'
45
+ expected = Plunk::Helper.filter_builder({
46
+ or: [
47
+ Plunk::Helper.query_builder('foo:bar'),
48
+ Plunk::Helper.query_builder('foo:bar')
49
+ ]
50
+ })
51
+ expect(result).to eq(expected)
16
52
  end
17
53
 
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
- }}}}})
54
+ it 'should parse foo=bar OR baz=fez' do
55
+ result = Plunk.search 'foo=bar OR baz=fez'
56
+ expected = Plunk::Helper.filter_builder({
57
+ or: [
58
+ Plunk::Helper.query_builder('foo:bar'),
59
+ Plunk::Helper.query_builder('baz:fez')
60
+ ]
61
+ })
62
+ expect(result).to eq(expected)
23
63
  end
24
64
 
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
- }}})
65
+ it 'should parse (foo=bar AND baz=fez) OR ham=cheese' do
66
+ result = Plunk.search '(foo=bar AND baz=fez) OR ham=cheese'
67
+ expected = Plunk::Helper.filter_builder({
68
+ or: [
69
+ {
70
+ and: [
71
+ Plunk::Helper.query_builder('foo:bar'),
72
+ Plunk::Helper.query_builder('baz:fez')
73
+ ]
74
+ },
75
+ Plunk::Helper.query_builder('ham:cheese')
76
+ ]
77
+ })
78
+ expect(result).to eq(expected)
32
79
  end
33
80
 
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
- }}})
81
+ it 'should parse NOT foo=bar' do
82
+ result = Plunk.search 'NOT foo=bar'
83
+ expected = Plunk::Helper.filter_builder({
84
+ not: Plunk::Helper.query_builder('foo:bar')
85
+ })
86
+ expect(result).to eq(expected)
41
87
  end
42
88
  end
@@ -6,51 +6,43 @@ describe 'chained searches' do
6
6
  include_context "time stubs"
7
7
  include_context "plunk stubs"
8
8
 
9
- it 'should parse last 24h foo_type=bar baz="fez" host=27.224.123.110' do
10
- parsed = @parser.parse 'last 24h foo_type=bar baz="fez" host=27.224.123.110'
11
- result = @transformer.apply parsed
12
- expect(result.query).to eq({query:{filtered:{query:{
13
- query_string: {
14
- query: 'foo_type:bar'
15
- }},
16
- filter: {
17
- and: [{
18
- range: {
19
- :@timestamp => {
20
- gte: (@time - 24.hours).utc.to_datetime.iso8601(3),
21
- lte: @time.utc.to_datetime.iso8601(3)
22
- }
23
- }},
24
- {query:{query_string: {
25
- query: 'baz:"fez"'
26
- }}},
27
- {query:{query_string: {
28
- query: 'host:27.224.123.110'
29
- }}}
30
- ]}}}})
9
+ it 'should parse last 24h & foo_type=bar & baz="fez" & host=27.224.123.110' do
10
+ result = Plunk.search 'last 24h & foo_type=bar & baz="fez" & host=27.224.123.110'
11
+ expected = Plunk::Helper.filter_builder({
12
+ and: [
13
+ Plunk::Helper.range_builder(
14
+ (@time - 24.hours).utc.to_datetime.iso8601(3),
15
+ @time.utc.to_datetime.iso8601(3)
16
+ ),
17
+ { and: [
18
+ Plunk::Helper.query_builder('foo_type:bar'),
19
+ { and: [
20
+ Plunk::Helper.query_builder('baz:"fez"'),
21
+ Plunk::Helper.query_builder('host:27.224.123.110')
22
+ ]}
23
+ ]}
24
+ ]
25
+ })
26
+ expect(result).to eq(expected)
31
27
  end
32
28
 
33
- pending 'should parse last 24h (foo_type=bar AND baz="fez" AND host=27.224.123.110)' do
34
- parsed = @parser.parse 'last 24h (foo_type=bar AND baz="fez" AND host=27.224.123.110)'
35
- result = @transformer.apply parsed
36
- expect(result.query).to eq({query:{filtered:{query:{
37
- query_string: {
38
- query: 'foo_type:bar'
39
- }},
40
- filter: {
41
- and: [{
42
- range: {
43
- :timestamp => {
44
- gte: (@time - 1.day).utc.to_datetime.iso8601(3),
45
- lte: @time.utc.to_datetime.iso8601(3)
46
- }
47
- }},
48
- {query:{query_string: {
49
- query: 'baz:fez'
50
- }}},
51
- {query:{query_string: {
52
- query: 'host:27.224.123.110'
53
- }}}
54
- ]}}}})
29
+ it 'should parse last 24h & (foo_type=bar AND baz="fez" AND host=27.224.123.110)' do
30
+ result = Plunk.search 'last 24h & (foo_type=bar AND baz="fez" AND host=27.224.123.110)'
31
+ expected = Plunk::Helper.filter_builder({
32
+ and: [
33
+ Plunk::Helper.range_builder(
34
+ (@time - 24.hours).utc.to_datetime.iso8601(3),
35
+ @time.utc.to_datetime.iso8601(3)
36
+ ),
37
+ { and: [
38
+ Plunk::Helper.query_builder('foo_type:bar'),
39
+ { and: [
40
+ Plunk::Helper.query_builder('baz:"fez"'),
41
+ Plunk::Helper.query_builder('host:27.224.123.110')
42
+ ]}
43
+ ]}
44
+ ]
45
+ })
46
+ expect(result).to eq(expected)
55
47
  end
56
48
  end
@@ -1,45 +1,44 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'field / value searches' do
4
- it 'should parse a _foo.@bar=baz' do
5
- result = @transformer.apply @parser.parse('_foo.@bar=baz')
6
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
7
- query: '_foo.@bar:baz'
8
- }}}}})
4
+
5
+ it 'should parse _foo.@bar=baz' do
6
+ result = Plunk.search '_foo.@bar=baz'
7
+ expected = Plunk::Helper.filter_builder(
8
+ Plunk::Helper.query_builder('_foo.@bar:baz')
9
+ )
10
+ expect(result).to eq(expected)
9
11
  end
10
12
 
11
- it 'should parse a _foo.@bar=(baz)' do
12
- result = @transformer.apply @parser.parse('_foo.@bar=(baz)')
13
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
14
- query: '_foo.@bar:(baz)'
15
- }}}}})
13
+ it 'should parse _foo.@bar=(baz)' do
14
+ result = Plunk.search '_foo.@bar=(baz)'
15
+ expected = Plunk::Helper.filter_builder(
16
+ Plunk::Helper.query_builder('_foo.@bar:(baz)')
17
+ )
18
+ expect(result).to eq(expected)
16
19
  end
17
20
 
18
21
  it 'should parse _foo.@fields.@bar="bar baz"' do
19
- result = @transformer.apply @parser.parse '_foo.@fields.@bar="bar baz"'
20
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
21
- query: '_foo.@fields.@bar:"bar baz"'
22
- }}}}})
22
+ result = Plunk.search '_foo.@fields.@bar="bar baz"'
23
+ expected = Plunk::Helper.filter_builder(
24
+ Plunk::Helper.query_builder('_foo.@fields.@bar:"bar baz"')
25
+ )
26
+ expect(result).to eq(expected)
23
27
  end
24
28
 
25
29
  it 'should parse _foo-barcr@5Y_+f!3*(name=bar' do
26
- result = @transformer.apply @parser.parse '_foo-barcr@5Y_+f!3*(name=bar'
27
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
28
- query: '_foo-barcr@5Y_+f!3*(name:bar'
29
- }}}}})
30
+ result = Plunk.search '_foo-barcr@5Y_+f!3*(name=bar'
31
+ expected = Plunk::Helper.filter_builder(
32
+ Plunk::Helper.query_builder('_foo-barcr@5Y_+f!3*(name:bar')
33
+ )
34
+ expect(result).to eq(expected)
30
35
  end
31
36
 
32
37
  it 'should parse foo=bar-baz' do
33
- result = @transformer.apply @parser.parse 'foo=bar-baz'
34
- expect(result.query).to eq({query:{filtered:{query:{query_string:{
35
- query: 'foo:bar-baz'
36
- }}}}})
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
- }}}}})
38
+ result = Plunk.search 'foo=bar-baz'
39
+ expected = Plunk::Helper.filter_builder(
40
+ Plunk::Helper.query_builder('foo:bar-baz')
41
+ )
42
+ expect(result).to eq(expected)
44
43
  end
45
44
  end
data/spec/last_spec.rb CHANGED
@@ -7,68 +7,71 @@ describe 'the last command' do
7
7
  include_context "plunk stubs"
8
8
 
9
9
  it 'should parse last 24h' do
10
- result = @transformer.apply @parser.parse('last 24h')
11
- expect(result.query.to_s).to eq({query:{filtered:{query:{
12
- range: {
13
- Plunk.timestamp_field => {
14
- gte: (@time - 24.hours).utc.to_datetime.iso8601(3),
15
- lte: @time.utc.to_datetime.iso8601(3)
16
- }}}}}}.to_s)
10
+ result = Plunk.search 'last 24h'
11
+ expected = Plunk::Helper.filter_builder(
12
+ Plunk::Helper.range_builder(
13
+ (@time - 24.hours).utc.to_datetime.iso8601(3),
14
+ @time.utc.to_datetime.iso8601(3)
15
+ )
16
+ )
17
+ expect(result).to eq(expected)
17
18
  end
18
19
 
19
20
  it 'should parse last 24d' do
20
- result = @transformer.apply @parser.parse('last 24d')
21
- expect(result.query.to_s).to eq({query:{filtered:{query:{
22
- range: {
23
- Plunk.timestamp_field => {
24
- gte: (@time - 24.days).utc.to_datetime.iso8601(3),
25
- lte: @time.utc.to_datetime.iso8601(3)
26
- }}}}}}.to_s)
21
+ result = Plunk.search 'last 24d'
22
+ expected = Plunk::Helper.filter_builder(
23
+ Plunk::Helper.range_builder(
24
+ (@time - 24.days).utc.to_datetime.iso8601(3),
25
+ @time.utc.to_datetime.iso8601(3)
26
+ )
27
+ )
28
+ expect(result).to eq(expected)
27
29
  end
28
30
 
29
31
  it 'should parse last 24w' do
30
- result = @transformer.apply @parser.parse('last 24w')
31
- expect(result.query.to_s).to eq({query:{filtered:{query:{
32
- range: {
33
- Plunk.timestamp_field => {
34
- gte: (@time - 24.weeks).utc.to_datetime.iso8601(3),
35
- lte: @time.utc.to_datetime.iso8601(3)
36
- }}}}}}.to_s)
32
+ result = Plunk.search 'last 24w'
33
+ expected = Plunk::Helper.filter_builder(
34
+ Plunk::Helper.range_builder(
35
+ (@time - 24.weeks).utc.to_datetime.iso8601(3),
36
+ @time.utc.to_datetime.iso8601(3)
37
+ )
38
+ )
39
+ expect(result).to eq(expected)
37
40
  end
38
41
 
39
42
  it 'should parse last 24s' do
40
- result = @transformer.apply @parser.parse('last 24s')
41
- expect(result.query.to_s).to eq({query:{filtered:{query:{
42
- range: {
43
- Plunk.timestamp_field => {
44
- gte: (@time - 24.seconds).utc.to_datetime.iso8601(3),
45
- lte: @time.utc.to_datetime.iso8601(3)
46
- }}}}}}.to_s)
43
+ result = Plunk.search 'last 24s'
44
+ expected = Plunk::Helper.filter_builder(
45
+ Plunk::Helper.range_builder(
46
+ (@time - 24.seconds).utc.to_datetime.iso8601(3),
47
+ @time.utc.to_datetime.iso8601(3)
48
+ )
49
+ )
50
+ expect(result).to eq(expected)
47
51
  end
48
52
 
49
53
  it 'should parse last 24m' do
50
- result = @transformer.apply @parser.parse('last 24m')
51
- expect(result.query.to_s).to eq({query:{filtered:{query:{
52
- range: {
53
- Plunk.timestamp_field => {
54
- gte: (@time - 24.minutes).utc.to_datetime.iso8601(3),
55
- lte: @time.utc.to_datetime.iso8601(3)
56
- }}}}}}.to_s)
54
+ result = Plunk.search 'last 24m'
55
+ expected = Plunk::Helper.filter_builder(
56
+ Plunk::Helper.range_builder(
57
+ (@time - 24.minutes).utc.to_datetime.iso8601(3),
58
+ @time.utc.to_datetime.iso8601(3)
59
+ )
60
+ )
61
+ expect(result).to eq(expected)
57
62
  end
58
63
 
59
- it 'should parse last 1h @fields.foo.@field=bar' do
60
- result = @transformer.apply @parser.parse('last 1h @fields.foo.@field=bar')
61
- expect(result.query.to_s).to eq({query:{filtered:{
62
- query:{
63
- query_string: {
64
- query: '@fields.foo.@field:bar'
65
- }},
66
- filter: {
67
- and: [
68
- range: {
69
- Plunk.timestamp_field => {
70
- gte: (@time - 1.hour).utc.to_datetime.iso8601(3),
71
- lte: @time.utc.to_datetime.iso8601(3)
72
- }}]}}}}.to_s)
64
+ it 'should parse last 1h & @fields.foo.@field=bar' do
65
+ result = Plunk.search 'last 1h & @fields.foo.@field=bar'
66
+ expected = Plunk::Helper.filter_builder(
67
+ and: [
68
+ Plunk::Helper.range_builder(
69
+ (@time - 1.hour).utc.to_datetime.iso8601(3),
70
+ @time.utc.to_datetime.iso8601(3)
71
+ ),
72
+ Plunk::Helper.query_builder('@fields.foo.@field:bar')
73
+ ]
74
+ )
75
+ expect(result).to eq(expected)
73
76
  end
74
77
  end