elasticquery 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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