arelastic 1.3.0 → 1.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.
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