chewy 0.10.1 → 7.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- data/.github/workflows/ruby.yml +74 -0
- data/.rubocop.yml +28 -23
- data/.rubocop_todo.yml +110 -22
- data/CHANGELOG.md +480 -298
- data/CODE_OF_CONDUCT.md +14 -0
- data/CONTRIBUTING.md +63 -0
- data/Gemfile +3 -5
- data/Guardfile +3 -1
- data/LICENSE.txt +1 -1
- data/README.md +571 -333
- data/chewy.gemspec +12 -15
- data/gemfiles/rails.5.2.activerecord.gemfile +11 -0
- data/gemfiles/rails.6.0.activerecord.gemfile +11 -0
- data/gemfiles/rails.6.1.activerecord.gemfile +13 -0
- data/gemfiles/rails.7.0.activerecord.gemfile +13 -0
- data/lib/chewy/config.rb +48 -77
- data/lib/chewy/errors.rb +4 -10
- data/lib/chewy/fields/base.rb +88 -16
- data/lib/chewy/fields/root.rb +15 -21
- data/lib/chewy/index/actions.rb +67 -38
- data/lib/chewy/{type → index}/adapter/active_record.rb +18 -4
- data/lib/chewy/{type → index}/adapter/base.rb +11 -12
- data/lib/chewy/{type → index}/adapter/object.rb +28 -32
- data/lib/chewy/{type → index}/adapter/orm.rb +26 -24
- data/lib/chewy/index/aliases.rb +14 -5
- data/lib/chewy/index/crutch.rb +40 -0
- data/lib/chewy/index/import/bulk_builder.rb +311 -0
- data/lib/chewy/{type → index}/import/bulk_request.rb +10 -9
- data/lib/chewy/{type → index}/import/journal_builder.rb +11 -12
- data/lib/chewy/{type → index}/import/routine.rb +19 -18
- data/lib/chewy/{type → index}/import.rb +82 -36
- data/lib/chewy/{type → index}/mapping.rb +63 -62
- data/lib/chewy/index/observe/active_record_methods.rb +87 -0
- data/lib/chewy/index/observe/callback.rb +34 -0
- data/lib/chewy/index/observe.rb +17 -0
- data/lib/chewy/index/settings.rb +2 -0
- data/lib/chewy/index/specification.rb +13 -10
- data/lib/chewy/{type → index}/syncer.rb +62 -63
- data/lib/chewy/{type → index}/witchcraft.rb +15 -9
- data/lib/chewy/{type → index}/wrapper.rb +16 -6
- data/lib/chewy/index.rb +68 -93
- data/lib/chewy/journal.rb +25 -14
- data/lib/chewy/minitest/helpers.rb +91 -18
- data/lib/chewy/minitest/search_index_receiver.rb +29 -33
- data/lib/chewy/multi_search.rb +62 -0
- data/lib/chewy/railtie.rb +8 -24
- data/lib/chewy/rake_helper.rb +141 -112
- data/lib/chewy/rspec/build_query.rb +12 -0
- data/lib/chewy/rspec/helpers.rb +55 -0
- data/lib/chewy/rspec/update_index.rb +58 -49
- data/lib/chewy/rspec.rb +2 -0
- data/lib/chewy/runtime.rb +1 -1
- data/lib/chewy/search/loader.rb +19 -41
- data/lib/chewy/search/parameters/allow_partial_search_results.rb +27 -0
- data/lib/chewy/search/parameters/collapse.rb +16 -0
- data/lib/chewy/search/parameters/concerns/query_storage.rb +6 -5
- data/lib/chewy/search/parameters/ignore_unavailable.rb +27 -0
- data/lib/chewy/search/parameters/indices.rb +78 -0
- data/lib/chewy/search/parameters/none.rb +1 -3
- data/lib/chewy/search/parameters/order.rb +6 -19
- data/lib/chewy/search/parameters/source.rb +5 -1
- data/lib/chewy/search/parameters/track_total_hits.rb +16 -0
- data/lib/chewy/search/parameters.rb +28 -8
- data/lib/chewy/search/query_proxy.rb +9 -2
- data/lib/chewy/search/request.rb +207 -157
- data/lib/chewy/search/response.rb +5 -5
- data/lib/chewy/search/scoping.rb +7 -8
- data/lib/chewy/search/scrolling.rb +14 -13
- data/lib/chewy/search.rb +7 -26
- data/lib/chewy/stash.rb +27 -29
- data/lib/chewy/strategy/active_job.rb +2 -2
- data/lib/chewy/strategy/atomic.rb +1 -1
- data/lib/chewy/strategy/atomic_no_refresh.rb +18 -0
- data/lib/chewy/strategy/base.rb +10 -0
- data/lib/chewy/strategy/delayed_sidekiq/scheduler.rb +148 -0
- data/lib/chewy/strategy/delayed_sidekiq/worker.rb +52 -0
- data/lib/chewy/strategy/delayed_sidekiq.rb +17 -0
- data/lib/chewy/strategy/lazy_sidekiq.rb +64 -0
- data/lib/chewy/strategy/sidekiq.rb +3 -2
- data/lib/chewy/strategy.rb +6 -19
- data/lib/chewy/version.rb +1 -1
- data/lib/chewy.rb +37 -80
- data/lib/generators/chewy/install_generator.rb +1 -1
- data/lib/tasks/chewy.rake +26 -32
- data/migration_guide.md +56 -0
- data/spec/chewy/config_spec.rb +27 -57
- data/spec/chewy/fields/base_spec.rb +457 -174
- data/spec/chewy/fields/root_spec.rb +24 -32
- data/spec/chewy/fields/time_fields_spec.rb +5 -5
- data/spec/chewy/index/actions_spec.rb +425 -60
- data/spec/chewy/{type → index}/adapter/active_record_spec.rb +110 -44
- data/spec/chewy/{type → index}/adapter/object_spec.rb +21 -6
- data/spec/chewy/index/aliases_spec.rb +3 -3
- data/spec/chewy/index/import/bulk_builder_spec.rb +494 -0
- data/spec/chewy/{type → index}/import/bulk_request_spec.rb +5 -12
- data/spec/chewy/{type → index}/import/journal_builder_spec.rb +22 -30
- data/spec/chewy/{type → index}/import/routine_spec.rb +19 -19
- data/spec/chewy/{type → index}/import_spec.rb +154 -95
- data/spec/chewy/index/mapping_spec.rb +135 -0
- data/spec/chewy/index/observe/active_record_methods_spec.rb +68 -0
- data/spec/chewy/index/observe/callback_spec.rb +139 -0
- data/spec/chewy/index/observe_spec.rb +143 -0
- data/spec/chewy/index/settings_spec.rb +3 -1
- data/spec/chewy/index/specification_spec.rb +32 -33
- data/spec/chewy/{type → index}/syncer_spec.rb +14 -19
- data/spec/chewy/{type → index}/witchcraft_spec.rb +34 -21
- data/spec/chewy/index/wrapper_spec.rb +100 -0
- data/spec/chewy/index_spec.rb +99 -114
- data/spec/chewy/journal_spec.rb +56 -101
- data/spec/chewy/minitest/helpers_spec.rb +122 -14
- data/spec/chewy/minitest/search_index_receiver_spec.rb +24 -26
- data/spec/chewy/multi_search_spec.rb +84 -0
- data/spec/chewy/rake_helper_spec.rb +325 -101
- data/spec/chewy/rspec/build_query_spec.rb +34 -0
- data/spec/chewy/rspec/helpers_spec.rb +61 -0
- data/spec/chewy/rspec/update_index_spec.rb +106 -102
- data/spec/chewy/runtime_spec.rb +2 -2
- data/spec/chewy/search/loader_spec.rb +19 -53
- data/spec/chewy/search/pagination/kaminari_examples.rb +3 -5
- data/spec/chewy/search/pagination/kaminari_spec.rb +1 -1
- data/spec/chewy/search/parameters/collapse_spec.rb +5 -0
- data/spec/chewy/search/parameters/ignore_unavailable_spec.rb +67 -0
- data/spec/chewy/search/parameters/indices_spec.rb +99 -0
- data/spec/chewy/search/parameters/none_spec.rb +1 -1
- data/spec/chewy/search/parameters/order_spec.rb +18 -11
- data/spec/chewy/search/parameters/query_storage_examples.rb +67 -21
- data/spec/chewy/search/parameters/search_after_spec.rb +4 -1
- data/spec/chewy/search/parameters/source_spec.rb +8 -2
- data/spec/chewy/search/parameters/track_total_hits_spec.rb +5 -0
- data/spec/chewy/search/parameters_spec.rb +39 -8
- data/spec/chewy/search/query_proxy_spec.rb +68 -17
- data/spec/chewy/search/request_spec.rb +360 -149
- data/spec/chewy/search/response_spec.rb +35 -25
- data/spec/chewy/search/scrolling_spec.rb +28 -26
- data/spec/chewy/search_spec.rb +73 -53
- data/spec/chewy/stash_spec.rb +16 -26
- data/spec/chewy/strategy/active_job_spec.rb +23 -10
- data/spec/chewy/strategy/atomic_no_refresh_spec.rb +60 -0
- data/spec/chewy/strategy/atomic_spec.rb +9 -10
- data/spec/chewy/strategy/delayed_sidekiq_spec.rb +190 -0
- data/spec/chewy/strategy/lazy_sidekiq_spec.rb +214 -0
- data/spec/chewy/strategy/sidekiq_spec.rb +14 -10
- data/spec/chewy/strategy_spec.rb +19 -15
- data/spec/chewy_spec.rb +17 -110
- data/spec/spec_helper.rb +7 -22
- data/spec/support/active_record.rb +43 -5
- metadata +123 -198
- data/.travis.yml +0 -53
- data/Appraisals +0 -79
- data/LEGACY_DSL.md +0 -497
- data/gemfiles/rails.4.0.activerecord.gemfile +0 -14
- data/gemfiles/rails.4.1.activerecord.gemfile +0 -14
- data/gemfiles/rails.4.2.activerecord.gemfile +0 -15
- data/gemfiles/rails.4.2.mongoid.5.1.gemfile +0 -15
- data/gemfiles/rails.5.0.activerecord.gemfile +0 -15
- data/gemfiles/rails.5.0.mongoid.6.0.gemfile +0 -15
- data/gemfiles/rails.5.1.activerecord.gemfile +0 -15
- data/gemfiles/rails.5.1.mongoid.6.1.gemfile +0 -15
- data/gemfiles/sequel.4.45.gemfile +0 -11
- data/lib/chewy/backports/deep_dup.rb +0 -46
- data/lib/chewy/backports/duplicable.rb +0 -91
- data/lib/chewy/query/compose.rb +0 -68
- data/lib/chewy/query/criteria.rb +0 -191
- data/lib/chewy/query/filters.rb +0 -227
- data/lib/chewy/query/loading.rb +0 -111
- data/lib/chewy/query/nodes/and.rb +0 -25
- data/lib/chewy/query/nodes/base.rb +0 -17
- data/lib/chewy/query/nodes/bool.rb +0 -34
- data/lib/chewy/query/nodes/equal.rb +0 -34
- data/lib/chewy/query/nodes/exists.rb +0 -20
- data/lib/chewy/query/nodes/expr.rb +0 -28
- data/lib/chewy/query/nodes/field.rb +0 -110
- data/lib/chewy/query/nodes/has_child.rb +0 -15
- data/lib/chewy/query/nodes/has_parent.rb +0 -15
- data/lib/chewy/query/nodes/has_relation.rb +0 -59
- data/lib/chewy/query/nodes/match_all.rb +0 -11
- data/lib/chewy/query/nodes/missing.rb +0 -20
- data/lib/chewy/query/nodes/not.rb +0 -25
- data/lib/chewy/query/nodes/or.rb +0 -25
- data/lib/chewy/query/nodes/prefix.rb +0 -19
- data/lib/chewy/query/nodes/query.rb +0 -20
- data/lib/chewy/query/nodes/range.rb +0 -63
- data/lib/chewy/query/nodes/raw.rb +0 -15
- data/lib/chewy/query/nodes/regexp.rb +0 -35
- data/lib/chewy/query/nodes/script.rb +0 -20
- data/lib/chewy/query/pagination.rb +0 -25
- data/lib/chewy/query.rb +0 -1098
- data/lib/chewy/search/pagination/will_paginate.rb +0 -43
- data/lib/chewy/search/parameters/types.rb +0 -20
- data/lib/chewy/strategy/resque.rb +0 -27
- data/lib/chewy/strategy/shoryuken.rb +0 -40
- data/lib/chewy/type/actions.rb +0 -43
- data/lib/chewy/type/adapter/mongoid.rb +0 -69
- data/lib/chewy/type/adapter/sequel.rb +0 -95
- data/lib/chewy/type/crutch.rb +0 -32
- data/lib/chewy/type/import/bulk_builder.rb +0 -122
- data/lib/chewy/type/observe.rb +0 -78
- data/lib/chewy/type.rb +0 -117
- data/lib/sequel/plugins/chewy_observe.rb +0 -78
- data/spec/chewy/query/criteria_spec.rb +0 -700
- data/spec/chewy/query/filters_spec.rb +0 -201
- data/spec/chewy/query/loading_spec.rb +0 -124
- data/spec/chewy/query/nodes/and_spec.rb +0 -12
- data/spec/chewy/query/nodes/bool_spec.rb +0 -14
- data/spec/chewy/query/nodes/equal_spec.rb +0 -32
- data/spec/chewy/query/nodes/exists_spec.rb +0 -18
- data/spec/chewy/query/nodes/has_child_spec.rb +0 -59
- data/spec/chewy/query/nodes/has_parent_spec.rb +0 -59
- data/spec/chewy/query/nodes/match_all_spec.rb +0 -11
- data/spec/chewy/query/nodes/missing_spec.rb +0 -16
- data/spec/chewy/query/nodes/not_spec.rb +0 -13
- data/spec/chewy/query/nodes/or_spec.rb +0 -12
- data/spec/chewy/query/nodes/prefix_spec.rb +0 -16
- data/spec/chewy/query/nodes/query_spec.rb +0 -12
- data/spec/chewy/query/nodes/range_spec.rb +0 -32
- data/spec/chewy/query/nodes/raw_spec.rb +0 -11
- data/spec/chewy/query/nodes/regexp_spec.rb +0 -43
- data/spec/chewy/query/nodes/script_spec.rb +0 -15
- data/spec/chewy/query/pagination/kaminari_spec.rb +0 -5
- data/spec/chewy/query/pagination/will_paginate_spec.rb +0 -5
- data/spec/chewy/query/pagination_spec.rb +0 -39
- data/spec/chewy/query_spec.rb +0 -636
- data/spec/chewy/search/pagination/will_paginate_examples.rb +0 -63
- data/spec/chewy/search/pagination/will_paginate_spec.rb +0 -23
- data/spec/chewy/search/parameters/indices_boost_spec.rb +0 -83
- data/spec/chewy/search/parameters/types_spec.rb +0 -5
- data/spec/chewy/strategy/resque_spec.rb +0 -46
- data/spec/chewy/strategy/shoryuken_spec.rb +0 -64
- data/spec/chewy/type/actions_spec.rb +0 -50
- data/spec/chewy/type/adapter/mongoid_spec.rb +0 -372
- data/spec/chewy/type/adapter/sequel_spec.rb +0 -472
- data/spec/chewy/type/import/bulk_builder_spec.rb +0 -279
- data/spec/chewy/type/mapping_spec.rb +0 -142
- data/spec/chewy/type/observe_spec.rb +0 -137
- data/spec/chewy/type/wrapper_spec.rb +0 -98
- data/spec/chewy/type_spec.rb +0 -55
- data/spec/support/mongoid.rb +0 -93
- data/spec/support/sequel.rb +0 -80
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
shared_examples :will_paginate do |request_base_class|
|
4
|
-
before { Chewy.massacre }
|
5
|
-
|
6
|
-
before do
|
7
|
-
stub_index(:products) do
|
8
|
-
define_type(:product) do
|
9
|
-
field :name
|
10
|
-
field :age, type: 'integer'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:except_fields) { %w[_score _explanation] }
|
16
|
-
let(:request_class) do
|
17
|
-
Class.new(request_base_class).tap do |k|
|
18
|
-
k.include Chewy::Search::Pagination::WillPaginate
|
19
|
-
end
|
20
|
-
end
|
21
|
-
let(:search) { request_class.new(ProductsIndex).order(:age) }
|
22
|
-
|
23
|
-
specify { expect(search.total_pages).to eq(1) } # defaults to 1 on will_paginate
|
24
|
-
|
25
|
-
context do
|
26
|
-
let(:data) { Array.new(10) { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
|
27
|
-
|
28
|
-
before { ProductsIndex::Product.import!(data.map { |h| double(h) }) }
|
29
|
-
before { allow(::WillPaginate).to receive_messages(per_page: 3) }
|
30
|
-
|
31
|
-
describe '#page' do
|
32
|
-
specify { expect(search.map { |e| e.attributes.except(*except_fields) }).to match_array(data) }
|
33
|
-
specify { expect(search.page(1).map { |e| e.attributes.except(*except_fields) }).to eq(data[0..2]) }
|
34
|
-
specify { expect(search.page(2).map { |e| e.attributes.except(*except_fields) }).to eq(data[3..5]) }
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '#paginate' do
|
38
|
-
specify { expect(search.paginate(page: 2, per_page: 4).map { |e| e.attributes.except(*except_fields) }).to eq(data[4..7]) }
|
39
|
-
specify { expect(search.paginate(per_page: 2, page: 3).page(3).map { |e| e.attributes.except(*except_fields) }).to eq(data[4..5]) }
|
40
|
-
specify { expect(search.paginate(per_page: 5).map { |e| e.attributes.except(*except_fields) }).to eq(data[0..4]) }
|
41
|
-
specify { expect(search.paginate(per_page: 4).map { |e| e.attributes.except(*except_fields) }).to eq(data[0..3]) }
|
42
|
-
end
|
43
|
-
|
44
|
-
describe '#total_pages' do
|
45
|
-
specify { expect(search.paginate(page: 2, per_page: 5).total_pages).to eq(2) }
|
46
|
-
specify { expect(search.paginate(page: 3, per_page: 2).total_pages).to eq(5) }
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '#total_entries' do
|
50
|
-
specify { expect(search.paginate(page: 1, per_page: 4).total_entries).to eq(10) }
|
51
|
-
specify { expect(search.query(range: {age: {gt: 20}}).limit(3).total_entries).to eq(8) }
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#load' do
|
55
|
-
specify { expect(search.paginate(per_page: 2, page: 1).load.first.age).to eq(10) }
|
56
|
-
specify { expect(search.paginate(per_page: 2, page: 3).load.first.age).to eq(50) }
|
57
|
-
specify { expect(search.paginate(per_page: 2, page: 3).load.page(2).load.first.age).to eq(30) }
|
58
|
-
|
59
|
-
specify { expect(search.paginate(per_page: 4, page: 1).load.total_count).to eq(10) }
|
60
|
-
specify { expect(search.paginate(per_page: 2, page: 3).load.total_pages).to eq(5) }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'chewy/search/pagination/will_paginate_examples'
|
2
|
-
|
3
|
-
describe Chewy::Search::Pagination::WillPaginate do
|
4
|
-
it_behaves_like :will_paginate, Chewy::Search::Request do
|
5
|
-
describe '#objects' do
|
6
|
-
let(:data) { Array.new(12) { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
|
7
|
-
|
8
|
-
before { ProductsIndex::Product.import!(data.map { |h| double(h) }) }
|
9
|
-
before { allow(::WillPaginate).to receive_messages(per_page: 17) }
|
10
|
-
|
11
|
-
# specify { expect(search.current_page).to eq(1) }
|
12
|
-
# specify { expect(search.per_page).to eq(0) }
|
13
|
-
specify { expect(search.objects.class).to eq(WillPaginate::Collection) }
|
14
|
-
specify { expect(search.objects.total_entries).to eq(12) }
|
15
|
-
specify { expect(search.objects.per_page).to eq(17) }
|
16
|
-
specify { expect(search.objects.current_page).to eq(1) }
|
17
|
-
specify { expect(search.paginate(per_page: 2, page: 3).objects.class).to eq(WillPaginate::Collection) }
|
18
|
-
specify { expect(search.paginate(per_page: 2, page: 3).objects.total_entries).to eq(12) }
|
19
|
-
specify { expect(search.paginate(per_page: 2, page: 3).objects.per_page).to eq(2) }
|
20
|
-
specify { expect(search.paginate(per_page: 2, page: 3).objects.current_page).to eq(3) }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Chewy::Search::Parameters::IndicesBoost do
|
4
|
-
subject { described_class.new(index: 1.2) }
|
5
|
-
|
6
|
-
describe '#initialize' do
|
7
|
-
specify { expect(described_class.new.value).to eq({}) }
|
8
|
-
specify { expect(described_class.new(nil).value).to eq({}) }
|
9
|
-
specify { expect(subject.value).to eq('index' => 1.2) }
|
10
|
-
specify { expect(described_class.new(index: '1.2', other: 2).value).to eq('index' => 1.2, 'other' => 2.0) }
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#replace!' do
|
14
|
-
specify do
|
15
|
-
expect { subject.replace!(nil) }
|
16
|
-
.to change { subject.value }.from('index' => 1.2).to({})
|
17
|
-
end
|
18
|
-
|
19
|
-
specify do
|
20
|
-
expect { subject.replace!(other: 3.1) }
|
21
|
-
.to change { subject.value }
|
22
|
-
.from('index' => 1.2).to('other' => 3.1)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#update!' do
|
27
|
-
specify do
|
28
|
-
expect { subject.update!(nil) }
|
29
|
-
.not_to change { subject.value }
|
30
|
-
end
|
31
|
-
|
32
|
-
specify do
|
33
|
-
expect { subject.update!(other: 3.1) }
|
34
|
-
.to change { subject.value }
|
35
|
-
.from('index' => 1.2).to('index' => 1.2, 'other' => 3.1)
|
36
|
-
end
|
37
|
-
|
38
|
-
context do
|
39
|
-
before { subject.update!(other: 3.1) }
|
40
|
-
|
41
|
-
specify do
|
42
|
-
expect { subject.update!(index: 1.5) }
|
43
|
-
.to change { subject.value }
|
44
|
-
.from('index' => 1.2, 'other' => 3.1).to('index' => 1.5, 'other' => 3.1)
|
45
|
-
end
|
46
|
-
|
47
|
-
specify do
|
48
|
-
expect { subject.update!(index: 1.5) }
|
49
|
-
.to change { subject.value.keys }
|
50
|
-
.from(%w[index other]).to(%w[other index])
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe '#merge!' do
|
56
|
-
specify do
|
57
|
-
expect { subject.merge!(described_class.new) }
|
58
|
-
.not_to change { subject.value }
|
59
|
-
end
|
60
|
-
|
61
|
-
specify do
|
62
|
-
expect { subject.merge!(described_class.new(other: 3.1)) }
|
63
|
-
.to change { subject.value }
|
64
|
-
.from('index' => 1.2)
|
65
|
-
.to('index' => 1.2, 'other' => 3.1)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe '#render' do
|
70
|
-
specify { expect(described_class.new.render).to be_nil }
|
71
|
-
specify { expect(described_class.new(index: 1.2).render).to eq(indices_boost: [{'index' => 1.2}]) }
|
72
|
-
specify { expect(described_class.new(index: 1.2, other: 1.3).render).to eq(indices_boost: [{'index' => 1.2}, {'other' => 1.3}]) }
|
73
|
-
specify { expect(described_class.new(index: 1.2, other: 1.3).tap { |i| i.update!(index: '1.5') }.render).to eq(indices_boost: [{'other' => 1.3}, {'index' => 1.5}]) }
|
74
|
-
end
|
75
|
-
|
76
|
-
describe '#==' do
|
77
|
-
specify { expect(described_class.new).to eq(described_class.new) }
|
78
|
-
specify { expect(described_class.new(index: 1.2)).to eq(described_class.new(index: 1.2)) }
|
79
|
-
specify { expect(described_class.new(index: 1.2)).not_to eq(described_class.new(other: 1.3)) }
|
80
|
-
specify { expect(described_class.new(index: 1.2, other: 1.3)).to eq(described_class.new(index: 1.2, other: 1.3)) }
|
81
|
-
specify { expect(described_class.new(index: 1.2, other: 1.3)).not_to eq(described_class.new(other: 1.3, index: 1.2)) }
|
82
|
-
end
|
83
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined?(::Resque)
|
4
|
-
require 'resque_spec'
|
5
|
-
|
6
|
-
describe Chewy::Strategy::Resque, :orm do
|
7
|
-
around { |example| Chewy.strategy(:bypass) { example.run } }
|
8
|
-
before { ResqueSpec.reset! }
|
9
|
-
before do
|
10
|
-
stub_model(:city) do
|
11
|
-
update_index('cities#city') { self }
|
12
|
-
end
|
13
|
-
|
14
|
-
stub_index(:cities) do
|
15
|
-
define_type City
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
let(:city) { City.create!(name: 'hello') }
|
20
|
-
let(:other_city) { City.create!(name: 'world') }
|
21
|
-
|
22
|
-
specify do
|
23
|
-
expect { [city, other_city].map(&:save!) }
|
24
|
-
.not_to update_index(CitiesIndex::City, strategy: :resque)
|
25
|
-
end
|
26
|
-
|
27
|
-
specify do
|
28
|
-
with_resque do
|
29
|
-
expect { [city, other_city].map(&:save!) }
|
30
|
-
.to update_index(CitiesIndex::City, strategy: :resque)
|
31
|
-
.and_reindex(city, other_city).only
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
specify do
|
36
|
-
expect(CitiesIndex::City).to receive(:import!).with([city.id, other_city.id], suffix: '201601')
|
37
|
-
Chewy::Strategy::Resque::Worker.perform('CitiesIndex::City', [city.id, other_city.id], suffix: '201601')
|
38
|
-
end
|
39
|
-
|
40
|
-
specify do
|
41
|
-
allow(Chewy).to receive(:disable_refresh_async).and_return(true)
|
42
|
-
expect(CitiesIndex::City).to receive(:import!).with([city.id, other_city.id], suffix: '201601', refresh: false)
|
43
|
-
Chewy::Strategy::Resque::Worker.perform('CitiesIndex::City', [city.id, other_city.id], suffix: '201601')
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined?(::Shoryuken)
|
4
|
-
describe Chewy::Strategy::Shoryuken do
|
5
|
-
around { |example| Chewy.strategy(:bypass) { example.run } }
|
6
|
-
before { ::Shoryuken.groups.clear }
|
7
|
-
before do
|
8
|
-
stub_model(:city) do
|
9
|
-
update_index('cities#city') { self }
|
10
|
-
end
|
11
|
-
|
12
|
-
stub_index(:cities) do
|
13
|
-
define_type City
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
let(:city) { City.create!(name: 'hello') }
|
18
|
-
let(:other_city) { City.create!(name: 'world') }
|
19
|
-
let(:queue) { instance_double(::Shoryuken::Queue) }
|
20
|
-
|
21
|
-
before do
|
22
|
-
allow(::Shoryuken::Queue).to receive(:new).and_return(queue)
|
23
|
-
allow(queue).to receive(:send_message).and_return(nil)
|
24
|
-
end
|
25
|
-
|
26
|
-
specify do
|
27
|
-
expect { [city, other_city].map(&:save!) }
|
28
|
-
.not_to update_index(CitiesIndex::City, strategy: :shoryuken)
|
29
|
-
end
|
30
|
-
|
31
|
-
specify do
|
32
|
-
Chewy.settings[:shoryuken] = {queue: 'low'}
|
33
|
-
expect(Chewy::Strategy::Shoryuken::Worker).to receive(:perform_async)
|
34
|
-
.with(hash_including(type: 'CitiesIndex::City', ids: [city.id, other_city.id]), hash_including(queue: 'low'))
|
35
|
-
Chewy.strategy(:shoryuken) do
|
36
|
-
[city, other_city].map(&:save!)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
let(:body) do
|
41
|
-
{
|
42
|
-
'type' => 'CitiesIndex::City',
|
43
|
-
'ids' => [city.id, other_city.id],
|
44
|
-
'options' => {'suffix' => '201601'}
|
45
|
-
}
|
46
|
-
end
|
47
|
-
let(:sqs_msg) do
|
48
|
-
double id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e',
|
49
|
-
body: body,
|
50
|
-
delete: nil
|
51
|
-
end
|
52
|
-
|
53
|
-
specify do
|
54
|
-
expect(CitiesIndex::City).to receive(:import!).with([city.id, other_city.id], suffix: '201601')
|
55
|
-
Chewy::Strategy::Shoryuken::Worker.new.perform(sqs_msg, body)
|
56
|
-
end
|
57
|
-
|
58
|
-
specify do
|
59
|
-
allow(Chewy).to receive(:disable_refresh_async).and_return(true)
|
60
|
-
expect(CitiesIndex::City).to receive(:import!).with([city.id, other_city.id], suffix: '201601', refresh: false)
|
61
|
-
Chewy::Strategy::Shoryuken::Worker.new.perform(sqs_msg, body)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Chewy::Type::Actions, :orm do
|
4
|
-
before { Chewy.massacre }
|
5
|
-
|
6
|
-
before do
|
7
|
-
stub_model(:city)
|
8
|
-
stub_index(:cities) do
|
9
|
-
define_type City do
|
10
|
-
field :name
|
11
|
-
field :updated_at, type: 'date'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
let!(:cities) { Array.new(3) { |i| City.create!(name: "Name#{i + 1}") } }
|
17
|
-
before { CitiesIndex::City.import }
|
18
|
-
|
19
|
-
describe '.reset' do
|
20
|
-
specify do
|
21
|
-
expect { CitiesIndex::City.reset }.to update_index(CitiesIndex::City)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe '.sync' do
|
26
|
-
before do
|
27
|
-
cities.first.destroy
|
28
|
-
sleep(1) if ActiveSupport::VERSION::STRING < '4.1.0'
|
29
|
-
cities.last.update(name: 'Name5')
|
30
|
-
end
|
31
|
-
let!(:additional_city) { City.create!(name: 'Name4') }
|
32
|
-
|
33
|
-
specify do
|
34
|
-
expect(CitiesIndex::City.sync).to match(
|
35
|
-
count: 3,
|
36
|
-
missing: contain_exactly(cities.first.id.to_s, additional_city.id.to_s),
|
37
|
-
outdated: [cities.last.id.to_s]
|
38
|
-
)
|
39
|
-
end
|
40
|
-
specify do
|
41
|
-
expect { CitiesIndex::City.sync }.to update_index(CitiesIndex::City)
|
42
|
-
.and_reindex(additional_city, cities.last)
|
43
|
-
.and_delete(cities.first).only
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe '.journal' do
|
48
|
-
specify { expect(CitiesIndex::City.journal).to be_a(Chewy::Journal) }
|
49
|
-
end
|
50
|
-
end
|