arelastic 1.3.0 → 1.3.1

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: a0a7a0a703d0ab5dd36a676449fc8bfa2cdc20b7
4
- data.tar.gz: 8f79e245f42b144533d1fa2c17883c824b091cf2
3
+ metadata.gz: d96135e275fd9ab247666893b15e684ee782dead
4
+ data.tar.gz: cdc3cd878e4c5f71a0f90d9c3337e9b4611e3df3
5
5
  SHA512:
6
- metadata.gz: 660f7f84062fab516fea41a0e7b0e35365c5032d6c955ca799f199917ed98bd5e9bb4b7b3305d0a415e5332c4354eb578dbc02761f9f4e9e332487d9c10615a6
7
- data.tar.gz: 2ddf09ade0864e340bda0f6a4e5e865e345acd15fe5ba428b32babc35f9c6e06e74bad220186629a63194afd5588651d098d1e79cabf40e50613ddee953ff319
6
+ metadata.gz: 82a9a205c20da2f7aa6908faa80073c1ed170173580436eac6b92b3e2903bdb88b1fa016cc5d89e3e1f256e979a48cf8e372d41f904cf3f40e698fb117a52c1b
7
+ data.tar.gz: 93736e6182ddfdfefabf2680e94c2d4e65d9fff3de38d02ce94827758d444d9c8ec56b2d8dd52c40aba5fe1c7af8697eb82f95e55d421ab3eb81946e094b6296
@@ -1,7 +1,9 @@
1
1
  require 'arelastic/aggregations/aggregation'
2
+ require 'arelastic/aggregations/bucket'
2
3
 
3
4
  require 'arelastic/aggregations/date_histogram'
4
5
  require 'arelastic/aggregations/filter'
5
6
  require 'arelastic/aggregations/min'
6
7
  require 'arelastic/aggregations/nested'
8
+ require 'arelastic/aggregations/reverse_nested'
7
9
  require 'arelastic/aggregations/terms'
@@ -4,7 +4,7 @@ module Arelastic
4
4
  attr_accessor :name, :options
5
5
 
6
6
  def initialize(name, options = {})
7
- @name = name
7
+ @name = name
8
8
  @options = options
9
9
  end
10
10
 
@@ -16,6 +16,10 @@ module Arelastic
16
16
  Arelastic::Aggregations::Nested.new(name, path, [self])
17
17
  end
18
18
 
19
+ def reverse_nested(path = nil)
20
+ Arelastic::Aggregations::ReverseNested.new(name, path, [self])
21
+ end
22
+
19
23
  def as_elastic_aggregation
20
24
  raise 'not implemented'
21
25
  end
@@ -0,0 +1,25 @@
1
+ module Arelastic
2
+ module Aggregations
3
+ class Bucket < Arelastic::Aggregations::Aggregation
4
+ attr_accessor :aggs
5
+
6
+ def initialize(name, options = {})
7
+ options = options.dup
8
+ @aggs = options.delete(:aggs) || options.delete('aggs')
9
+ super(name, options)
10
+ end
11
+
12
+ def as_elastic
13
+ {name => as_elastic_aggregation.merge(sub_aggregations_as_elastic)}
14
+ end
15
+
16
+ def sub_aggregations_as_elastic
17
+ if aggs
18
+ {'aggs' => Arelastic::Nodes::HashGroup.new(aggs).as_elastic}
19
+ else
20
+ {}
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,9 +1,9 @@
1
1
  module Arelastic
2
2
  module Aggregations
3
- class DateHistogram < Arelastic::Aggregations::Aggregation
3
+ class DateHistogram < Arelastic::Aggregations::Bucket
4
4
  def as_elastic_aggregation
5
5
  {'date_histogram' => options}
6
6
  end
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -1,10 +1,10 @@
1
1
  module Arelastic
2
2
  module Aggregations
3
- class Filter < Arelastic::Aggregations::Aggregation
3
+ class Filter < Arelastic::Aggregations::Bucket
4
4
  attr_accessor :filter
5
5
 
