chewy 5.0.0 → 5.2.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/.circleci/config.yml +214 -0
- data/Appraisals +1 -17
- data/CHANGELOG.md +40 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/README.md +61 -35
- data/chewy.gemspec +4 -4
- data/gemfiles/rails.5.2.activerecord.gemfile +4 -3
- data/gemfiles/{rails.5.0.activerecord.gemfile → rails.5.2.mongoid.6.4.gemfile} +4 -3
- data/gemfiles/{rails.5.0.mongoid.6.1.gemfile → rails.6.0.activerecord.gemfile} +4 -3
- data/gemfiles/{rails.5.1.activerecord.gemfile → rails.6.1.activerecord.gemfile} +6 -3
- data/gemfiles/ruby3.gemfile +10 -0
- data/lib/chewy/backports/duplicable.rb +1 -1
- data/lib/chewy/fields/base.rb +1 -1
- data/lib/chewy/fields/root.rb +2 -2
- data/lib/chewy/index/actions.rb +9 -3
- data/lib/chewy/query/loading.rb +1 -1
- data/lib/chewy/query/nodes/field.rb +1 -1
- data/lib/chewy/query.rb +5 -0
- data/lib/chewy/railtie.rb +1 -1
- data/lib/chewy/search/loader.rb +1 -1
- data/lib/chewy/search/parameters/allow_partial_search_results.rb +27 -0
- data/lib/chewy/search/parameters/indices.rb +123 -0
- data/lib/chewy/search/parameters.rb +24 -6
- data/lib/chewy/search/request.rb +76 -51
- data/lib/chewy/search/scrolling.rb +3 -5
- data/lib/chewy/search.rb +1 -5
- data/lib/chewy/strategy/active_job.rb +1 -1
- data/lib/chewy/strategy/sidekiq.rb +1 -1
- data/lib/chewy/type/adapter/active_record.rb +1 -1
- data/lib/chewy/type/adapter/mongoid.rb +1 -1
- data/lib/chewy/type/adapter/orm.rb +1 -1
- data/lib/chewy/type/adapter/sequel.rb +1 -1
- data/lib/chewy/type/import/bulk_request.rb +4 -2
- data/lib/chewy/type/import/journal_builder.rb +1 -1
- data/lib/chewy/type/import/routine.rb +1 -1
- data/lib/chewy/type/import.rb +3 -3
- data/lib/chewy/type/mapping.rb +4 -4
- data/lib/chewy/type/observe.rb +3 -3
- data/lib/chewy/type/witchcraft.rb +1 -1
- data/lib/chewy/type/wrapper.rb +1 -1
- data/lib/chewy/version.rb +1 -1
- data/lib/chewy.rb +1 -1
- data/spec/chewy/config_spec.rb +1 -1
- data/spec/chewy/fields/base_spec.rb +11 -9
- data/spec/chewy/index/actions_spec.rb +2 -2
- data/spec/chewy/journal_spec.rb +1 -1
- data/spec/chewy/search/parameters/indices_spec.rb +191 -0
- data/spec/chewy/search/parameters_spec.rb +20 -3
- data/spec/chewy/search/request_spec.rb +25 -9
- data/spec/chewy/search/response_spec.rb +8 -2
- data/spec/chewy/search_spec.rb +2 -2
- data/spec/chewy/strategy/active_job_spec.rb +15 -2
- data/spec/chewy/strategy/shoryuken_spec.rb +6 -2
- data/spec/chewy/strategy/sidekiq_spec.rb +6 -2
- data/spec/chewy/type/adapter/active_record_spec.rb +3 -3
- data/spec/chewy/type/import/bulk_builder_spec.rb +1 -1
- data/spec/chewy/type/observe_spec.rb +4 -4
- data/spec/spec_helper.rb +4 -1
- metadata +21 -22
- data/.travis.yml +0 -45
- data/gemfiles/rails.4.0.activerecord.gemfile +0 -15
- data/gemfiles/rails.4.1.activerecord.gemfile +0 -15
- data/gemfiles/rails.4.2.activerecord.gemfile +0 -16
- data/gemfiles/rails.4.2.mongoid.5.2.gemfile +0 -16
- data/gemfiles/rails.5.1.mongoid.6.3.gemfile +0 -16
- data/spec/chewy/search/parameters/indices_boost_spec.rb +0 -83
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce34ae965f4efd39230e5e7fd8cd6d63a17c5e645745f7565ad4feea944244bb
|
4
|
+
data.tar.gz: b4fcade45c69fd1003b22d0b3a1a7e6e1f2f042f422fcf5dc510250d7c63bf6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2266cf1f1b14d4dd70f0c34c07f3b722fc8a15b9532bc8a7c332f387634982b3ccac87a1bb692ca0023d588692cfb3f090f2410f3775a3e2678f3d08d762045a
|
7
|
+
data.tar.gz: 9ca016cc817585547e994597a08e14c7484dc13a5f9a7d35b1685cb9135b604b0ba94221120c87dbe4a2b6c3e67dec3a105f2de2014eb82e8081b45dad960f31
|
@@ -0,0 +1,214 @@
|
|
1
|
+
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
2
|
+
version: 2.1
|
3
|
+
|
4
|
+
es56-env: &es56-env
|
5
|
+
cluster.name: elasticsearch
|
6
|
+
transport.host: localhost
|
7
|
+
network.host: 127.0.0.1
|
8
|
+
http.port: 9250
|
9
|
+
discovery.type: single-node
|
10
|
+
xpack.security.enabled: false
|
11
|
+
xpack.monitoring.enabled: false
|
12
|
+
|
13
|
+
workflows:
|
14
|
+
build:
|
15
|
+
jobs:
|
16
|
+
- rubocop
|
17
|
+
- rspec-ruby-26-activerecord61
|
18
|
+
- rspec-ruby-26-activerecord60
|
19
|
+
- rspec-ruby-26-activerecord52
|
20
|
+
- rspec-ruby-26-mongoid
|
21
|
+
- rspec-ruby-27-activerecord61
|
22
|
+
- rspec-ruby-27-activerecord60
|
23
|
+
- rspec-ruby-27-activerecord52
|
24
|
+
- rspec-ruby-27-mongoid
|
25
|
+
- rspec-ruby-30-activerecord61
|
26
|
+
|
27
|
+
commands:
|
28
|
+
rspec-test:
|
29
|
+
description: Test rspec in current ruby
|
30
|
+
parameters:
|
31
|
+
pre-steps:
|
32
|
+
description: Necessary steps after checkout
|
33
|
+
type: steps
|
34
|
+
default: []
|
35
|
+
steps:
|
36
|
+
- checkout
|
37
|
+
- run:
|
38
|
+
name: ruby version
|
39
|
+
command: |
|
40
|
+
ruby -e "STDERR.puts RUBY_VERSION; puts RUBY_VERSION.gsub(/^(\d+)\.(\d+)\..*/, '\1_\2')" > .ruby.version
|
41
|
+
- run:
|
42
|
+
name: Gemfile.lock version
|
43
|
+
command: |
|
44
|
+
echo "$GEMFILE.lock" > .Gemfile.lock.path
|
45
|
+
- steps: << parameters.pre-steps >>
|
46
|
+
- restore_cache:
|
47
|
+
keys:
|
48
|
+
- dependencies-{{ checksum ".ruby.version" }}-{{ checksum ".Gemfile.lock.path" }}
|
49
|
+
- run:
|
50
|
+
name: install dependencies
|
51
|
+
command: |
|
52
|
+
bundle install --jobs=4 --retry=3 --path vendor/bundle --gemfile=$GEMFILE
|
53
|
+
- save_cache:
|
54
|
+
paths:
|
55
|
+
- ./vendor/bundle
|
56
|
+
key: dependencies-{{ checksum ".ruby.version" }}-{{ checksum ".Gemfile.lock.path" }}
|
57
|
+
- run:
|
58
|
+
name: Disable replication of elastic indices
|
59
|
+
command: |
|
60
|
+
curl -XPUT 'http://localhost:9250/_all/_settings?preserve_existing=true' -d '{
|
61
|
+
"index.number_of_replicas":"0"
|
62
|
+
}'
|
63
|
+
- run:
|
64
|
+
name: run tests
|
65
|
+
command: |
|
66
|
+
ruby -v
|
67
|
+
git config --global user.email "you@example.com"
|
68
|
+
git config --global user.name "Your Name"
|
69
|
+
mkdir /tmp/test-results
|
70
|
+
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
|
71
|
+
BUNDLE_GEMFILE=$GEMFILE bundle exec rspec --format progress --format RspecJunitFormatter --out /tmp/test-results/rspec.xml $TEST_FILES
|
72
|
+
- store_test_results:
|
73
|
+
path: /tmp/test-results
|
74
|
+
|
75
|
+
jobs:
|
76
|
+
rubocop:
|
77
|
+
docker:
|
78
|
+
- image: circleci/ruby:2.6
|
79
|
+
working_directory: ~/repo
|
80
|
+
steps:
|
81
|
+
- checkout
|
82
|
+
- run:
|
83
|
+
name: ruby version
|
84
|
+
command: |
|
85
|
+
ruby -e "STDERR.puts RUBY_VERSION; puts RUBY_VERSION.gsub(/^(\d+)\.(\d+)\..*/, '\1_\2')" > .ruby.version
|
86
|
+
- run:
|
87
|
+
name: Gemfile.lock version
|
88
|
+
command: |
|
89
|
+
echo "$GEMFILE.lock" > .Gemfile.lock.path
|
90
|
+
- restore_cache:
|
91
|
+
keys:
|
92
|
+
- dependencies-{{ checksum ".ruby.version" }}-{{ checksum ".Gemfile.lock.path" }}
|
93
|
+
- run:
|
94
|
+
name: install dependencies
|
95
|
+
command: |
|
96
|
+
bundle install --jobs=4 --retry=3 --path vendor/bundle --binstubs=/usr/local/bundle/bin
|
97
|
+
- save_cache:
|
98
|
+
paths:
|
99
|
+
- ./vendor/bundle
|
100
|
+
key: dependencies-{{ checksum ".ruby.version" }}-{{ checksum ".Gemfile.lock.path" }}
|
101
|
+
- run:
|
102
|
+
name: run rubocop
|
103
|
+
command: |
|
104
|
+
bundle exec rubocop --format simple
|
105
|
+
|
106
|
+
rspec-ruby-26-activerecord52:
|
107
|
+
docker:
|
108
|
+
- image: circleci/ruby:2.6
|
109
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
110
|
+
environment:
|
111
|
+
<<: *es56-env
|
112
|
+
working_directory: ~/repo
|
113
|
+
environment:
|
114
|
+
GEMFILE: gemfiles/rails.5.2.activerecord.gemfile
|
115
|
+
steps:
|
116
|
+
- rspec-test
|
117
|
+
|
118
|
+
rspec-ruby-26-activerecord60:
|
119
|
+
docker:
|
120
|
+
- image: circleci/ruby:2.6
|
121
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
122
|
+
environment:
|
123
|
+
<<: *es56-env
|
124
|
+
working_directory: ~/repo
|
125
|
+
environment:
|
126
|
+
GEMFILE: gemfiles/rails.6.0.activerecord.gemfile
|
127
|
+
steps:
|
128
|
+
- rspec-test
|
129
|
+
|
130
|
+
rspec-ruby-26-activerecord61:
|
131
|
+
docker:
|
132
|
+
- image: circleci/ruby:2.6
|
133
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
134
|
+
environment:
|
135
|
+
<<: *es56-env
|
136
|
+
working_directory: ~/repo
|
137
|
+
environment:
|
138
|
+
GEMFILE: gemfiles/rails.6.1.activerecord.gemfile
|
139
|
+
steps:
|
140
|
+
- rspec-test
|
141
|
+
|
142
|
+
rspec-ruby-26-mongoid:
|
143
|
+
docker:
|
144
|
+
- image: circleci/ruby:2.6
|
145
|
+
- image: circleci/mongo:4.2.5
|
146
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
147
|
+
environment:
|
148
|
+
<<: *es56-env
|
149
|
+
working_directory: ~/repo
|
150
|
+
environment:
|
151
|
+
GEMFILE: gemfiles/rails.5.2.mongoid.6.4.gemfile
|
152
|
+
steps:
|
153
|
+
- rspec-test
|
154
|
+
|
155
|
+
rspec-ruby-27-activerecord52:
|
156
|
+
docker:
|
157
|
+
- image: circleci/ruby:2.7
|
158
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
159
|
+
environment:
|
160
|
+
<<: *es56-env
|
161
|
+
working_directory: ~/repo
|
162
|
+
environment:
|
163
|
+
GEMFILE: gemfiles/rails.5.2.activerecord.gemfile
|
164
|
+
steps:
|
165
|
+
- rspec-test
|
166
|
+
|
167
|
+
rspec-ruby-27-activerecord60:
|
168
|
+
docker:
|
169
|
+
- image: circleci/ruby:2.7
|
170
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
171
|
+
environment:
|
172
|
+
<<: *es56-env
|
173
|
+
working_directory: ~/repo
|
174
|
+
environment:
|
175
|
+
GEMFILE: gemfiles/rails.6.0.activerecord.gemfile
|
176
|
+
steps:
|
177
|
+
- rspec-test
|
178
|
+
|
179
|
+
rspec-ruby-27-activerecord61:
|
180
|
+
docker:
|
181
|
+
- image: circleci/ruby:2.7
|
182
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
183
|
+
environment:
|
184
|
+
<<: *es56-env
|
185
|
+
working_directory: ~/repo
|
186
|
+
environment:
|
187
|
+
GEMFILE: gemfiles/rails.6.1.activerecord.gemfile
|
188
|
+
steps:
|
189
|
+
- rspec-test
|
190
|
+
|
191
|
+
rspec-ruby-27-mongoid:
|
192
|
+
docker:
|
193
|
+
- image: circleci/ruby:2.7
|
194
|
+
- image: circleci/mongo:4.2.5
|
195
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
196
|
+
environment:
|
197
|
+
<<: *es56-env
|
198
|
+
working_directory: ~/repo
|
199
|
+
environment:
|
200
|
+
GEMFILE: gemfiles/rails.5.2.mongoid.6.4.gemfile
|
201
|
+
steps:
|
202
|
+
- rspec-test
|
203
|
+
|
204
|
+
rspec-ruby-30-activerecord61:
|
205
|
+
docker:
|
206
|
+
- image: circleci/ruby:3.0
|
207
|
+
- image: docker.elastic.co/elasticsearch/elasticsearch:5.6.7
|
208
|
+
environment:
|
209
|
+
<<: *es56-env
|
210
|
+
working_directory: ~/repo
|
211
|
+
environment:
|
212
|
+
GEMFILE: gemfiles/rails.6.1.activerecord.gemfile
|
213
|
+
steps:
|
214
|
+
- rspec-test
|
data/Appraisals
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
%w[5.0 5.1].each do |activesupport|
|
19
|
+
%w[5.0 5.1 5.2].each do |activesupport|
|
20
20
|
appraise "rails.#{activesupport}.activerecord" do
|
21
21
|
gem 'activerecord', "~> #{activesupport}.0"
|
22
22
|
gem 'activesupport', "~> #{activesupport}.0"
|
@@ -34,22 +34,6 @@ end
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
appraise 'rails.5.2.activerecord' do
|
38
|
-
gem 'activerecord', '~> 5.2.0.rc1'
|
39
|
-
gem 'activesupport', '~> 5.2.0.rc1'
|
40
|
-
|
41
|
-
gem 'activejob', '~> 5.2.0.rc1'
|
42
|
-
gem 'resque', require: false
|
43
|
-
gem 'shoryuken', require: false
|
44
|
-
gem 'aws-sdk-sqs', require: false
|
45
|
-
gem 'sidekiq', require: false
|
46
|
-
|
47
|
-
gem 'kaminari-core', '~> 1.1.0', require: false
|
48
|
-
gem 'will_paginate', require: false
|
49
|
-
|
50
|
-
gem 'parallel', require: false
|
51
|
-
end
|
52
|
-
|
53
37
|
appraise 'rails.4.2.mongoid.5.2' do
|
54
38
|
gem 'mongoid', '~> 5.2.0'
|
55
39
|
gem 'activesupport', '~> 4.2.0'
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,45 @@
|
|
1
1
|
# master
|
2
2
|
|
3
|
+
# Version 5.2.0
|
4
|
+
|
5
|
+
## Changes
|
6
|
+
|
7
|
+
* Add support for Ruby 3 (@lowang, #734)
|
8
|
+
|
9
|
+
* Correct deprecation warning for Elasticsearch 5.6 to 6: empty query for`_delete_by_query`, delete by alias, `index_already_exists_exception` renaming (@bhacaz, #735)
|
10
|
+
|
11
|
+
* Update gemspec dependencies for Rails. Update CI gemfiles and matrix to tests against current LTS Rails versions. (@bhacaz, #733)
|
12
|
+
|
13
|
+
* Tweak some wording and formatting; add a note about compatibility; update copyright; remove broken logo; update the CI badge (@bbatsov)
|
14
|
+
|
15
|
+
* Update instructions for AWS ElasticSearch (@olancheg, #714)
|
16
|
+
|
17
|
+
* Fix more ruby 2.7 keyword params deprecation warnings (@aglushkov, #728)
|
18
|
+
|
19
|
+
* Fixed all deprecation warnings in Ruby 2.7 (@gseddon, #715)
|
20
|
+
|
21
|
+
* Added Ruby 2.7 to CircleCI config (@mrzasa, #718)
|
22
|
+
|
23
|
+
* Allow configuration of Active Job queue name (@mrzasa, #707)
|
24
|
+
|
25
|
+
* Setup CI on CircleCI (@mrzasa, #711)
|
26
|
+
|
27
|
+
* Fix deprecation warning for contructing new BigDecimal (@AlexVPopov, #710)
|
28
|
+
|
29
|
+
# Version 5.1.0
|
30
|
+
|
31
|
+
## Breaking changes
|
32
|
+
|
33
|
+
* Add support for multiple indices in request (@pyromaniac, #657)
|
34
|
+
|
35
|
+
* Support `search_type`, `request_cache`, and `allow_partial_search_results` as query string parameters (@mattzollinhofer, #647)
|
36
|
+
|
37
|
+
## Changes
|
38
|
+
|
39
|
+
* Speed up imports when `bulk_size` is specified (@yahooguntu, #606)
|
40
|
+
|
41
|
+
* Insert `RequestStrategy` middleware before `ActionDispatch::ShowExceptions` (@dck, #682)
|
42
|
+
|
3
43
|
# Version 5.0.0
|
4
44
|
|
5
45
|
## Breaking changes
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
[](http://badge.fury.io/rb/chewy)
|
2
|
-
[](https://circleci.com/gh/toptal/chewy/tree/master)
|
3
3
|
[](https://codeclimate.com/github/toptal/chewy)
|
4
4
|
[](http://inch-ci.org/github/toptal/chewy)
|
5
5
|
|
6
|
-
<p align="right">Sponsored by</p>
|
7
|
-
<p align="right"><a href="https://www.toptal.com/"><img src="https://www.toptal.com/assets/public/blocks/logo/big.png" alt="Toptal" width="105" height="34"></a></p>
|
8
|
-
|
9
6
|
# Chewy
|
10
7
|
|
11
|
-
Chewy is an ODM
|
8
|
+
Chewy is an ODM (Object Document Mapper), built on top of the [the official Elasticsearch client](https://github.com/elastic/elasticsearch-ruby).
|
12
9
|
|
13
10
|
## Table of Contents
|
14
11
|
|
@@ -34,7 +31,7 @@ Chewy is an ODM and wrapper for [the official Elasticsearch client](https://gith
|
|
34
31
|
* [Non-block notation](#non-block-notation)
|
35
32
|
* [Designing your own strategies](#designing-your-own-strategies)
|
36
33
|
* [Rails application strategies integration](#rails-application-strategies-integration)
|
37
|
-
* [ActiveSupport::Notifications support](#
|
34
|
+
* [ActiveSupport::Notifications support](#activesupportnotifications-support)
|
38
35
|
* [NewRelic integration](#newrelic-integration)
|
39
36
|
* [Search requests](#search-requests)
|
40
37
|
* [Composing requests](#composing-requests)
|
@@ -51,13 +48,14 @@ Chewy is an ODM and wrapper for [the official Elasticsearch client](https://gith
|
|
51
48
|
* [chewy:deploy](#chewydeploy)
|
52
49
|
* [Parallelizing rake tasks](#parallelizing-rake-tasks)
|
53
50
|
* [chewy:journal](#chewyjournal)
|
54
|
-
* [
|
51
|
+
* [RSpec integration](#rspec-integration)
|
55
52
|
* [Minitest integration](#minitest-integration)
|
56
|
-
* [TODO a.k.a coming soon](#todo-aka-coming-soon)
|
57
53
|
* [Contributing](#contributing)
|
58
54
|
|
59
55
|
## Why Chewy?
|
60
56
|
|
57
|
+
In this section we'll cover why you might want to use Chewy instead of the official `elasticsearch-ruby` client gem.
|
58
|
+
|
61
59
|
* Multi-model indices.
|
62
60
|
|
63
61
|
Index classes are independent from ORM/ODM models. Now, implementing e.g. cross-model autocomplete is much easier. You can just define the index and work with it in an object-oriented style. You can define several types for index - one per indexed model.
|
@@ -76,10 +74,9 @@ Chewy is an ODM and wrapper for [the official Elasticsearch client](https://gith
|
|
76
74
|
|
77
75
|
* Support for ActiveRecord, [Mongoid](https://github.com/mongoid/mongoid) and [Sequel](https://github.com/jeremyevans/sequel).
|
78
76
|
|
79
|
-
|
80
77
|
## Installation
|
81
78
|
|
82
|
-
Add this line to your application's Gemfile
|
79
|
+
Add this line to your application's `Gemfile`:
|
83
80
|
|
84
81
|
gem 'chewy'
|
85
82
|
|
@@ -91,13 +88,29 @@ Or install it yourself as:
|
|
91
88
|
|
92
89
|
$ gem install chewy
|
93
90
|
|
91
|
+
## Compatibility
|
92
|
+
|
93
|
+
### Ruby
|
94
|
+
|
95
|
+
Chewy is compatible with MRI 2.5-3.0¹.
|
96
|
+
|
97
|
+
> ¹ Ruby 3 is only supported with Rails 6.1
|
98
|
+
|
99
|
+
### Elasticsearch
|
100
|
+
|
101
|
+
Chewy 5 is compatible with Elasticsearch 5. Future versions of Chewy will support Elasticsearch 6 and Elasticsearch 7.
|
102
|
+
|
94
103
|
## Usage
|
95
104
|
|
96
105
|
### Client settings
|
97
106
|
|
98
|
-
There are two ways to configure the Chewy client:
|
107
|
+
There are two ways to configure the Chewy client:
|
99
108
|
|
100
|
-
|
109
|
+
* via the hash `Chewy.settings`
|
110
|
+
* via the configuration file `chewy.yml`
|
111
|
+
|
112
|
+
You can create `chewy.yml` manually or run `rails g chewy:install` to
|
113
|
+
generate it.
|
101
114
|
|
102
115
|
```ruby
|
103
116
|
# config/initializers/chewy.rb
|
@@ -129,25 +142,29 @@ Chewy.logger = Logger.new(STDOUT)
|
|
129
142
|
|
130
143
|
See [config.rb](lib/chewy/config.rb) for more details.
|
131
144
|
|
132
|
-
####
|
133
|
-
|
145
|
+
#### AWS Elasticsearch
|
146
|
+
|
147
|
+
If you would like to use AWS's Elasticsearch using an IAM user policy, you will need to sign your requests for the `es:*` action by injecting the appropriate headers passing a proc to `transport_options`.
|
148
|
+
You'll need an additional gem for Faraday middleware: add `gem 'faraday_middleware-aws-sigv4'` to your Gemfile.
|
134
149
|
|
135
150
|
```ruby
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
151
|
+
require 'faraday_middleware/aws_sigv4'
|
152
|
+
|
153
|
+
Chewy.settings = {
|
154
|
+
host: 'http://my-es-instance-on-aws.us-east-1.es.amazonaws.com:80',
|
155
|
+
port: 80, # 443 for https host
|
156
|
+
transport_options: {
|
157
|
+
headers: { content_type: 'application/json' },
|
158
|
+
proc: -> (f) do
|
159
|
+
f.request :aws_sigv4,
|
160
|
+
service: 'es',
|
161
|
+
region: 'us-east-1',
|
162
|
+
access_key_id: ENV['AWS_ACCESS_KEY'],
|
163
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
164
|
+
end
|
149
165
|
}
|
150
|
-
|
166
|
+
}
|
167
|
+
```
|
151
168
|
|
152
169
|
### Index definition
|
153
170
|
|
@@ -678,6 +695,11 @@ Chewy.strategy(:sidekiq) do
|
|
678
695
|
end
|
679
696
|
```
|
680
697
|
|
698
|
+
The default queue name is `chewy`, you can customize it in settings: `sidekiq.queue_name`
|
699
|
+
```
|
700
|
+
Chewy.settings[:sidekiq] = {queue: :low}
|
701
|
+
```
|
702
|
+
|
681
703
|
#### `:active_job`
|
682
704
|
|
683
705
|
This does the same thing as `:atomic`, but using ActiveJob. This will inherit the ActiveJob configuration settings including the `active_job.queue_adapter` setting for the environment. Patch `Chewy::Strategy::ActiveJob::Worker` for index updates improving.
|
@@ -688,6 +710,11 @@ Chewy.strategy(:active_job) do
|
|
688
710
|
end
|
689
711
|
```
|
690
712
|
|
713
|
+
The default queue name is `chewy`, you can customize it in settings: `active_job.queue_name`
|
714
|
+
```
|
715
|
+
Chewy.settings[:active_job] = {queue: :low}
|
716
|
+
```
|
717
|
+
|
691
718
|
#### `:shoryuken`
|
692
719
|
|
693
720
|
This does the same thing as `:atomic`, but asynchronously using shoryuken. Patch `Chewy::Strategy::Shoryuken::Worker` for index updates improving.
|
@@ -1061,7 +1088,7 @@ rake chewy:journal:apply["$(date -v-1H -u +%FT%TZ)"] # apply journaled changes f
|
|
1061
1088
|
rake chewy:journal:apply["$(date -v-1H -u +%FT%TZ)",users] # apply journaled changes for the past hour on UsersIndex only
|
1062
1089
|
```
|
1063
1090
|
|
1064
|
-
###
|
1091
|
+
### RSpec integration
|
1065
1092
|
|
1066
1093
|
Just add `require 'chewy/rspec'` to your spec_helper.rb and you will get additional features: See [update_index.rb](lib/chewy/rspec/update_index.rb) for more details.
|
1067
1094
|
|
@@ -1082,12 +1109,6 @@ If you use `DatabaseCleaner` in your tests with [the `transaction` strategy](htt
|
|
1082
1109
|
Chewy.use_after_commit_callbacks = !Rails.env.test?
|
1083
1110
|
```
|
1084
1111
|
|
1085
|
-
## TODO a.k.a coming soon:
|
1086
|
-
|
1087
|
-
* Typecasting support
|
1088
|
-
* update_all support
|
1089
|
-
* Maybe, closer ORM/ODM integration, creating index classes implicitly
|
1090
|
-
|
1091
1112
|
## Contributing
|
1092
1113
|
|
1093
1114
|
1. Fork it (http://github.com/toptal/chewy/fork)
|
@@ -1103,3 +1124,8 @@ Use the following Rake tasks to control the Elasticsearch cluster while developi
|
|
1103
1124
|
rake elasticsearch:start # start Elasticsearch cluster on 9250 port for tests
|
1104
1125
|
rake elasticsearch:stop # stop Elasticsearch
|
1105
1126
|
```
|
1127
|
+
|
1128
|
+
## Copyright
|
1129
|
+
|
1130
|
+
Copyright (c) 2013-2021 Toptal, LLC. See [LICENSE.txt](LICENSE.txt) for
|
1131
|
+
further details.
|
data/chewy.gemspec
CHANGED
@@ -5,8 +5,8 @@ require 'chewy/version'
|
|
5
5
|
Gem::Specification.new do |spec| # rubocop:disable BlockLength
|
6
6
|
spec.name = 'chewy'
|
7
7
|
spec.version = Chewy::VERSION
|
8
|
-
spec.authors = ['pyromaniac']
|
9
|
-
spec.email = ['kinwizard@gmail.com']
|
8
|
+
spec.authors = ['Toptal, LLC', 'pyromaniac']
|
9
|
+
spec.email = ['open-source@toptal.com', 'kinwizard@gmail.com']
|
10
10
|
spec.summary = 'Elasticsearch ODM client wrapper'
|
11
11
|
spec.description = 'Chewy provides functionality for Elasticsearch index handling, documents import mappings and chainable query DSL'
|
12
12
|
spec.homepage = 'https://github.com/toptal/chewy'
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec| # rubocop:disable BlockLength
|
|
22
22
|
spec.add_development_dependency 'elasticsearch-extensions'
|
23
23
|
spec.add_development_dependency 'rake'
|
24
24
|
spec.add_development_dependency 'resque_spec'
|
25
|
-
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_development_dependency 'rspec', '>= 3.7.0'
|
26
26
|
spec.add_development_dependency 'rspec-collection_matchers'
|
27
27
|
spec.add_development_dependency 'rspec-its'
|
28
28
|
spec.add_development_dependency 'rubocop', '0.52.1'
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec| # rubocop:disable BlockLength
|
|
32
32
|
spec.add_development_dependency 'method_source'
|
33
33
|
spec.add_development_dependency 'unparser'
|
34
34
|
|
35
|
-
spec.add_dependency 'activesupport', '>=
|
35
|
+
spec.add_dependency 'activesupport', '>= 5.2'
|
36
36
|
spec.add_dependency 'elasticsearch', '>= 2.0.0'
|
37
37
|
spec.add_dependency 'elasticsearch-dsl'
|
38
38
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "activerecord", "~> 5.2.0
|
6
|
-
gem "activesupport", "~> 5.2.0
|
7
|
-
gem "activejob", "~> 5.2.0
|
5
|
+
gem "activerecord", "~> 5.2.0"
|
6
|
+
gem "activesupport", "~> 5.2.0"
|
7
|
+
gem "activejob", "~> 5.2.0"
|
8
8
|
gem "resque", require: false
|
9
9
|
gem "shoryuken", require: false
|
10
10
|
gem "aws-sdk-sqs", require: false
|
@@ -12,5 +12,6 @@ gem "sidekiq", require: false
|
|
12
12
|
gem "kaminari-core", "~> 1.1.0", require: false
|
13
13
|
gem "will_paginate", require: false
|
14
14
|
gem "parallel", require: false
|
15
|
+
gem 'rspec_junit_formatter', '~> 0.4.1'
|
15
16
|
|
16
17
|
gemspec path: "../"
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "
|
6
|
-
gem "activesupport", "~> 5.
|
7
|
-
gem "activejob", "~> 5.
|
5
|
+
gem "mongoid", "~> 6.4.0"
|
6
|
+
gem "activesupport", "~> 5.2.0"
|
7
|
+
gem "activejob", "~> 5.2.0"
|
8
8
|
gem "resque", require: false
|
9
9
|
gem "shoryuken", require: false
|
10
10
|
gem "aws-sdk-sqs", require: false
|
@@ -12,5 +12,6 @@ gem "sidekiq", require: false
|
|
12
12
|
gem "kaminari-core", "~> 1.1.0", require: false
|
13
13
|
gem "will_paginate", require: false
|
14
14
|
gem "parallel", require: false
|
15
|
+
gem 'rspec_junit_formatter', '~> 0.4.1'
|
15
16
|
|
16
17
|
gemspec path: "../"
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "
|
6
|
-
gem "activesupport", "~>
|
7
|
-
gem "activejob", "~>
|
5
|
+
gem "activerecord", "~> 6.0.0"
|
6
|
+
gem "activesupport", "~> 6.0.0"
|
7
|
+
gem "activejob", "~> 6.0.0"
|
8
8
|
gem "resque", require: false
|
9
9
|
gem "shoryuken", require: false
|
10
10
|
gem "aws-sdk-sqs", require: false
|
@@ -12,5 +12,6 @@ gem "sidekiq", require: false
|
|
12
12
|
gem "kaminari-core", "~> 1.1.0", require: false
|
13
13
|
gem "will_paginate", require: false
|
14
14
|
gem "parallel", require: false
|
15
|
+
gem 'rspec_junit_formatter', '~> 0.4.1'
|
15
16
|
|
16
17
|
gemspec path: "../"
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "activerecord", "~>
|
6
|
-
gem "activesupport", "~>
|
7
|
-
gem "activejob", "~>
|
5
|
+
gem "activerecord", "~> 6.1.0"
|
6
|
+
gem "activesupport", "~> 6.1.0"
|
7
|
+
gem "activejob", "~> 6.1.0"
|
8
8
|
gem "resque", require: false
|
9
9
|
gem "shoryuken", require: false
|
10
10
|
gem "aws-sdk-sqs", require: false
|
@@ -12,5 +12,8 @@ gem "sidekiq", require: false
|
|
12
12
|
gem "kaminari-core", "~> 1.1.0", require: false
|
13
13
|
gem "will_paginate", require: false
|
14
14
|
gem "parallel", require: false
|
15
|
+
gem 'rspec_junit_formatter', '~> 0.4.1'
|
16
|
+
|
17
|
+
eval(File.read('gemfiles/ruby3.gemfile'), nil, 'gemfiles/ruby3.gemfile') if RUBY_VERSION >= '3.0.0'
|
15
18
|
|
16
19
|
gemspec path: "../"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# kwargs support was added here:
|
2
|
+
# https://github.com/rspec/rspec-mocks/blob/main/lib/rspec/mocks/method_double.rb#L66
|
3
|
+
# but this change was not released yet so for the time being use main branch
|
4
|
+
gem 'rspec', github: 'rspec/rspec', branch: 'main'
|
5
|
+
gem 'rspec-core', github: 'rspec/rspec-core', branch: 'main'
|
6
|
+
gem 'rspec-expectations', github: 'rspec/rspec-expectations', branch: 'main'
|
7
|
+
gem 'rspec-mocks', github: 'rspec/rspec-mocks', branch: 'main'
|
8
|
+
gem 'rspec-support', github: 'rspec/rspec-support', branch: 'main'
|
9
|
+
# extracted from stdlib
|
10
|
+
gem 'rexml'
|
data/lib/chewy/fields/base.rb
CHANGED