elasticquery 0.1.1 → 0.1.2

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.
@@ -1,5 +1,5 @@
1
- require 'test_helper'
2
- require 'elasticquery'
1
+ require "test_helper"
2
+ require "elasticquery"
3
3
 
4
4
  class TestNotCase < MiniTest::Test
5
5
  class PostQuery < Elasticquery::Base
@@ -8,6 +8,13 @@ class TestNotCase < MiniTest::Test
8
8
  end
9
9
  end
10
10
 
11
+ class PostRangeQuery < Elasticquery::Base
12
+ filtered do |param|
13
+ term published: true
14
+ range.not :age, lte: params[:year]
15
+ end
16
+ end
17
+
11
18
  class InvalidQuery < Elasticquery::Base
12
19
  filtered do |param|
13
20
  term.not
@@ -16,7 +23,7 @@ class TestNotCase < MiniTest::Test
16
23
 
17
24
  def test_invalid_previous_filter
18
25
  query = InvalidQuery.new({}).build
19
- assert_equal query, {}
26
+ assert_equal Elasticquery::Query::DEFAULT, query
20
27
  end
21
28
 
22
29
  def test_term_case
@@ -25,4 +32,11 @@ class TestNotCase < MiniTest::Test
25
32
  expected = [{not: {filter: {term: {id: 1}}}}]
26
33
  assert_equal expected, actual[:query][:filtered][:filter][:and]
27
34
  end
35
+
36
+ def test_range_case
37
+ params = {year: 2015}
38
+ actual = PostRangeQuery.new(params).build
39
+ expected = [{term: {published: true}}, {not: {filter: {range: {age: {lte: 2015}}}}}]
40
+ assert_equal expected, actual[:query][:filtered][:filter][:and]
41
+ end
28
42
  end
@@ -1,37 +1,31 @@
1
- require 'test_helper'
2
- require 'elasticquery'
1
+ require "test_helper"
2
+ require "elasticquery"
3
3
 
4
4
  class TestQueriesInheritence < MiniTest::Test
5
5
  class MultipleFilteredQuery < Elasticquery::Base
6
6
  filtered do |params|
7
- term :'category.id' => params[:category_id]
7
+ term :"category.id" => params[:category_id]
8
8
  end
9
9
 
10
10
  filtered do |params|
11
- term :'author.name' => params[:author_name]
11
+ term :"author.name" => params[:author_name]
12
12
  end
13
13
  end
14
14
 
15
15
  class ParentPostQuery < Elasticquery::Base
16
16
  filtered do |params|
17
- term :'category.id' => params[:category_id]
17
+ term :"category.id" => params[:category_id]
18
18
  end
19
19
  end
20
20
 
21
21
  class ChildPostQuery < ParentPostQuery
22
22
  filtered do |params|
23
- term :'author.name' => params[:author_name]
24
- end
25
- end
26
-
27
- class ChildOverrideQuery < ParentPostQuery
28
- filtered do |params|
29
- term :'category.id' => params[:category_id_new]
23
+ term :"author.name" => params[:author_name]
30
24
  end
31
25
  end
32
26
 
33
27
  def setup
34
- @params = {category_id: 1, author_name: 'Sergey'}
28
+ @params = {category_id: 1, author_name: "Sergey"}
35
29
  end
36
30
 
37
31
  def test_parent_subqueries_builder
@@ -44,21 +38,13 @@ class TestQueriesInheritence < MiniTest::Test
44
38
  def test_child_query_builder
45
39
  query = ChildPostQuery.new @params
46
40
  actual = query.build
47
- expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => 'Sergey'}}]
41
+ expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => "Sergey"}}]
48
42
  assert_equal expected, actual[:query][:filtered][:filter][:and]
49
43
  end
50
44
 
51
45
  def test_concatenate_all_filters
52
46
  actual = MultipleFilteredQuery.new(@params).build
53
- expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => 'Sergey'}}]
54
- assert_equal expected, actual[:query][:filtered][:filter][:and]
55
- end
56
-
57
- def test_override_same_keys
58
- params = { category_id: 1, author_name: 'Sergey', category_id_new: 14 }
59
- query = ChildOverrideQuery.new params
60
- actual = query.build
61
- expected = [{term: {:"category.id" => 14}}]
47
+ expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => "Sergey"}}]
62
48
  assert_equal expected, actual[:query][:filtered][:filter][:and]