6
- def initialize name, filter
7
- super name
6
+ def initialize(name, filter, options = {})
7
+ super name, options
8
8
  @filter = filter
9
9
  end
10
10
 
@@ -2,7 +2,7 @@ module Arelastic
2
2
  module Aggregations
3
3
  class Min < Arelastic::Aggregations::Aggregation
4
4
  def as_elastic_aggregation
5
- {"min" => options}
5
+ {'min' => options}
6
6
  end
7
7
  end
8
8
  end
@@ -1,23 +1,15 @@
1
1
  module Arelastic
2
2
  module Aggregations
3
- class Nested < Arelastic::Aggregations::Aggregation
4
- attr_accessor :path, :aggregations
3
+ class Nested < Arelastic::Aggregations::Bucket
4
+ attr_accessor :path
5
5
 
6
- # HashGroup
7
- def initialize name, path, aggregations
8
- super name
6
+ def initialize(name, path, aggs)
7
+ super name, aggs: aggs
9
8
  @path = path
10
- @aggregations = aggregations
11
9
  end
12
10
 
13
- def as_elastic
14
- grouping = Arelastic::Nodes::HashGroup.new aggregations
15
- {
16
- name => {
17
- "nested" => {"path" => path},
18
- "aggs" => grouping.as_elastic
19
- }
20
- }
11
+ def as_elastic_aggregation
12
+ { "nested" => { "path" => path } }
21
13
  end
22
14
  end
23
15
  end
@@ -0,0 +1,18 @@
1
+ module Arelastic
2
+ module Aggregations
3
+ class ReverseNested < Arelastic::Aggregations::Bucket
4
+ attr_accessor :path
5
+
6
+ def initialize(name, path = nil, aggs)
7
+ super name, aggs: aggs
8
+ @path = path
9
+ end
10
+
11
+ def as_elastic_aggregation
12
+ params = path ? { "path" => path } : {}
13
+
14
+ { "reverse_nested" => params }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
1
  module Arelastic
2
2
  module Aggregations
3
- class Terms < Arelastic::Aggregations::Aggregation
3
+ class Terms < Arelastic::Aggregations::Bucket
4
4
  def as_elastic_aggregation
5
5
  {'terms' => options}
6
6
  end
@@ -8,7 +8,7 @@ module Arelastic
8
8
  end
9
9
 
10
10
  def terms options = {}
11
- Arelastic::Aggregations::Terms.new name, options
11
+ Arelastic::Aggregations::Terms.new(name, options)
12
12
  end
13
13
 
14
14
  def histogram options
@@ -7,12 +7,10 @@ module Arelastic
7
7
  end
8
8
 
9
9
  def as_elastic
10
- result = {}
11
- nodes.each do |node|
10
+ nodes.each_with_object({}) do |node, result|
12
11
  result.merge! convert_to_elastic(node)
13
12
  end
14
- result
15
13
  end
16
14
  end
17
15
  end
18
- end
16
+ end
@@ -1,19 +1,16 @@
1
1
  module Arelastic
2
2
  module Searches
3
3
  class Aggregations < Arelastic::Searches::Search
4
- attr_accessor :aggregations
5
- def initialize *aggregations
6
- @aggregations = aggregations.flatten
4
+ attr_accessor :aggs
5
+
6
+ def initialize *aggs
7
+ @aggs = aggs.flatten
7
8
  end
8
9
 
9
10
  def as_elastic
10
- grouping = Arelastic::Nodes::HashGroup.new aggregations.flatten
11
+ grouping = Arelastic::Nodes::HashGroup.new(aggs)
11
12
  { "aggs" => grouping.as_elastic }
12
13
  end
13
-
14
- def nested(name, path)
15
- Arelastic::Aggregations::Nested.new name, path, aggregations
16
- end
17
14
  end
18
15
  end
19
16
  end
@@ -4,19 +4,14 @@ class Arelastic::Aggregations::AggregationTest < Minitest::Test
4
4
  def test_nested
5
5
  aggregation = Arelastic::Aggregations::Min.new('smallest', 'field' => 'pets.weight').nested('pets')
