chewy 0.5.2 → 0.6.0
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 +4 -4
- data/.travis.yml +26 -4
- data/CHANGELOG.md +16 -0
- data/Gemfile +3 -1
- data/README.md +2 -10
- data/chewy.gemspec +0 -1
- data/gemfiles/Gemfile.rails-3.2.active_record +6 -0
- data/gemfiles/Gemfile.rails-3.2.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-3.2.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.0.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.0.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.0.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.0.mongoid.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.1.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.1.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.1.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.1.mongoid.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.2.active_record +6 -0
- data/gemfiles/Gemfile.rails-4.2.active_record.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.2.active_record.will_paginate +7 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid +6 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid.kaminari +7 -0
- data/gemfiles/Gemfile.rails-4.2.mongoid.will_paginate +7 -0
- data/lib/chewy.rb +33 -5
- data/lib/chewy/config.rb +1 -0
- data/lib/chewy/index/search.rb +6 -3
- data/lib/chewy/query.rb +74 -1
- data/lib/chewy/query/compose.rb +4 -4
- data/lib/chewy/query/pagination.rb +5 -4
- data/lib/chewy/query/pagination/kaminari.rb +1 -1
- data/lib/chewy/query/pagination/will_paginate.rb +27 -0
- data/lib/chewy/type.rb +1 -0
- data/lib/chewy/type/adapter/active_record.rb +2 -2
- data/lib/chewy/type/adapter/mongoid.rb +147 -0
- data/lib/chewy/type/adapter/object.rb +1 -1
- data/lib/chewy/type/import.rb +1 -0
- data/lib/chewy/type/observe.rb +34 -6
- data/lib/chewy/version.rb +1 -1
- data/spec/chewy/config_spec.rb +17 -17
- data/spec/chewy/fields/base_spec.rb +62 -62
- data/spec/chewy/fields/root_spec.rb +5 -5
- data/spec/chewy/index/actions_spec.rb +127 -127
- data/spec/chewy/index/aliases_spec.rb +9 -9
- data/spec/chewy/index/search_spec.rb +4 -4
- data/spec/chewy/index/settings_spec.rb +33 -33
- data/spec/chewy/index_spec.rb +49 -49
- data/spec/chewy/query/criteria_spec.rb +173 -161
- data/spec/chewy/query/filters_spec.rb +76 -76
- data/spec/chewy/query/loading_spec.rb +54 -23
- data/spec/chewy/query/nodes/and_spec.rb +4 -4
- data/spec/chewy/query/nodes/bool_spec.rb +8 -8
- data/spec/chewy/query/nodes/equal_spec.rb +19 -19
- data/spec/chewy/query/nodes/exists_spec.rb +6 -6
- data/spec/chewy/query/nodes/has_child_spec.rb +25 -25
- data/spec/chewy/query/nodes/has_parent_spec.rb +25 -25
- data/spec/chewy/query/nodes/match_all_spec.rb +1 -1
- data/spec/chewy/query/nodes/missing_spec.rb +4 -4
- data/spec/chewy/query/nodes/not_spec.rb +4 -4
- data/spec/chewy/query/nodes/or_spec.rb +4 -4
- data/spec/chewy/query/nodes/prefix_spec.rb +5 -5
- data/spec/chewy/query/nodes/query_spec.rb +2 -2
- data/spec/chewy/query/nodes/range_spec.rb +18 -18
- data/spec/chewy/query/nodes/raw_spec.rb +1 -1
- data/spec/chewy/query/nodes/regexp_spec.rb +18 -18
- data/spec/chewy/query/nodes/script_spec.rb +4 -4
- data/spec/chewy/query/pagination/kaminari_spec.rb +41 -39
- data/spec/chewy/query/pagination/will_paginage_spec.rb +60 -0
- data/spec/chewy/query/pagination_spec.rb +8 -7
- data/spec/chewy/query_spec.rb +166 -167
- data/spec/chewy/rspec/update_index_spec.rb +1 -1
- data/spec/chewy/runtime/version_spec.rb +30 -30
- data/spec/chewy/runtime_spec.rb +3 -3
- data/spec/chewy/type/actions_spec.rb +3 -3
- data/spec/chewy/type/adapter/active_record_spec.rb +143 -143
- data/spec/chewy/type/adapter/mongoid_spec.rb +219 -0
- data/spec/chewy/type/adapter/object_spec.rb +39 -39
- data/spec/chewy/type/import_spec.rb +67 -37
- data/spec/chewy/type/mapping_spec.rb +12 -12
- data/spec/chewy/type/observe_spec.rb +5 -6
- data/spec/chewy/type/wrapper_spec.rb +12 -12
- data/spec/chewy_spec.rb +26 -28
- data/spec/spec_helper.rb +19 -31
- data/spec/support/active_record.rb +52 -0
- data/spec/support/class_helpers.rb +0 -4
- data/spec/support/mongoid.rb +87 -0
- metadata +33 -18
- data/gemfiles/Gemfile.rails-3.2 +0 -15
- data/gemfiles/Gemfile.rails-4.0 +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 11ba7489e6c513a9a8e81cc220a64718808fcde0
|
|
4
|
+
data.tar.gz: 9a3336d2e062b027ab1ca03396dc6eac549d964a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 17dfc426d7a92c958d5d1548aa7420e380b984297c650e8b9f29658306a8ef30b9a75c3a6d86e4149af6d3d6008228fd709a98797f881fc28600fbcb511cee26
|
|
7
|
+
data.tar.gz: 55899323c6be7796cd3640a3386c9f39ccfd785a01c0594e74a53fd9022b508e0372644dc92a739c997b9f3ba094e021ed81b2c6b4fc125910a2bec2b15aa515
|
data/.travis.yml
CHANGED
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
- 1.9.3
|
|
4
3
|
- 2.0.0
|
|
5
|
-
- 2.1.
|
|
4
|
+
- 2.1.3
|
|
6
5
|
# - rbx
|
|
7
6
|
gemfile:
|
|
8
7
|
- Gemfile
|
|
9
|
-
- gemfiles/Gemfile.rails-3.2
|
|
10
|
-
- gemfiles/Gemfile.rails-
|
|
8
|
+
- gemfiles/Gemfile.rails-3.2.active_record
|
|
9
|
+
- gemfiles/Gemfile.rails-3.2.active_record.kaminari
|
|
10
|
+
- gemfiles/Gemfile.rails-3.2.active_record.will_paginate
|
|
11
|
+
- gemfiles/Gemfile.rails-4.0.active_record
|
|
12
|
+
- gemfiles/Gemfile.rails-4.0.active_record.kaminari
|
|
13
|
+
- gemfiles/Gemfile.rails-4.0.active_record.will_paginate
|
|
14
|
+
- gemfiles/Gemfile.rails-4.0.mongoid
|
|
15
|
+
- gemfiles/Gemfile.rails-4.0.mongoid.kaminari
|
|
16
|
+
- gemfiles/Gemfile.rails-4.0.mongoid.will_paginate
|
|
17
|
+
- gemfiles/Gemfile.rails-4.1.active_record
|
|
18
|
+
- gemfiles/Gemfile.rails-4.1.active_record.kaminari
|
|
19
|
+
- gemfiles/Gemfile.rails-4.1.active_record.will_paginate
|
|
20
|
+
- gemfiles/Gemfile.rails-4.1.mongoid
|
|
21
|
+
- gemfiles/Gemfile.rails-4.1.mongoid.kaminari
|
|
22
|
+
- gemfiles/Gemfile.rails-4.1.mongoid.will_paginate
|
|
23
|
+
# - gemfiles/Gemfile.rails-4.2.active_record
|
|
24
|
+
# - gemfiles/Gemfile.rails-4.2.active_record.kaminari
|
|
25
|
+
# - gemfiles/Gemfile.rails-4.2.active_record.will_paginate
|
|
26
|
+
# - gemfiles/Gemfile.rails-4.2.mongoid
|
|
27
|
+
# - gemfiles/Gemfile.rails-4.2.mongoid.kaminari
|
|
28
|
+
# - gemfiles/Gemfile.rails-4.2.mongoid.will_paginate
|
|
29
|
+
|
|
11
30
|
before_install:
|
|
12
31
|
- curl -# https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.0.tar.gz | tar xz -C /tmp
|
|
13
32
|
before_script:
|
|
14
33
|
- TEST_CLUSTER_COMMAND="/tmp/elasticsearch-1.3.0/bin/elasticsearch" rake elasticsearch:start
|
|
34
|
+
services:
|
|
35
|
+
- mongodb
|
|
36
|
+
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# master
|
|
2
2
|
|
|
3
|
+
# Version 0.6.0
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
* Mongoid support YaY! (@fabiotomio, @leemhenson)
|
|
8
|
+
|
|
9
|
+
* `urgent: true` option for `update_index` is deprecated and will be removed soon, use `Chewy.atomic` instead
|
|
10
|
+
|
|
11
|
+
* `timeout` and `timed_out` support (@MarkMurphy)
|
|
12
|
+
|
|
13
|
+
* will_paginate support (@josecoelho)
|
|
14
|
+
|
|
15
|
+
## Bugfixes
|
|
16
|
+
|
|
17
|
+
* All the query chainable methods delegated to indexes and types (partially @Linuus)
|
|
18
|
+
|
|
3
19
|
# Version 0.5.2
|
|
4
20
|
|
|
5
21
|
## Changes
|
data/Gemfile
CHANGED
|
@@ -3,10 +3,12 @@ source 'https://rubygems.org'
|
|
|
3
3
|
# Specify your gem's dependencies in chewy.gemspec
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
|
+
gem 'activerecord'
|
|
7
|
+
# gem 'mongoid'
|
|
6
8
|
gem 'kaminari', require: false
|
|
9
|
+
# gem 'will_paginate', require: false
|
|
7
10
|
|
|
8
11
|
group :test do
|
|
9
|
-
|
|
10
12
|
gem 'guard'
|
|
11
13
|
gem 'guard-rspec'
|
|
12
14
|
gem 'rb-inotify', require: false
|
data/README.md
CHANGED
|
@@ -241,15 +241,8 @@ There are 3 strategies for index updating: do not update index at all, update ri
|
|
|
241
241
|
By default Chewy indexes are not updated when the observed model is saved or destroyed.
|
|
242
242
|
This depends on the `Chewy.urgent_update` (false by default) or on the per-model update config.
|
|
243
243
|
If you will perform `Chewy.urgent_update = true`, all the models will start to update elasticsearch
|
|
244
|
-
index right after save.
|
|
244
|
+
index right after save.
|
|
245
245
|
|
|
246
|
-
```ruby
|
|
247
|
-
class User < ActiveRecord::Base
|
|
248
|
-
update_index 'users#user', 'self', urgent: true
|
|
249
|
-
end
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
will make the same effect for User model only.
|
|
253
246
|
Note than urgent update options affects only outside-atomic-block behavour. Inside
|
|
254
247
|
the `Chewy.atomic { }` block indexes updates as described below.
|
|
255
248
|
|
|
@@ -764,9 +757,8 @@ See [update_index.rb](lib/chewy/rspec/update_index.rb) for more details.
|
|
|
764
757
|
* Typecasting support
|
|
765
758
|
* Advanced (simplyfied) query DSL: `UsersIndex.query { email == 'my@gmail.com' }` will produce term query
|
|
766
759
|
* update_all support
|
|
767
|
-
* Other than ActiveRecord ORMs support (Mongoid)
|
|
768
760
|
* Maybe, closer ORM/ODM integration, creating index classes implicitly
|
|
769
|
-
*
|
|
761
|
+
* Async indexes updating
|
|
770
762
|
|
|
771
763
|
## Contributing
|
|
772
764
|
|
data/chewy.gemspec
CHANGED
|
@@ -23,7 +23,6 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
spec.add_development_dependency 'rspec-its', '~> 1.0.1'
|
|
24
24
|
spec.add_development_dependency 'rspec-collection_matchers'
|
|
25
25
|
spec.add_development_dependency 'sqlite3'
|
|
26
|
-
spec.add_development_dependency 'activerecord', '>= 3.2'
|
|
27
26
|
spec.add_development_dependency 'database_cleaner'
|
|
28
27
|
spec.add_development_dependency 'elasticsearch-extensions'
|
|
29
28
|
spec.add_development_dependency 'rubysl', '~> 2.0' if RUBY_ENGINE == 'rbx'
|
data/lib/chewy.rb
CHANGED
|
@@ -7,10 +7,6 @@ require 'i18n/core_ext/hash'
|
|
|
7
7
|
require 'chewy/backports/deep_dup' unless Object.respond_to?(:deep_dup)
|
|
8
8
|
require 'singleton'
|
|
9
9
|
|
|
10
|
-
begin
|
|
11
|
-
require 'kaminari'
|
|
12
|
-
rescue LoadError
|
|
13
|
-
end
|
|
14
10
|
require 'elasticsearch'
|
|
15
11
|
|
|
16
12
|
require 'chewy/version'
|
|
@@ -23,10 +19,40 @@ require 'chewy/query'
|
|
|
23
19
|
require 'chewy/fields/base'
|
|
24
20
|
require 'chewy/fields/root'
|
|
25
21
|
|
|
22
|
+
begin
|
|
23
|
+
require 'kaminari'
|
|
24
|
+
require 'chewy/query/pagination/kaminari'
|
|
25
|
+
rescue LoadError
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
require 'will_paginate'
|
|
30
|
+
require 'will_paginate/collection'
|
|
31
|
+
require 'chewy/query/pagination/will_paginate'
|
|
32
|
+
rescue LoadError
|
|
33
|
+
end
|
|
34
|
+
|
|
26
35
|
require 'chewy/railtie' if defined?(::Rails)
|
|
27
36
|
|
|
28
37
|
ActiveSupport.on_load(:active_record) do
|
|
29
38
|
extend Chewy::Type::Observe::ActiveRecordMethods
|
|
39
|
+
|
|
40
|
+
begin
|
|
41
|
+
require 'will_paginate/active_record'
|
|
42
|
+
rescue LoadError
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
ActiveSupport.on_load(:mongoid) do
|
|
47
|
+
module Mongoid::Document::ClassMethods
|
|
48
|
+
include Chewy::Type::Observe::MongoidMethods
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
begin
|
|
52
|
+
require 'will_paginate/mongoid'
|
|
53
|
+
require 'chewy/query/pagination/will_paginate'
|
|
54
|
+
rescue LoadError
|
|
55
|
+
end
|
|
30
56
|
end
|
|
31
57
|
|
|
32
58
|
module Chewy
|
|
@@ -62,8 +88,10 @@ module Chewy
|
|
|
62
88
|
def create_type index, target, options = {}, &block
|
|
63
89
|
type = Class.new(Chewy::Type)
|
|
64
90
|
|
|
65
|
-
adapter = if (target.is_a?(Class) && target < ActiveRecord::Base) || target.is_a?(::ActiveRecord::Relation)
|
|
91
|
+
adapter = if defined?(::ActiveRecord::Base) && ((target.is_a?(Class) && target < ::ActiveRecord::Base) || target.is_a?(::ActiveRecord::Relation))
|
|
66
92
|
Chewy::Type::Adapter::ActiveRecord.new(target, options)
|
|
93
|
+
elsif defined?(::Mongoid::Document) && ((target.is_a?(Class) && target.ancestors.include?(::Mongoid::Document)) || target.is_a?(::Mongoid::Criteria))
|
|
94
|
+
Chewy::Type::Adapter::Mongoid.new(target, options)
|
|
67
95
|
else
|
|
68
96
|
Chewy::Type::Adapter::Object.new(target, options)
|
|
69
97
|
end
|
data/lib/chewy/config.rb
CHANGED
data/lib/chewy/index/search.rb
CHANGED
|
@@ -4,9 +4,12 @@ module Chewy
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
7
|
-
singleton_class.delegate :explain, :
|
|
8
|
-
:
|
|
9
|
-
:
|
|
7
|
+
singleton_class.delegate :explain, :query_mode, :filter_mode, :post_filter_mode,
|
|
8
|
+
:timeout, :limit, :offset, :highlight, :rescore, :facets, :script_score,
|
|
9
|
+
:boost_factor, :random_score, :field_value_factor, :decay, :aggregations,
|
|
10
|
+
:suggest, :none, :strategy, :query, :filter, :post_filter, :boost_mode,
|
|
11
|
+
:score_mode, :order, :reorder, :only, :types, :delete_all, :total,
|
|
12
|
+
:total_count, :total_entries, to: :all
|
|
10
13
|
end
|
|
11
14
|
|
|
12
15
|
module ClassMethods
|
data/lib/chewy/query.rb
CHANGED
|
@@ -224,6 +224,55 @@ module Chewy
|
|
|
224
224
|
chain { criteria.update_options post_filter_mode: value }
|
|
225
225
|
end
|
|
226
226
|
|
|
227
|
+
# A search timeout, bounding the search request to be executed within the
|
|
228
|
+
# specified time value and bail with the hits accumulated up to that point
|
|
229
|
+
# when expired. Defaults to no timeout.
|
|
230
|
+
#
|
|
231
|
+
# By default, the coordinating node waits to receive a response from all
|
|
232
|
+
# shards. If one node is having trouble, it could slow down the response to
|
|
233
|
+
# all search requests.
|
|
234
|
+
#
|
|
235
|
+
# The timeout parameter tells the coordinating node how long it should wait
|
|
236
|
+
# before giving up and just returning the results that it already has. It
|
|
237
|
+
# can be better to return some results than none at all.
|
|
238
|
+
#
|
|
239
|
+
# The response to a search request will indicate whether the search timed
|
|
240
|
+
# out and how many shards responded successfully:
|
|
241
|
+
#
|
|
242
|
+
# ...
|
|
243
|
+
# "timed_out": true,
|
|
244
|
+
# "_shards": {
|
|
245
|
+
# "total": 5,
|
|
246
|
+
# "successful": 4,
|
|
247
|
+
# "failed": 1
|
|
248
|
+
# },
|
|
249
|
+
# ...
|
|
250
|
+
#
|
|
251
|
+
# The primary shard assigned to perform the index operation might not be
|
|
252
|
+
# available when the index operation is executed. Some reasons for this
|
|
253
|
+
# might be that the primary shard is currently recovering from a gateway or
|
|
254
|
+
# undergoing relocation. By default, the index operation will wait on the
|
|
255
|
+
# primary shard to become available for up to 1 minute before failing and
|
|
256
|
+
# responding with an error. The timeout parameter can be used to explicitly
|
|
257
|
+
# specify how long it waits.
|
|
258
|
+
#
|
|
259
|
+
# UsersIndex.timeout("5000ms")
|
|
260
|
+
#
|
|
261
|
+
# Timeout is not a circuit breaker.
|
|
262
|
+
#
|
|
263
|
+
# It should be noted that this timeout does not halt the execution of the
|
|
264
|
+
# query, it merely tells the coordinating node to return the results
|
|
265
|
+
# collected so far and to close the connection. In the background, other
|
|
266
|
+
# shards may still be processing the query even though results have been
|
|
267
|
+
# sent.
|
|
268
|
+
#
|
|
269
|
+
# Use the timeout because it is important to your SLA, not because you want
|
|
270
|
+
# to abort the execution of long running queries.
|
|
271
|
+
#
|
|
272
|
+
def timeout value
|
|
273
|
+
chain { criteria.update_request_options timeout: value }
|
|
274
|
+
end
|
|
275
|
+
|
|
227
276
|
# Sets elasticsearch <tt>size</tt> search request param
|
|
228
277
|
# Default value is set in the elasticsearch and is 10.
|
|
229
278
|
#
|
|
@@ -790,6 +839,28 @@ module Chewy
|
|
|
790
839
|
_delete_all_response
|
|
791
840
|
end
|
|
792
841
|
|
|
842
|
+
# Returns request total time elapsed as reported by elasticsearch
|
|
843
|
+
#
|
|
844
|
+
# UsersIndex.query(...).filter(...).took
|
|
845
|
+
#
|
|
846
|
+
def took
|
|
847
|
+
_response['took']
|
|
848
|
+
end
|
|
849
|
+
|
|
850
|
+
# Returns request timed_out as reported by elasticsearch
|
|
851
|
+
#
|
|
852
|
+
# The timed_out value tells us whether the query timed out or not.
|
|
853
|
+
#
|
|
854
|
+
# By default, search requests do not timeout. If low response times are more
|
|
855
|
+
# important to you than complete results, you can specify a timeout as 10 or
|
|
856
|
+
# "10ms" (10 milliseconds), or "1s" (1 second). See #timeout method.
|
|
857
|
+
#
|
|
858
|
+
# UsersIndex.query(...).filter(...).timed_out
|
|
859
|
+
#
|
|
860
|
+
def timed_out
|
|
861
|
+
_response['timed_out']
|
|
862
|
+
end
|
|
863
|
+
|
|
793
864
|
protected
|
|
794
865
|
|
|
795
866
|
def initialize_clone other
|
|
@@ -835,7 +906,9 @@ module Chewy
|
|
|
835
906
|
def _results
|
|
836
907
|
@_results ||= (criteria.none? || _response == {} ? [] : _response['hits']['hits']).map do |hit|
|
|
837
908
|
attributes = (hit['_source'] || {}).merge(hit['highlight'] || {}, &RESULT_MERGER)
|
|
838
|
-
attributes.reverse_merge!(id: hit['_id'])
|
|
909
|
+
attributes.reverse_merge!(id: hit['_id'])
|
|
910
|
+
.merge!(_score: hit['_score'])
|
|
911
|
+
.merge!(_explanation: hit['_explanation'])
|
|
839
912
|
|
|
840
913
|
wrapper = index.type_hash[hit['_type']].new attributes
|
|
841
914
|
wrapper._data = hit
|