63
49
  end
64
50
  end
@@ -1,10 +1,10 @@
1
- require 'test_helper'
2
- require 'elasticquery'
1
+ require "test_helper"
2
+ require "elasticquery"
3
3
 
4
4
  class TestRangeCase < MiniTest::Test
5
5
  class HumanQuery < Elasticquery::Base
6
6
  filtered do |params|
7
- range :year, lte: params[:max_year], gte: params[:min_year]
7
+ range :year, lte: params[:max_year], gte: params[:min_year], execution: "fielddata"
8
8
  range :revenue, lte: params[:max_revenue], gte: params[:min_revenue]
9
9
  end
10
10
  end
@@ -12,14 +12,27 @@ class TestRangeCase < MiniTest::Test
12
12
  def test_simple_range
13
13
  params = { min_year: 1960, max_year: 2015 }
14
14
  actual = HumanQuery.new(params).build
15
- expected = [{range: {year:{ lte: 2015, gte: 1960}}}]
15
+ expected = [{range: {year:{ lte: 2015, gte: 1960, execution: "fielddata"}}}]
16
16
  assert_equal expected, actual[:query][:filtered][:filter][:and]
17
17
  end
18
18
 
19
+ def test_range_blank_values_should_be_ignored
20
+ params = { min_year: 1960, max_year: 2015, max_revenue: "", min_revenue: " " }
21
+ actual = HumanQuery.new(params).build
22
+ expected = [{range: {year:{ lte: 2015, gte: 1960, execution: "fielddata"}}}]
23
+ assert_equal expected, actual[:query][:filtered][:filter][:and]
24
+ end
25
+
26
+ def test_empty_range
27
+ params = {}
28
+ actual = HumanQuery.new(params).build
29
+ assert_equal Elasticquery::Query::DEFAULT, actual
30
+ end
31
+
19
32
  def test_multiple_ranges
20
33
  params = { min_year: 1960, max_year: 2015, min_revenue: 100 }
21
34
  actual = HumanQuery.new(params).build
22
- expected = [{range: {year:{ lte: 2015, gte: 1960}}}, {range: {revenue: {gte: 100}}}]
35
+ expected = [{range: {year:{ lte: 2015, gte: 1960, execution: "fielddata"}}}, {range: {revenue: {gte: 100}}}]
23
36
  assert_equal expected, actual[:query][:filtered][:filter][:and]
24
37
  end
25
38
  end
@@ -1,10 +1,10 @@
1
- require 'test_helper'
2
- require 'elasticquery'
1
+ require "test_helper"
2
+ require "elasticquery"
3
3
 
4
4
  class TestSearchQueryCase < MiniTest::Test
5
5
  class PostQuery < Elasticquery::Base
6
6
  filtered do |params|
7
- term :'category' => params[:category]
7
+ term :"category" => params[:category]
8
8
  search params[:search]
9
9
  end
10
10
  end
@@ -25,23 +25,29 @@ class TestSearchQueryCase < MiniTest::Test
25
25
  end
26
26
 
27
27
  def test_search_with_other_query
28
- params = {category: 'zoo', search: 'hello'}
28
+ params = {category: "zoo", search: "hello"}
29
29
  actual = PostQuery.new(params).build
30
- expected_term = [{term: {category: 'zoo'}}]
30
+ expected_term = [{term: {category: "zoo"}}]
31
31
  assert_equal expected_term, actual[:query][:filtered][:filter][:and]
32
- expected_search = { query: 'hello', fields: "_all", operator: 'and', type: 'best_fields'}
32
+ expected_search = { query: "hello", fields: "_all", operator: "and", type: "best_fields"}
33
33
  assert_equal expected_search, actual[:query][:filtered][:query][:multi_match]
34
34
  end
35
35
 
36
+ def test_empty_search
37
+ params = {search: "" , fields: %w(title body), operator: "or"}
38
+ actual = PostOptionsQuery.new(params).build
39
+ assert_equal Elasticquery::Query::DEFAULT, actual
40
+ end
41
+
36
42
  def test_all_options_to_configure
37
- params = {search: 'hello', fields: %w(title body), operator: 'or'}
43
+ params = {search: "hello", fields: %w(title body), operator: "or"}
38
44
  actual = PostOptionsQuery.new(params).build