6
6
 
7
- expected = {
8
- "smallest" => {
9
- "nested" => {
10
- "path" => "pets"
11
- },
12
- "aggs" => {
13
- "smallest" => {
14
- "min" => { "field" => "pets.weight" }
15
- }
16
- }
17
- }
18
- }
7
+ expected = Arelastic::Aggregations::Nested.new('smallest', 'pets', [aggregation])
8
+ assert_equal expected, aggregation.nested('pets')
9
+ end
10
+
11
+ def test_reverse_nested
12
+ aggregation = Arelastic::Aggregations::Min.new('smallest', 'field' => 'pets.weight').reverse_nested('pets')
19
13
 
20
- assert_equal expected, aggregation.as_elastic
14
+ expected = Arelastic::Aggregations::ReverseNested.new('smallest', 'pets', [aggregation])
15
+ assert_equal expected, aggregation.reverse_nested('pets')
21
16
  end
22
- end
17
+ end
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Aggregations::BucketTest < Minitest::Test
4
+ def test_as_elastic_with_sub_aggregations
5
+ aggregation = Arelastic::Aggregations::Terms.new('foo',
6
+ 'field' => 'tags',
7
+ 'size' => 10,
8
+ 'aggs' => [
9
+ Arelastic::Aggregations::Terms.new('colors', 'field' => 'color')
10
+ ]
11
+ )
12
+
13
+ expected = {
14
+ "foo" => {
15
+ "terms" => {
16
+ "field" => "tags",
17
+ "size" => 10,
18
+ },
19
+ "aggs" => {
20
+ "colors" => {
21
+ "terms" => {
22
+ "field" => "color"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ assert_equal expected, aggregation.as_elastic
29
+ end
30
+ end
@@ -3,7 +3,24 @@ require 'helper'
3
3
  class Arelastic::Aggregations::NestedTest < Minitest::Test
4
4
  def test_as_elastic
5
5
  aggregation = Arelastic::Aggregations::Nested.new('favorite', 'movies', [
6
-
6
+ Arelastic::Aggregations::Terms.new('foo', 'field' => 'tags', 'size' => 10)
7
7
  ])
8
+
9
+ expected = {
10
+ "favorite" => {
11
+ "nested" => {
12
+ "path" => "movies"
13
+ },
14
+ "aggs" => {
15
+ "foo" => {
16
+ "terms" => {
17
+ "field" => "tags",
18
+ "size" => 10
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ assert_equal expected, aggregation.as_elastic
8
25
  end
9
- end
26
+ end
@@ -0,0 +1,44 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Aggregations::ReverseNestedTest < Minitest::Test
4
+ def test_as_elastic
5
+ aggregation = Arelastic::Aggregations::ReverseNested.new(
6
+ 'smallest',
7
+ 'pets',
8
+ [Arelastic::Aggregations::Min.new('smallest', 'field' => 'pets.weight')]
9
+ )
10
+
11
+ expected = {
12
+ "smallest" => {
13
+ "reverse_nested" => {
14
+ "path" => "pets"
15
+ },
16
+ "aggs" => {
17
+ "smallest" => {
18
+ "min" => { "field" => "pets.weight" }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ assert_equal expected, aggregation.as_elastic
24
+ end
25
+
26
+ def test_as_elastic_without_path
27
+ aggregation = Arelastic::Aggregations::ReverseNested.new(
28
+ 'youngest',
29
+ [Arelastic::Aggregations::Min.new('youngest', 'field' => 'age')]
30
+ )
31
+
32
+ expected = {
33
+ "youngest" => {
34
+ "reverse_nested" => {},
35
+ "aggs" => {
36
+ "youngest" => {
37
+ "min" => { "field" => "age" }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ assert_equal expected, aggregation.as_elastic
43
+ end
44
+ end
@@ -3,6 +3,7 @@ require 'helper'
3
3
  class Arelastic::Aggregations::TermsTest < Minitest::Test
4
4
  def test_as_elastic
5
5
  aggregation = Arelastic::Aggregations::Terms.new('foo', 'field' => 'tags', 'size' => 10)
6
+
6
7
  expected = {
7
8
  "foo" => {
8
9
  "terms" => {
@@ -11,7 +12,6 @@ class Arelastic::Aggregations::TermsTest < Minitest::Test
11
12
  }
12
13
  }
13
14
  }
14
-
15
15
  assert_equal expected, aggregation.as_elastic
16
16
  end
17
17
  end
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
 
3
3
  class Arelastic::FilterTest < Minitest::Test
4
- def test_or
4
+ def test_and
5
5
  filter = Arelastic::Filters::Filter.new
6
6
 
7
7
  and_filter = filter.and(filter)
@@ -10,7 +10,7 @@ class Arelastic::FilterTest < Minitest::Test
10
10
  assert_equal [filter, filter], and_filter.children
11
11
  end
12
12
 
13
- def test_and
13
+ def test_or
14
14
  filter = Arelastic::Filters::Filter.new
15
15
 
16
16
  and_filter = filter.or(filter)
@@ -26,26 +26,4 @@ class Arelastic::Searches::AggregationsTest < MiniTest::Spec
26
26
  }
27
27
  assert_equal expected, aggregations.as_elastic
28
28
  end
29
-
30
- def test_nested
31
- aggregations = Arelastic::Searches::Aggregations.new "favorites" => {"terms" => {"field" => "pencils.color"}}
32
- nested = aggregations.nested("pencil_colors", "pencils")
33
-
34
- expected = {
35
- "pencil_colors" => {
36
- "nested" => {
37
- "path" => "pencils"
38
- },
39
- "aggs" => {
40
- "favorites" => {
41
- "terms" => {
42
- "field"=>"pencils.color"
43
- }
44
- }
45
- }
46
- }
47
- }
48
-
49
- assert_equal expected, nested.as_elastic
50
- end
51
- end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arelastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Higgins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-09 00:00:00.000000000 Z
11
+ date: 2017-07-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Build Elastic Search queries with objects
14
14
  email: developer@matthewhiggins.com
@@ -21,11 +21,13 @@ files:
21
21
  - lib/arelastic.rb
22
22
  - lib/arelastic/aggregations.rb
23
23
  - lib/arelastic/aggregations/aggregation.rb
24
+ - lib/arelastic/aggregations/bucket.rb
24
25
  - lib/arelastic/aggregations/date_histogram.rb
25
26
  - lib/arelastic/aggregations/filter.rb
26
27
  - lib/arelastic/aggregations/histogram.rb
27
28
  - lib/arelastic/aggregations/min.rb
28
29
  - lib/arelastic/aggregations/nested.rb
30
+ - lib/arelastic/aggregations/reverse_nested.rb
29
31
  - lib/arelastic/aggregations/terms.rb
30
32
  - lib/arelastic/arities.rb
31
33
  - lib/arelastic/arities/binary.rb
@@ -102,9 +104,11 @@ files:
102
104
  - lib/arelastic/sorts/geo_distance.rb
103
105
  - lib/arelastic/sorts/sort.rb
104
106
  - test/arelastic/aggregations/aggregation_test.rb
107
+ - test/arelastic/aggregations/bucket_test.rb
105
108
  - test/arelastic/aggregations/date_histogram_test.rb
106
109
  - test/arelastic/aggregations/filter_test.rb
107
110
  - test/arelastic/aggregations/nested_test.rb
111
+ - test/arelastic/aggregations/reverse_nested_test.rb
108
112
  - test/arelastic/aggregations/terms_test.rb
109
113
  - test/arelastic/arities/binary_test.rb
110
114
  - test/arelastic/arities/polyadic_test.rb
@@ -166,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
170
  version: 1.8.11
167
171
  requirements: []
168
172
  rubyforge_project:
169
- rubygems_version: 2.5.1
173
+ rubygems_version: 2.6.11
170
174
  signing_key:
171
175
  specification_version: 4
172
176
  summary: Elastic Search query builder