arelastic 2.7.0 → 3.2.0

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
  SHA256:
3
- metadata.gz: 4f5e855197587936d7baf26b9837755dcaa09f2b7ad699bbf1bcf57c76b60e5e
4
- data.tar.gz: b73a52f93c29c90800a474c6be6542d1668419e91779621fdae1887c5971ca36
3
+ metadata.gz: '0984b722326d3ec3a60b11114a249eba54399ba4a28a5f05635ec3c6570b16dc'
4
+ data.tar.gz: 7f4451aa328ab073bc7aa66818bcb98b28ac6d2354c8d086213fdad1a441532d
5
5
  SHA512:
6
- metadata.gz: 9fe1729db0993d883346531353b57d8ffce55e5af76f29c668c6f7ce84ada4b25a3ca20eb49e02853083f809107d8664099dedffccdc40c2c7f04584367e0039
7
- data.tar.gz: d2ca4b464fda341996935aabc3b90b690442e682e735deb7022a2df82428ec81cff2ac67b71057f76904d821c4f22d7f832217e64674cddf0bcd94ac64848782
6
+ metadata.gz: 01d68d3d7669ab860e232fdb6723b70460ddb103e2c8a4b3d4597a49d090b24da4ef25f3a6a847ee76e459e00b8b6f983499216aa9aa672bef80fe0141913af1
7
+ data.tar.gz: 1a866d2a4b7129a7b59c44ed7c030748937f70bd0539afe9ed45fb6e10ca6a672d1fa4795672b5b9569b34c327764a8a1c798572e49090ebd017a631370430e9
data/README.md CHANGED
@@ -1 +1,59 @@
1
1
  [![Build Status](https://travis-ci.org/matthuhiggins/arelastic.svg?branch=master)](https://travis-ci.org/matthuhiggins/arelastic) [![Code Climate](https://codeclimate.com/github/matthuhiggins/arelastic/badges/gpa.svg)](https://codeclimate.com/github/matthuhiggins/arelastic)
2
+ # Arelastic
3
+
4
+ Arelastic is a Elasticsearch AST manager for Ruby. It simplifies the generation complex of Elasticsearch queries
5
+
6
+ It is intended to be a framework framework; that is, you can build your own ORM with it.
7
+
8
+ One example is [Elastic Record](https://github.com/data-axle/elastic_record)
9
+
10
+ ## Usage
11
+
12
+ ### Search
13
+ ```ruby
14
+ search = Arelastic::Builders::Search['name']
15
+
16
+ # Name equals red
17
+ search.eq('red').as_elastic
18
+ # => {"term"=>{"name"=>"red"}}
19
+
20
+ # Negation
21
+ search.eq("red").negate.as_elastic
22
+ # => {"bool"=>{"must_not"=>{"term"=>{:name=>"red"}}}}
23
+ ```
24
+
25
+ ### Limit & Offset
26
+ ```ruby
27
+ # Limit
28
+ Arelastic::Searches::Size.new(20).as_elastic
29
+ # => {"size"=>20}
30
+
31
+ # Offset
32
+ Arelastic::Searches::From.new(20).as_elastic
33
+ # => {"from"=>20}
34
+ ```
35
+
36
+ ### Ordering
37
+ ```ruby
38
+ sort_field = Arelastic::Sorts::Field.new('price' => 'asc')
39
+ sort_field.as_elastic
40
+ # => {'price' => 'asc'}
41
+
42
+ sort = Arelastic::Searches::Sort.new([sort_field])
43
+ sort.as_elastic
44
+ # => {"sort"=>[{"price"=>"asc"}]}
45
+ ```
46
+
47
+ ### Putting It All Together
48
+ ```ruby
49
+ search = [
50
+ Arelastic::Searches::Query.new(Arelastic::Builders::Search['name'].eq('Fun')),
51
+ Arelastic::Searches::Size.new(20),
52
+ Arelastic::Searches::From.new(20),
53
+ Arelastic::Searches::Sort.new([Arelastic::Sorts::Field.new('price' => 'asc')])
54
+ ]
55
+ Arelastic::Nodes::HashGroup.new(search).as_elastic
56
+ # => {"query"=>{"term"=>{"name"=>"Fun"}}, "size"=>20, "from"=>20, "sort"=>[{"price"=>"asc"}]}
57
+ ```
58
+
59
+ Some helpful Arel builders can be found [here](/lib/arelastic/builders/filter.rb).
data/lib/arelastic.rb CHANGED
@@ -13,5 +13,13 @@ module Arelastic
13
13
  def queries
14
14
  Arelastic::Builders::Queries
15
15
  end
16
+
17
+ def [](field)
18
+ Arelastic::Builders::Queries[field]
19
+ end
20
+
21
+ def aggregations
22
+ Arelastic::Builders::Aggregations
23
+ end
16
24
  end
17
25
  end
@@ -1,6 +1,9 @@
1
1
  require 'arelastic/aggregations/aggregation'
2
2
  require 'arelastic/aggregations/bucket'
3
3
 
4
+ require 'arelastic/aggregations/bucket_sort'
5
+ require 'arelastic/aggregations/bucket_selector'
6
+ require 'arelastic/aggregations/cardinality'
4
7
  require 'arelastic/aggregations/date_histogram'
5
8
  require 'arelastic/aggregations/filter'
6
9
  require 'arelastic/aggregations/filters'
@@ -0,0 +1,9 @@
1
+ module Arelastic
2
+ module Aggregations
3
+ class BucketSelector < Arelastic::Aggregations::Aggregation
4
+ def as_elastic_aggregation
5
+ { 'bucket_selector' => options }
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ module Arelastic
2
+ module Aggregations
3
+ class BucketSort < Arelastic::Aggregations::Aggregation
4
+ attr_accessor :sort
5
+
6
+ def initialize(name, options = {})
7
+ super
8
+ @sort = read_option! options, 'sort'
9
+ end
10
+
11
+ def as_elastic_aggregation
12
+ params = options
13
+ params = params.merge('sort' => convert_to_elastic(sort)) if sort
14
+ { 'bucket_sort' => params }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module Arelastic
2
+ module Aggregations
3
+ class Cardinality < Arelastic::Aggregations::Aggregation
4
+ def as_elastic_aggregation
5
+ {'cardinality' => options}
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,6 +1,4 @@
1
- require 'arelastic/builders/aggregation'
2
- require 'arelastic/builders/filter'
1
+ require 'arelastic/builders/aggregations'
3
2
  require 'arelastic/builders/mapping'
4
3
  require 'arelastic/builders/queries'
5
- require 'arelastic/builders/search'
6
4
  require 'arelastic/builders/sort'
@@ -0,0 +1,28 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Aggregations
4
+ class << self
5
+ MACROS_TO_ARELASTIC = {
6
+ cardinality: Arelastic::Aggregations::Cardinality,
7
+ date_histogram: Arelastic::Aggregations::DateHistogram,
8
+ filter: Arelastic::Aggregations::Filter,
9
+ filters: Arelastic::Aggregations::Filters,
10
+ histogram: Arelastic::Aggregations::Histogram,
11
+ missing: Arelastic::Aggregations::Missing,
12
+ nested: Arelastic::Aggregations::Nested,
13
+ range: Arelastic::Aggregations::Range,
14
+ reverse_nested: Arelastic::Aggregations::ReverseNested,
15
+ sampler: Arelastic::Aggregations::Sampler,
16
+ terms: Arelastic::Aggregations::Terms,
17
+ value_count: Arelastic::Aggregations::ValueCount
18
+ }
19
+
20
+ MACROS_TO_ARELASTIC.each do |macro, klass|
21
+ define_method macro do |*args|
22
+ klass.new(*args)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -52,6 +52,39 @@ module Arelastic
52
52
  klass.new(name, *args)
53
53
  end
54
54
  end
55
+
56
+ def in other, options = {}
57
+ case other
58
+ when Range
59
+ if other.exclude_end?
60
+ range 'gte' => other.begin, 'lt' => other.end
61
+ else
62
+ range 'gte' => other.begin, 'lte' => other.end
63
+ end
64
+ else
65
+ terms other, options
66
+ end
67
+ end
68
+
69
+ def missing(options = {})
70
+ exists(options).negate
71
+ end
72
+
73
+ def gte other
74
+ range 'gte' => other
75
+ end
76
+
77
+ def gt other
78
+ range 'gt' => other
79
+ end
80
+
81
+ def lte other
82
+ range 'lte' => other
83
+ end
84
+
85
+ def lt other
86
+ range 'lt' => other
87
+ end
55
88
  end
56
89
  end
57
90
  end
@@ -1,21 +1,22 @@
1
1
  module Arelastic
2
2
  module Queries
3
3
  class Nested < Arelastic::Queries::Query
4
- attr_accessor :path, :expr
4
+ attr_accessor :path, :query, :options
5
5
 
6
- def initialize(path, expr)
7
- @path = path
8
- @expr = expr
6
+ def initialize(path, query, options = {})
7
+ @path = path
8
+ @query = query
9
+ @options = options
9
10
  end
10
11
 
11
12
  def as_elastic
12
13
  params = {
13
14
  'path' => path,
14
- 'query' => convert_to_elastic(expr)
15
- }
15
+ 'query' => convert_to_elastic(query)
16
+ }.update(options)
16
17
 
17
18
  { 'nested' => params }
18
19
  end
19
20
  end
20
21
  end
21
- end
22
+ end
@@ -0,0 +1,25 @@
1
+ require "helper"
2
+
3
+ class Arelastic::Aggregations::BucketSelectorTest < Minitest::Test
4
+ def test_as_elastic
5
+ aggregation = Arelastic::Aggregations::BucketSelector.new("foo_agg",
6
+ "buckets_path" => {
7
+ "foo_bucket" => "foo_bucket_path",
8
+ "bar_bucket" => "bar_bucket_path"
9
+ },
10
+ "script" => "params.foo_bucket > 10 && params.bar_bucket < 100"
11
+ )
12
+ expected = {
13
+ "foo_agg" => {
14
+ "bucket_selector" => {
15
+ "buckets_path" => {
16
+ "foo_bucket" => "foo_bucket_path",
17
+ "bar_bucket" => "bar_bucket_path"
18
+ },
19
+ "script" => "params.foo_bucket > 10 && params.bar_bucket < 100"
20
+ }
21
+ }
22
+ }
23
+ assert_equal expected, aggregation.as_elastic
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ require "helper"
2
+
3
+ class Arelastic::Aggregations::BucketSortTest < Minitest::Test
4
+ def test_as_elastic
5
+ aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "size" => 3, "from" => 5, "sort" => "price")
6
+
7
+ expected = {
8
+ "foo_agg" => {
9
+ "bucket_sort" => {
10
+ "sort" => "price",
11
+ "from" => 5,
12
+ "size" => 3
13
+ }
14
+ }
15
+ }
16
+ assert_equal expected, aggregation.as_elastic
17
+ end
18
+
19
+ def test_arelastic_sort
20
+ sort = Arelastic::Sorts::Field.new("price" => "desc")
21
+ aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "sort" => sort)
22
+
23
+ expected = {
24
+ "foo_agg" => {
25
+ "bucket_sort" => {
26
+ "sort" => {"price" => "desc"}
27
+ }
28
+ }
29
+ }
30
+ assert_equal expected, aggregation.as_elastic
31
+ end
32
+
33
+ def test_optional_sort
34
+ aggregation = Arelastic::Aggregations::BucketSort.new("foo_agg", "size" => 3)
35
+
36
+ expected = {
37
+ "foo_agg" => {
38
+ "bucket_sort" => {
39
+ "size" => 3
40
+ }
41
+ }
42
+ }
43
+ assert_equal expected, aggregation.as_elastic
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Aggregations::CardinalityTest < Minitest::Test
4
+ def test_as_elastic
5
+ aggregation = Arelastic::Aggregations::Cardinality.new('foo', 'field' => 'name')
6
+
7
+ expected = {
8
+ "foo" => {
9
+ "cardinality" => {
10
+ "field" => "name"
11
+ }
12
+ }
13
+ }
14
+ assert_equal expected, aggregation.as_elastic
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Builders::AggregationsTest < Minitest::Test
4
+ def test_terms
5
+ expected = {"name" => {"terms" => {"field" => "color"}}}
6
+ actual = Arelastic::Builders::Aggregations.terms('name', 'field' => 'color').as_elastic
7
+
8
+ assert_equal expected, actual
9
+ end
10
+ end
@@ -50,10 +50,26 @@ class Arelastic::Builders::QueriesTest < Minitest::Test
50
50
  assert_equal expected, query.as_elastic