39
- expected = {fields: %w(title body), operator: "or", type: "phrase", query: 'hello'}
45
+ expected = {fields: %w(title body), operator: "or", type: "phrase", query: "hello"}
40
46
  assert_equal expected, actual[:query][:filtered][:query][:multi_match]
41
47
  end
42
48
 
43
49
  def test_multiple_search_use_last_search_declaration
44
- params = {search: 'hello'}
50
+ params = {search: "hello"}
45
51
  actual = MultipleSearch.new(params).build
46
52
  assert_equal "look for", actual[:query][:filtered][:query][:multi_match][:query]
47
53
  end
@@ -1,24 +1,38 @@
1
- require 'test_helper'
2
- require 'elasticquery'
1
+ require "test_helper"
2
+ require "elasticquery"
3
3
 
4
4
  class TestTermCase < MiniTest::Test
5
5
  class PostQuery < Elasticquery::Base
6
6
  filtered do |params|
7
- term :'category.id' => params[:category_id], :"author.name" => params[:author_name]
7
+ term :"category.id" => params[:category_id]
8
+ term :"author.name" => params[:author_name], _cache: false
8
9
  end
9
10
  end
10
11
 
11
12
  def test_multiple_valid_terms
12
- params = {category_id: 1, author_name: 'Sergey'}
13
+ params = {category_id: 1, author_name: "Sergey"}
13
14
  actual = PostQuery.new(params).build
14
- expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => 'Sergey'}}]
15
+ expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => "Sergey", _cache: false}}]
15
16
  assert_equal expected, actual[:query][:filtered][:filter][:and]
16
17
  end
17
18
 
18
19
  def test_extra_params
19
- params = { category_id: 1, author_name: 'Sergey', a: 1 }
20
+ params = {category_id: 1, author_name: "Sergey", a: 1}
20
21
  actual = PostQuery.new(params).build
21
- expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => 'Sergey'}}]
22
+ expected = [{term: {:"category.id" => 1}}, {term: {:"author.name" => "Sergey", _cache: false}}]
22
23
  assert_equal expected, actual[:query][:filtered][:filter][:and]
23
24
  end
25
+
26
+ def test_blank_values_should_be_ignored
27
+ params = {category_id: 1, author_name: ""}
28
+ actual = PostQuery.new(params).build
29
+ expected = [{term: {:"category.id" => 1}}]
30
+ assert_equal expected, actual[:query][:filtered][:filter][:and]
31
+ end
32
+
33
+ def test_empty_params
34
+ params = {}
35
+ actual = PostQuery.new(params).build
36
+ assert_equal Elasticquery::Query::DEFAULT, actual
37
+ end
24
38
  end
data/test/query_test.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'test_helper'
2
- require 'elasticquery/query'
1
+ require "test_helper"
2
+ require "elasticquery/query"
3
3
 
4
4
  class TestQuery < MiniTest::Test
5
5
 
@@ -46,13 +46,22 @@ class TestQuery < MiniTest::Test
46
46
  end
47
47
 
48
48
  def test_should_group_filters_in_array
49
- @rule.expect :to_hash, query: {filtered: {filter: {and: {term: {a: 1, b: 2}}}}}
49
+ @rule.expect :to_hash, query: {filtered: {filter: {and: [{term: {a: 1, _cache: true}}]}}}
50
50
  @query << @rule
51
- @rule.expect :to_hash, query: {filtered: {filter: {and: {term: {c: 3}}}}}
51
+ @rule.expect :to_hash, query: {filtered: {filter: {and: [{term: {c: 3}}]}}}
52
52
  @query << @rule
53
- @rule.expect :to_hash, query: {filtered: {filter: {and: {range: {x: 3}}}}}
53
+ @rule.expect :to_hash, query: {filtered: {filter: {and: [{range: {x: 3}}]}}}
54
54
  @query << @rule