51
51
  end
52
52
 
53
- def test_match
54
- query = Arelastic::Builders::Queries['message'].match "hello"
55
- expected = {"match" => { "message" => "hello" }}
53
+ def test_missing
54
+ expected = {"bool" => {"must_not" => {"exists" => {"field" => "color"}}}}
55
+ assert_equal expected, Arelastic::Builders::Queries['color'].missing.as_elastic
56
+ end
56
57
 
57
- assert_equal expected, query.as_elastic
58
+ def test_in
59
+ expected = {"terms" => {"color" => ["blue"]}}
60
+ assert_equal expected, Arelastic::Builders::Queries['color'].in(['blue']).as_elastic
61
+ end
62
+
63
+ def test_in_with_options
64
+ expected = {"terms" => {"color" => ["blue"], "execution" => "bool"}}
65
+ assert_equal expected, Arelastic::Builders::Queries['color'].in(['blue'], "execution" => "bool").as_elastic
66
+ end
67
+
68
+ def test_in_with_range
69
+ expected = {"range" => {"color" => {"gte" => 1, "lte" => 3}}}
70
+ assert_equal expected, Arelastic::Builders::Queries['color'].in(1..3).as_elastic
71
+
72
+ expected = {"range" => {"color" => {"gte" => 1, "lt" => 3}}}
73
+ assert_equal expected, Arelastic::Builders::Queries['color'].in(1...3).as_elastic
58
74
  end
59
75
  end
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class Arelastic::Queries::GeoDistanceTest < Minitest::Test
3
+ class Arelastic::Queries::GeoPolygonTest < Minitest::Test
4
4
  def test_as_elastic
5
5
  points = [
6
6
  {"lat" => 47.15, "lon" => -124.33},
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Queries::NestedTest < Minitest::Test
4
+ def test_as_elastic
5
+ expected = {
6
+ 'nested' => {
7
+ 'path' => 'comments',
8
+ 'query' => {
9
+ 'match' => {
10
+ 'author'=>'matt'
11
+ }
12
+ },
13
+ 'inner_hits' => {}
14
+ }
15
+ }
16
+
17
+ query = Arelastic::Queries::Match.new('author', 'matt')
18
+ assert_equal expected, Arelastic::Queries::Nested.new('comments', query, 'inner_hits' => {}).as_elastic
19
+ end
20
+ end
@@ -4,4 +4,9 @@ class ArelasticTest < Minitest::Test
4
4
  def test_queries
5
5
  assert_equal Arelastic::Builders::Queries, Arelastic.queries
6
6
  end
7
+
8
+ def test_lookup
9
+ expected = { "term" => {"color" => "blue" }}
10
+ assert_equal expected, Arelastic.queries['color'].term('blue').as_elastic
11
+ end
7
12
  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: 2.7.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Higgins
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-28 00:00:00.000000000 Z
11
+ date: 2021-05-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Build Elastic Search queries with objects
14
14
  email: developer@matthewhiggins.com
@@ -22,6 +22,9 @@ files:
22
22
  - lib/arelastic/aggregations.rb
23
23
  - lib/arelastic/aggregations/aggregation.rb
24
24
  - lib/arelastic/aggregations/bucket.rb
25
+ - lib/arelastic/aggregations/bucket_selector.rb
26
+ - lib/arelastic/aggregations/bucket_sort.rb
27
+ - lib/arelastic/aggregations/cardinality.rb
25
28
  - lib/arelastic/aggregations/date_histogram.rb
26
29
  - lib/arelastic/aggregations/filter.rb
27
30
  - lib/arelastic/aggregations/filters.rb
@@ -39,11 +42,9 @@ files:
39
42
  - lib/arelastic/arities/polyadic.rb
40
43
  - lib/arelastic/arities/unary.rb
41
44
  - lib/arelastic/builders.rb
42
- - lib/arelastic/builders/aggregation.rb
43
- - lib/arelastic/builders/filter.rb
45
+ - lib/arelastic/builders/aggregations.rb
44
46
  - lib/arelastic/builders/mapping.rb
45
47
  - lib/arelastic/builders/queries.rb
46
- - lib/arelastic/builders/search.rb
47
48
  - lib/arelastic/builders/sort.rb
48
49
  - lib/arelastic/mappings.rb
49
50
  - lib/arelastic/mappings/type.rb
@@ -102,7 +103,10 @@ files:
102
103
  - lib/arelastic/sorts/geo_distance.rb
103
104
  - lib/arelastic/sorts/sort.rb
104
105
  - test/arelastic/aggregations/aggregation_test.rb
106
+ - test/arelastic/aggregations/bucket_selector_test.rb
107
+ - test/arelastic/aggregations/bucket_sort_test.rb
105
108
  - test/arelastic/aggregations/bucket_test.rb
109
+ - test/arelastic/aggregations/cardinality_test.rb
106
110
  - test/arelastic/aggregations/date_histogram_test.rb
107
111
  - test/arelastic/aggregations/filter_test.rb
108
112
  - test/arelastic/aggregations/filters_test.rb
@@ -115,11 +119,9 @@ files:
115
119
  - test/arelastic/arities/binary_test.rb
116
120
  - test/arelastic/arities/polyadic_test.rb
117
121
  - test/arelastic/arities/unary_test.rb
118
- - test/arelastic/builders/aggregation_test.rb
119
- - test/arelastic/builders/filter_test.rb
122
+ - test/arelastic/builders/aggregations_test.rb
120
123
  - test/arelastic/builders/mapping_test.rb
121
124
  - test/arelastic/builders/queries_test.rb
122
- - test/arelastic/builders/search_test.rb
123
125
  - test/arelastic/builders/sort_test.rb
124
126
  - test/arelastic/mappings/types/binary_test.rb
125
127
  - test/arelastic/mappings/types/multi_field_test.rb
@@ -140,6 +142,7 @@ files:
140
142
  - test/arelastic/queries/match_phrase_test.rb
141
143
  - test/arelastic/queries/match_test.rb
142
144
  - test/arelastic/queries/multi_match_test.rb
145
+ - test/arelastic/queries/nested_test.rb
143
146
  - test/arelastic/queries/percolate_test.rb
144
147
  - test/arelastic/queries/query_string_test.rb
145
148
  - test/arelastic/queries/query_test.rb
@@ -157,7 +160,7 @@ homepage: http://github.com/matthuhiggins/arelastic
157
160
  licenses:
158
161
  - MIT
159
162
  metadata: {}
160
- post_install_message:
163
+ post_install_message:
161
164
  rdoc_options: []
162
165
  require_paths:
163
166
  - lib
@@ -172,9 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
175
  - !ruby/object:Gem::Version
173
176
  version: '0'
174
177
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.7.6
177
- signing_key:
178
+ rubygems_version: 3.2.15
179
+ signing_key:
178
180
  specification_version: 4
179
181
  summary: Elastic Search query builder
180
182
  test_files: []
@@ -1,31 +0,0 @@
1
- module Arelastic
2
- module Builders
3
- class Aggregation < Struct.new :name
4
- class << self
5
- def [](name)
6
- new(name)
7
- end
8
- end
9
-
10
- def date_histogram options
11
- Arelastic::Aggregations::DateHistogram.new name, options
12
- end
13
-
14
- def filter filter, options
15
- Arelastic::Aggregations::Filter.new name, filter, options
16
- end
17
-
18
- def histogram options
19
- Arelastic::Aggregations::Histogram.new name, options
20
- end
21
-
22
- def sample shard_size, aggs
23
- Arelastic::Aggregations::Sampler.new(name, sample_size, aggs)
24
- end
25
-
26
- def terms options = {}
27
- Arelastic::Aggregations::Terms.new(name, options)
28
- end
29
- end
30
- end
31
- end
@@ -1,81 +0,0 @@
1
- module Arelastic
2
- module Builders
3
- class Filter < Struct.new :field
4
- class << self
5
- def [](field)
6
- new(field)
7
- end
8
-
9
- def ids *ids
10
- Arelastic::Queries::Ids.new ids.flatten
11
- end
12
-
13
- def not expr
14
- Arelastic::Queries::Bool.new must_not: expr
15
- end
16
- end
17
-
18
- def eq other
19
- Arelastic::Queries::Term.new field, other
20
- end
21
-
22
- def not_eq other
23
- self.class.not eq(other)
24
- end
25
-
26
- def in other, options = {}
27
- case other
28
- when Range
29
- if other.exclude_end?
30
- range 'gte' => other.begin, 'lt' => other.end
31
- else
32
- range 'gte' => other.begin, 'lte' => other.end
33
- end
34
- else
35
- Arelastic::Queries::Terms.new field, other, options
36
- end
37
- end
38
-
39
- def not_in other, options = {}
40
- self.class.not self.in(other, options)
41
- end
42
-
43
- def prefix other
44
- Arelastic::Queries::Prefix.new field, other
45
- end
46
-
47
- def exists(options = {})
48
- Arelastic::Queries::Exists.new field, options
49
- end
50
-
51
- def missing(options = {})
52
- exists(options).negate
53
- end
54
-
55
- def regexp other
56
- Arelastic::Queries::Regexp.new field, other
57
- end
58
-
59
- def gte other
60
- range 'gte' => other
61
- end
62
-
63
- def gt other
64
- range 'gt' => other
65
- end
66
-
67
- def lte other
68
- range 'lte' => other
69
- end
70
-
71
- def lt other
72
- range 'lt' => other
73
- end
74
-
75
- private
76
- def range options
77
- Arelastic::Queries::Range.new field, options
78
- end
79
- end
80
- end
81
- end
@@ -1,27 +0,0 @@
1
- module Arelastic
2
- module Builders
3
- class Search
4
- class << self
5
- def filter
6
- Arelastic::Builders::Filter
7
- end
8
-
9
- def [](field)
10
- filter[field]
11
- end
12
-
13
- def aggregation
14
- Arelastic::Builders::Aggregation
15
- end
16
-
17
- def queries
18
- Arelastic::Builders::Queries
19
- end
20
-
21
- def sort
22
- Arelastic::Builders::Sort
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,10 +0,0 @@
1
- require 'helper'
2
-
3
- class Arelastic::Builders::AggregationTest < Minitest::Test
4
- def test_terms
5
- expected = {"name" => {"terms" => {"field" => "color"}}}
6
- actual = Arelastic::Builders::Aggregation['name'].terms('field' => 'color').as_elastic
7
-
8
- assert_equal expected, actual
9
- end
10
- end
@@ -1,76 +0,0 @@
1
- require 'helper'
2
-
3
- class Arelastic::Builders::FilterTest < Minitest::Test
4
- def test_ids
5
- expected = {"ids" => {"values"=>["5", "6"]}}
6
- assert_equal expected, Arelastic::Builders::Filter.ids('5', '6').as_elastic
7
- end
8
-
9
- def test_not
10
- expected = {"bool" => {"must_not" => {"terms" => {"color" => "blue"}}}}
11
- assert_equal expected, Arelastic::Builders::Filter.not({"terms" => {"color" => "blue"}}).as_elastic
12
- end
13
-
14
- def test_eq
15
- expected = {"term"=>{"color"=>"blue"}}
16
- assert_equal expected, builder.eq('blue').as_elastic
17
- end
18
-
19
- def test_not_eq
20
- expected = {"bool" => {"must_not" => {"term" => {"color" => "blue"}}}}
21
- assert_equal expected, builder.not_eq('blue').as_elastic
22
- end
23
-
24
- def test_in
25
- expected = {"terms" => {"color" => ["blue"]}}
26
- assert_equal expected, builder.in(['blue']).as_elastic
27
- end
28
-
29
- def test_in_with_options
30
- expected = {"terms" => {"color" => ["blue"], "execution" => "bool"}}
31
- assert_equal expected, builder.in(['blue'], "execution" => "bool").as_elastic
32
- end
33
-
34
- def test_in_with_range
35
- expected = {"range" => {"color" => {"gte"=>1, "lte"=>3}}}
36
- assert_equal expected, builder.in(1..3).as_elastic
37
-
38
- expected = {"range" => {"color" => {"gte"=>1, "lt"=>3}}}
39
- assert_equal expected, builder.in(1...3).as_elastic
40
- end
41
-
42
- def test_not_in
43
- expected = {"bool" => {"must_not" => {"terms" => {"color"=>["blue"]}}}}
44
- assert_equal expected, builder.not_in(['blue']).as_elastic
45
- end
46
-
47
- def test_prefix
48
- expected = {"prefix" => {"color" => "blu"}}
49
- assert_equal expected, builder.prefix('blu').as_elastic
50
- end
51
-
52
- def test_exists
53
- expected = {"exists" => {"field" => "color"}}
54
- assert_equal expected, builder.exists.as_elastic
55
- end
56
-
57
- def test_missing
58
- expected = {"bool" => {"must_not" => {"exists" => {"field" => "color"}}}}
59
- assert_equal expected, builder.missing.as_elastic
60
- end
61
-
62
- def test_regexp
63
- expected = {"regexp" => {"color" => "green(-blue)?"}}
64
- assert_equal expected, builder.regexp("green(-blue)?").as_elastic
65
- end
66
-
67
- def test_range
68
- expected = {"range" => {"color" => {"lt" => 5}}}
69
- assert_equal expected, builder.lt(5).as_elastic
70
- end
71
-
72
- private
73
- def builder
74
- @builder ||= Arelastic::Builders::Filter['color']
75
- end
76
- end
@@ -1,23 +0,0 @@
1
- require 'helper'
2
-
3
- class Arelastic::Builders::SearchTest < Minitest::Test
4
- def test_filter
5
- assert_equal Arelastic::Builders::Filter, Arelastic::Builders::Search.filter
6
- end
7
-
8
- def test_field
9
- assert_kind_of Arelastic::Builders::Filter, Arelastic::Builders::Search['poop']
10
- end
11
-
12
- def test_aggregation
13
- assert_equal Arelastic::Builders::Aggregation, Arelastic::Builders::Search.aggregation
14
- end
15
-
16
- def test_query
17
- assert_equal Arelastic::Builders::Queries, Arelastic::Builders::Search.queries
18
- end
19
-
20
- def test_sort
21
- assert_equal Arelastic::Builders::Sort, Arelastic::Builders::Search.sort
22
- end
23
- end