55
- expected = {query: {filtered: {filter: {and: [{term: {a: 1}}, {term: {b: 2}}, {term: {c: 3}}, {range: {x: 3}}]}}}}
55
+ expected = {query: {filtered: {filter: {and: [{term: {a: 1, _cache: true}}, {term: {c: 3}}, {range: {x: 3}}]}}}}
56
+ assert_equal(expected, @query.to_hash)
57
+ end
58
+
59
+ def test_should_group_multiple_terms_conditions
60
+ @rule.expect :to_hash, query: {filtered: {filter: {and: [{terms: {a: %w(a b c)}}]}}}
61
+ @query << @rule
62
+ @rule.expect :to_hash, query: {filtered: {filter: {and: [{terms: {c: %w(x y z), execution: "bool"}}]}}}
63
+ @query << @rule
64
+ expected = {query: {filtered: {filter: {and: [{terms: {a: %w(a b c)}}, {terms: {c: %w(x y z), execution: "bool"}}]}}}}
56
65
  assert_equal(expected, @query.to_hash)
57
66
  end
58
67
 
data/test/test_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'minitest/test'
2
- require 'minitest/autorun'
1
+ require "minitest/test"
2
+ require "minitest/autorun"
3
3
 
4
4
  require "minitest/reporters"
5
5
  Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(:color => true)]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Kuchmistov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-02 00:00:00.000000000 Z
11
+ date: 2015-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: deep_merge
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -116,23 +130,26 @@ extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
118
132
  - ".gitignore"
133
+ - ".ruby-style.yml"
119
134
  - ".travis.yml"
120
135
  - Gemfile
136
+ - History.md
121
137
  - LICENSE.txt
122
138
  - README.md
123
139
  - Rakefile
124
140
  - elasticquery.gemspec
125
141
  - lib/elasticquery.rb
126
142
  - lib/elasticquery/base.rb
143
+ - lib/elasticquery/builder.rb
127
144
  - lib/elasticquery/filters/base.rb
128
145
  - lib/elasticquery/filters/not.rb
129
146
  - lib/elasticquery/filters/range.rb
130
147
  - lib/elasticquery/filters/search.rb
131
148
  - lib/elasticquery/filters/term.rb
132
- - lib/elasticquery/queries/all.rb
133
149
  - lib/elasticquery/query.rb
134
150
  - lib/elasticquery/version.rb
135
151
  - test/base_test.rb
152
+ - test/builder_test.rb
136
153
  - test/filters/not_test.rb
137
154
  - test/filters/range_test.rb
138
155
  - test/filters/search_test.rb
@@ -143,7 +160,6 @@ files:
143
160
  - test/integration/range_case_test.rb
144
161
  - test/integration/search_case_test.rb
145
162
  - test/integration/term_case_test.rb
146
- - test/queries/all_test.rb
147
163
  - test/query_test.rb
148
164
  - test/test_helper.rb
149
165
  homepage: https://github.com/caulfield/elasticquery
@@ -166,12 +182,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
182
  version: '0'
167
183
  requirements: []
168
184
  rubyforge_project:
169
- rubygems_version: 2.4.5
185
+ rubygems_version: 2.2.2
170
186
  signing_key:
171
187
  specification_version: 4
172
188
  summary: Elasticsearch query builder.
173
189
  test_files:
174
190
  - test/base_test.rb
191
+ - test/builder_test.rb
175
192
  - test/filters/not_test.rb
176
193
  - test/filters/range_test.rb
177
194
  - test/filters/search_test.rb
@@ -182,7 +199,6 @@ test_files:
182
199
  - test/integration/range_case_test.rb
183
200
  - test/integration/search_case_test.rb
184
201
  - test/integration/term_case_test.rb
185
- - test/queries/all_test.rb
186
202
  - test/query_test.rb
187
203
  - test/test_helper.rb
188
204
  has_rdoc:
@@ -1,34 +0,0 @@
1
- require 'elasticquery/filters/term'
2
- require 'elasticquery/filters/search'
3
- require 'elasticquery/filters/not'
4
- require 'elasticquery/filters/range'
5
-
6
- require 'active_support/concern'
7
- require 'active_support/core_ext/string/inflections'
8
-
9
- module Elasticquery
10
- module Queries
11
- module All
12
- extend ActiveSupport::Concern
13
-
14
- filters = [
15
- Filters::Term,
16
- Filters::Search,
17
- Filters::Not,
18
- Filters::Range
19
- ]
20
-
21
- included do
22
- filters.each do |filter_class|
23
- filter_name = filter_class.to_s.split("::").last.underscore
24
-
25
- define_method filter_name do |*args|
26
- filter = filter_class.new *args
27
- query << filter
28
- self
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end