chewy 7.1.0 → 7.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/.github/workflows/ruby.yml +58 -0
- data/.rubocop.yml +13 -8
- data/.rubocop_todo.yml +110 -22
- data/CHANGELOG.md +53 -0
- data/Gemfile +0 -7
- data/Guardfile +3 -1
- data/README.md +282 -245
- data/chewy.gemspec +3 -5
- data/gemfiles/rails.5.2.activerecord.gemfile +8 -14
- data/gemfiles/rails.6.0.activerecord.gemfile +8 -14
- data/gemfiles/rails.6.1.activerecord.gemfile +8 -14
- data/lib/chewy.rb +21 -75
- data/lib/chewy/config.rb +40 -40
- data/lib/chewy/errors.rb +0 -12
- data/lib/chewy/fields/base.rb +11 -1
- data/lib/chewy/fields/root.rb +3 -4
- data/lib/chewy/index.rb +46 -87
- data/lib/chewy/index/actions.rb +51 -32
- data/lib/chewy/{type → index}/adapter/active_record.rb +12 -3
- data/lib/chewy/{type → index}/adapter/base.rb +2 -3
- data/lib/chewy/{type → index}/adapter/object.rb +27 -31
- data/lib/chewy/{type → index}/adapter/orm.rb +11 -14
- data/lib/chewy/{type → index}/crutch.rb +5 -5
- data/lib/chewy/{type → index}/import.rb +36 -27
- data/lib/chewy/{type → index}/import/bulk_builder.rb +15 -13
- data/lib/chewy/{type → index}/import/bulk_request.rb +6 -6
- data/lib/chewy/{type → index}/import/journal_builder.rb +10 -10
- data/lib/chewy/{type → index}/import/routine.rb +15 -14
- data/lib/chewy/{type → index}/mapping.rb +26 -31
- data/lib/chewy/{type → index}/observe.rb +9 -19
- data/lib/chewy/index/specification.rb +1 -0
- data/lib/chewy/{type → index}/syncer.rb +60 -57
- data/lib/chewy/{type → index}/witchcraft.rb +11 -7
- data/lib/chewy/{type → index}/wrapper.rb +2 -2
- data/lib/chewy/journal.rb +8 -8
- data/lib/chewy/minitest/helpers.rb +9 -13
- data/lib/chewy/minitest/search_index_receiver.rb +22 -26
- data/lib/chewy/railtie.rb +4 -2
- data/lib/chewy/rake_helper.rb +82 -107
- data/lib/chewy/rspec/update_index.rb +47 -43
- data/lib/chewy/search.rb +4 -17
- data/lib/chewy/search/loader.rb +18 -30
- data/lib/chewy/search/parameters.rb +4 -2
- data/lib/chewy/search/parameters/concerns/query_storage.rb +2 -2
- data/lib/chewy/search/parameters/source.rb +5 -1
- data/lib/chewy/search/query_proxy.rb +9 -2
- data/lib/chewy/search/request.rb +82 -86
- data/lib/chewy/search/response.rb +4 -4
- data/lib/chewy/search/scoping.rb +6 -7
- data/lib/chewy/search/scrolling.rb +11 -11
- data/lib/chewy/stash.rb +14 -22
- data/lib/chewy/strategy.rb +3 -19
- data/lib/chewy/strategy/sidekiq.rb +1 -0
- data/lib/chewy/version.rb +1 -1
- data/lib/generators/chewy/install_generator.rb +1 -1
- data/lib/tasks/chewy.rake +10 -22
- data/migration_guide.md +14 -0
- data/spec/chewy/config_spec.rb +14 -39
- data/spec/chewy/fields/base_spec.rb +412 -148
- data/spec/chewy/fields/root_spec.rb +16 -24
- data/spec/chewy/fields/time_fields_spec.rb +5 -5
- data/spec/chewy/index/actions_spec.rb +270 -24
- data/spec/chewy/{type → index}/adapter/active_record_spec.rb +68 -40
- data/spec/chewy/{type → index}/adapter/object_spec.rb +21 -6
- data/spec/chewy/{type → index}/import/bulk_builder_spec.rb +23 -31
- data/spec/chewy/{type → index}/import/bulk_request_spec.rb +5 -6
- data/spec/chewy/{type → index}/import/journal_builder_spec.rb +9 -15
- data/spec/chewy/{type → index}/import/routine_spec.rb +16 -16
- data/spec/chewy/{type → index}/import_spec.rb +102 -98
- data/spec/chewy/{type → index}/mapping_spec.rb +46 -54
- data/spec/chewy/index/observe_spec.rb +116 -0
- data/spec/chewy/index/settings_spec.rb +3 -1
- data/spec/chewy/index/specification_spec.rb +7 -17
- data/spec/chewy/{type → index}/syncer_spec.rb +14 -19
- data/spec/chewy/{type → index}/witchcraft_spec.rb +20 -22
- data/spec/chewy/index/wrapper_spec.rb +100 -0
- data/spec/chewy/index_spec.rb +59 -102
- data/spec/chewy/journal_spec.rb +9 -22
- data/spec/chewy/minitest/helpers_spec.rb +13 -15
- data/spec/chewy/minitest/search_index_receiver_spec.rb +22 -26
- data/spec/chewy/multi_search_spec.rb +4 -5
- data/spec/chewy/rake_helper_spec.rb +145 -55
- data/spec/chewy/rspec/update_index_spec.rb +74 -71
- data/spec/chewy/search/loader_spec.rb +19 -37
- 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/indices_spec.rb +2 -8
- data/spec/chewy/search/parameters/order_spec.rb +1 -1
- 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_spec.rb +12 -3
- data/spec/chewy/search/query_proxy_spec.rb +68 -17
- data/spec/chewy/search/request_spec.rb +222 -74
- data/spec/chewy/search/response_spec.rb +12 -12
- data/spec/chewy/search/scrolling_spec.rb +7 -9
- data/spec/chewy/search_spec.rb +32 -35
- data/spec/chewy/stash_spec.rb +9 -21
- data/spec/chewy/strategy/active_job_spec.rb +8 -8
- data/spec/chewy/strategy/atomic_spec.rb +9 -10
- data/spec/chewy/strategy/sidekiq_spec.rb +8 -8
- data/spec/chewy/strategy_spec.rb +19 -15
- data/spec/chewy_spec.rb +14 -100
- data/spec/spec_helper.rb +2 -21
- data/spec/support/active_record.rb +15 -5
- metadata +44 -103
- data/.circleci/config.yml +0 -214
- data/Appraisals +0 -81
- data/gemfiles/rails.5.2.mongoid.6.4.gemfile +0 -17
- data/gemfiles/sequel.4.45.gemfile +0 -11
- data/lib/chewy/search/pagination/will_paginate.rb +0 -43
- data/lib/chewy/strategy/resque.rb +0 -27
- data/lib/chewy/strategy/shoryuken.rb +0 -40
- data/lib/chewy/type.rb +0 -120
- data/lib/chewy/type/actions.rb +0 -43
- data/lib/chewy/type/adapter/mongoid.rb +0 -67
- data/lib/chewy/type/adapter/sequel.rb +0 -93
- data/lib/sequel/plugins/chewy_observe.rb +0 -63
- 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/strategy/resque_spec.rb +0 -46
- data/spec/chewy/strategy/shoryuken_spec.rb +0 -70
- 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/observe_spec.rb +0 -137
- data/spec/chewy/type/wrapper_spec.rb +0 -100
- data/spec/chewy/type_spec.rb +0 -55
- data/spec/support/mongoid.rb +0 -93
- data/spec/support/sequel.rb +0 -80
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Chewy::
|
|
3
|
+
describe Chewy::Index::Adapter::ActiveRecord, :active_record do
|
|
4
4
|
before do
|
|
5
5
|
stub_model(:city)
|
|
6
6
|
stub_model(:country)
|
|
@@ -381,11 +381,21 @@ describe Chewy::Type::Adapter::ActiveRecord, :active_record do
|
|
|
381
381
|
context 'objects' do
|
|
382
382
|
specify { expect(subject.import(cities + deleted) { |_data| true }).to eq(true) }
|
|
383
383
|
specify { expect(subject.import(cities + deleted) { |_data| false }).to eq(false) }
|
|
384
|
-
specify
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
specify
|
|
388
|
-
|
|
384
|
+
specify do
|
|
385
|
+
expect(subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[0].id])).to eq(false)
|
|
386
|
+
end
|
|
387
|
+
specify do
|
|
388
|
+
expect(subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[1].id])).to eq(false)
|
|
389
|
+
end
|
|
390
|
+
specify do
|
|
391
|
+
expect(subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[cities[2].id])).to eq(false)
|
|
392
|
+
end
|
|
393
|
+
specify do
|
|
394
|
+
expect(subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[deleted[0].id])).to eq(false)
|
|
395
|
+
end
|
|
396
|
+
specify do
|
|
397
|
+
expect(subject.import(cities + deleted, batch_size: 1, &data_comparer.curry[deleted[1].id])).to eq(false)
|
|
398
|
+
end
|
|
389
399
|
end
|
|
390
400
|
|
|
391
401
|
context 'ids' do
|
|
@@ -427,7 +437,10 @@ describe Chewy::Type::Adapter::ActiveRecord, :active_record do
|
|
|
427
437
|
subject { described_class.new(Country.joins(:cities)) }
|
|
428
438
|
|
|
429
439
|
specify { expect(subject.import_fields(Country.where('rating < 2'))).to match([contain_exactly(1, 2)]) }
|
|
430
|
-
specify
|
|
440
|
+
specify do
|
|
441
|
+
expect(subject.import_fields(Country.where('rating < 2'), fields: [:rating]))
|
|
442
|
+
.to match([contain_exactly([1, 0], [2, 1])])
|
|
443
|
+
end
|
|
431
444
|
end
|
|
432
445
|
end
|
|
433
446
|
|
|
@@ -436,21 +449,36 @@ describe Chewy::Type::Adapter::ActiveRecord, :active_record do
|
|
|
436
449
|
specify { expect(subject.import_fields(1, 2, fields: [:rating])).to match([contain_exactly([1, 0], [2, 1])]) }
|
|
437
450
|
|
|
438
451
|
specify { expect(subject.import_fields(countries.first(2))).to match([contain_exactly(1, 2)]) }
|
|
439
|
-
specify
|
|
452
|
+
specify do
|
|
453
|
+
expect(subject.import_fields(countries.first(2), fields: [:rating]))
|
|
454
|
+
.to match([contain_exactly([1, 0], [2, 1])])
|
|
455
|
+
end
|
|
440
456
|
end
|
|
441
457
|
|
|
442
458
|
context 'batch_size' do
|
|
443
459
|
specify { expect(subject.import_fields(batch_size: 2)).to match([contain_exactly(1, 2), [3]]) }
|
|
444
|
-
specify
|
|
460
|
+
specify do
|
|
461
|
+
expect(subject.import_fields(batch_size: 2, fields: [:rating]))
|
|
462
|
+
.to match([contain_exactly([1, 0], [2, 1]), [[3, 2]]])
|
|
463
|
+
end
|
|
445
464
|
|
|
446
|
-
specify
|
|
447
|
-
|
|
465
|
+
specify do
|
|
466
|
+
expect(subject.import_fields(Country.where('rating < 2'), batch_size: 2))
|
|
467
|
+
.to match([contain_exactly(1, 2)])
|
|
468
|
+
end
|
|
469
|
+
specify do
|
|
470
|
+
expect(subject.import_fields(Country.where('rating < 2'), batch_size: 2, fields: [:rating]))
|
|
471
|
+
.to match([contain_exactly([1, 0], [2, 1])])
|
|
472
|
+
end
|
|
448
473
|
|
|
449
474
|
specify { expect(subject.import_fields(1, 2, batch_size: 1)).to match([[1], [2]]) }
|
|
450
475
|
specify { expect(subject.import_fields(1, 2, batch_size: 1, fields: [:rating])).to match([[[1, 0]], [[2, 1]]]) }
|
|
451
476
|
|
|
452
477
|
specify { expect(subject.import_fields(countries.first(2), batch_size: 1)).to match([[1], [2]]) }
|
|
453
|
-
specify
|
|
478
|
+
specify do
|
|
479
|
+
expect(subject.import_fields(countries.first(2), batch_size: 1, fields: [:rating]))
|
|
480
|
+
.to match([[[1, 0]], [[2, 1]]])
|
|
481
|
+
end
|
|
454
482
|
end
|
|
455
483
|
|
|
456
484
|
context 'typecast' do
|
|
@@ -481,31 +509,29 @@ describe Chewy::Type::Adapter::ActiveRecord, :active_record do
|
|
|
481
509
|
let(:city_ids) { cities.map(&:id) }
|
|
482
510
|
let(:deleted_ids) { deleted.map(&:id) }
|
|
483
511
|
|
|
484
|
-
let(:type) { double(type_name: 'user') }
|
|
485
|
-
|
|
486
512
|
subject { described_class.new(City) }
|
|
487
513
|
|
|
488
|
-
specify { expect(subject.load(city_ids,
|
|
489
|
-
specify { expect(subject.load(city_ids.reverse,
|
|
490
|
-
specify { expect(subject.load(deleted_ids,
|
|
491
|
-
specify { expect(subject.load(city_ids + deleted_ids,
|
|
514
|
+
specify { expect(subject.load(city_ids, _index: 'users')).to eq(cities) }
|
|
515
|
+
specify { expect(subject.load(city_ids.reverse, _index: 'users')).to eq(cities.reverse) }
|
|
516
|
+
specify { expect(subject.load(deleted_ids, _index: 'users')).to eq([nil, nil]) }
|
|
517
|
+
specify { expect(subject.load(city_ids + deleted_ids, _index: 'users')).to eq([*cities, nil, nil]) }
|
|
492
518
|
specify do
|
|
493
|
-
expect(subject.load(city_ids,
|
|
519
|
+
expect(subject.load(city_ids, _index: 'users', scope: -> { where(rating: 0) }))
|
|
494
520
|
.to eq(cities.first(2) + [nil])
|
|
495
521
|
end
|
|
496
522
|
specify do
|
|
497
|
-
expect(
|
|
498
|
-
|
|
499
|
-
|
|
523
|
+
expect(
|
|
524
|
+
subject.load(city_ids, _index: 'users', scope: -> { where(rating: 0) }, users: {scope: -> { where(rating: 1) }})
|
|
525
|
+
).to eq([nil, nil] + cities.last(1))
|
|
500
526
|
end
|
|
501
527
|
specify do
|
|
502
|
-
expect(subject.load(city_ids,
|
|
528
|
+
expect(subject.load(city_ids, _index: 'users', scope: City.where(rating: 1)))
|
|
503
529
|
.to eq([nil, nil] + cities.last(1))
|
|
504
530
|
end
|
|
505
531
|
specify do
|
|
506
|
-
expect(
|
|
507
|
-
|
|
508
|
-
|
|
532
|
+
expect(
|
|
533
|
+
subject.load(city_ids, _index: 'users', scope: City.where(rating: 1), users: {scope: -> { where(rating: 0) }})
|
|
534
|
+
).to eq(cities.first(2) + [nil])
|
|
509
535
|
end
|
|
510
536
|
end
|
|
511
537
|
|
|
@@ -516,31 +542,33 @@ describe Chewy::Type::Adapter::ActiveRecord, :active_record do
|
|
|
516
542
|
let(:city_ids) { cities.map(&:rating) }
|
|
517
543
|
let(:deleted_ids) { deleted.map(&:rating) }
|
|
518
544
|
|
|
519
|
-
let(:type) { double(type_name: 'user') }
|
|
520
|
-
|
|
521
545
|
subject { described_class.new(City) }
|
|
522
546
|
|
|
523
|
-
specify { expect(subject.load(city_ids,
|
|
524
|
-
specify { expect(subject.load(city_ids.reverse,
|
|
525
|
-
specify { expect(subject.load(deleted_ids,
|
|
526
|
-
specify { expect(subject.load(city_ids + deleted_ids,
|
|
547
|
+
specify { expect(subject.load(city_ids, _index: 'users')).to eq(cities) }
|
|
548
|
+
specify { expect(subject.load(city_ids.reverse, _index: 'users')).to eq(cities.reverse) }
|
|
549
|
+
specify { expect(subject.load(deleted_ids, _index: 'users')).to eq([nil, nil]) }
|
|
550
|
+
specify { expect(subject.load(city_ids + deleted_ids, _index: 'users')).to eq([*cities, nil, nil]) }
|
|
527
551
|
specify do
|
|
528
|
-
expect(subject.load(city_ids,
|
|
552
|
+
expect(subject.load(city_ids, _index: 'users', scope: -> { where(country_id: 0) }))
|
|
529
553
|
.to eq(cities.first(2) + [nil])
|
|
530
554
|
end
|
|
531
555
|
specify do
|
|
532
|
-
expect(
|
|
533
|
-
|
|
534
|
-
|
|
556
|
+
expect(
|
|
557
|
+
subject.load(
|
|
558
|
+
city_ids, _index: 'users', scope: -> { where(country_id: 0) }, users: {scope: -> { where(country_id: 1) }}
|
|
559
|
+
)
|
|
560
|
+
).to eq([nil, nil] + cities.last(1))
|
|
535
561
|
end
|
|
536
562
|
specify do
|
|
537
|
-
expect(subject.load(city_ids,
|
|
563
|
+
expect(subject.load(city_ids, _index: 'users', scope: City.where(country_id: 1)))
|
|
538
564
|
.to eq([nil, nil] + cities.last(1))
|
|
539
565
|
end
|
|
540
566
|
specify do
|
|
541
|
-
expect(
|
|
542
|
-
|
|
543
|
-
|
|
567
|
+
expect(
|
|
568
|
+
subject.load(
|
|
569
|
+
city_ids, _index: 'users', scope: City.where(country_id: 1), users: {scope: -> { where(country_id: 0) }}
|
|
570
|
+
)
|
|
571
|
+
).to eq(cities.first(2) + [nil])
|
|
544
572
|
end
|
|
545
573
|
end
|
|
546
574
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Chewy::
|
|
3
|
+
describe Chewy::Index::Adapter::Object do
|
|
4
4
|
before { stub_class(:product) }
|
|
5
5
|
subject { described_class.new(:product) }
|
|
6
6
|
|
|
@@ -104,7 +104,13 @@ describe Chewy::Type::Adapter::Object do
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
context 'error handling' do
|
|
107
|
-
let(:products)
|
|
107
|
+
let(:products) do
|
|
108
|
+
Array.new(3) do |i|
|
|
109
|
+
double.tap do |product|
|
|
110
|
+
allow(product).to receive_messages(rating: i.next)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
108
114
|
let(:deleted) { Array.new(2) { |i| double(destroyed?: true, rating: i + 4) } }
|
|
109
115
|
subject { described_class.new('product') }
|
|
110
116
|
|
|
@@ -135,13 +141,18 @@ describe Chewy::Type::Adapter::Object do
|
|
|
135
141
|
context do
|
|
136
142
|
subject { described_class.new(-> { objects }) }
|
|
137
143
|
specify { expect(subject.import_fields(batch_size: 2)).to match([[1, 2], [3]]) }
|
|
138
|
-
specify
|
|
144
|
+
specify do
|
|
145
|
+
expect(subject.import_fields(fields: [:name], batch_size: 2))
|
|
146
|
+
.to match([[[1, 'Name0'], [2, 'Name1']], [[3, 'Name2']]])
|
|
147
|
+
end
|
|
139
148
|
end
|
|
140
149
|
|
|
141
150
|
context do
|
|
142
151
|
subject { described_class.new(-> { objects }) }
|
|
143
152
|
specify { expect(subject.import_fields(objects.first(2))).to match([[1, 2]]) }
|
|
144
|
-
specify
|
|
153
|
+
specify do
|
|
154
|
+
expect(subject.import_fields(objects.first(2), fields: [:name])).to match([[[1, 'Name0'], [2, 'Name1']]])
|
|
155
|
+
end
|
|
145
156
|
end
|
|
146
157
|
|
|
147
158
|
context do
|
|
@@ -178,7 +189,9 @@ describe Chewy::Type::Adapter::Object do
|
|
|
178
189
|
context do
|
|
179
190
|
subject { described_class.new(Product) }
|
|
180
191
|
specify { expect(subject.import_fields(objects.first(2))).to match([[1, 2]]) }
|
|
181
|
-
specify
|
|
192
|
+
specify do
|
|
193
|
+
expect(subject.import_fields(objects.first(2), fields: [:name])).to match([[[1, 'Name0'], [2, 'Name1']]])
|
|
194
|
+
end
|
|
182
195
|
end
|
|
183
196
|
|
|
184
197
|
context 'batch_size' do
|
|
@@ -196,7 +209,9 @@ describe Chewy::Type::Adapter::Object do
|
|
|
196
209
|
specify { expect(subject.import_references).to match([objects]) }
|
|
197
210
|
specify { expect(subject.import_references(batch_size: 2)).to match([objects.first(2), objects.last(1)]) }
|
|
198
211
|
specify { expect(subject.import_references(objects.first(2))).to match([objects.first(2)]) }
|
|
199
|
-
specify
|
|
212
|
+
specify do
|
|
213
|
+
expect(subject.import_references(objects.first(2), batch_size: 1)).to match([objects.first(1), [objects[1]]])
|
|
214
|
+
end
|
|
200
215
|
end
|
|
201
216
|
|
|
202
217
|
describe '#load' do
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Chewy::
|
|
3
|
+
describe Chewy::Index::Import::BulkBuilder do
|
|
4
4
|
before { Chewy.massacre }
|
|
5
5
|
|
|
6
|
-
subject { described_class.new(
|
|
7
|
-
let(:
|
|
8
|
-
let(:
|
|
6
|
+
subject { described_class.new(index, to_index: to_index, delete: delete, fields: fields) }
|
|
7
|
+
let(:index) { CitiesIndex }
|
|
8
|
+
let(:to_index) { [] }
|
|
9
9
|
let(:delete) { [] }
|
|
10
10
|
let(:fields) { [] }
|
|
11
11
|
|
|
@@ -14,9 +14,8 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
14
14
|
before do
|
|
15
15
|
stub_model(:city)
|
|
16
16
|
stub_index(:cities) do
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
17
|
+
index_scope City
|
|
18
|
+
field :name, :rating
|
|
20
19
|
end
|
|
21
20
|
end
|
|
22
21
|
let(:cities) { Array.new(3) { |i| City.create!(id: i + 1, name: "City#{i + 17}", rating: 42) } }
|
|
@@ -24,7 +23,7 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
24
23
|
specify { expect(subject.bulk_body).to eq([]) }
|
|
25
24
|
|
|
26
25
|
context do
|
|
27
|
-
let(:
|
|
26
|
+
let(:to_index) { cities }
|
|
28
27
|
specify do
|
|
29
28
|
expect(subject.bulk_body).to eq([
|
|
30
29
|
{index: {_id: 1, data: {'name' => 'City17', 'rating' => 42}}},
|
|
@@ -44,7 +43,7 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
context do
|
|
47
|
-
let(:
|
|
46
|
+
let(:to_index) { cities.first(2) }
|
|
48
47
|
let(:delete) { [cities.last] }
|
|
49
48
|
specify do
|
|
50
49
|
expect(subject.bulk_body).to eq([
|
|
@@ -74,10 +73,9 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
74
73
|
|
|
75
74
|
before do
|
|
76
75
|
stub_index(:cities) do
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
end
|
|
76
|
+
index_scope City
|
|
77
|
+
root id: -> { name } do
|
|
78
|
+
field :rating
|
|
81
79
|
end
|
|
82
80
|
end
|
|
83
81
|
end
|
|
@@ -90,7 +88,7 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
90
88
|
end
|
|
91
89
|
|
|
92
90
|
context 'indexing' do
|
|
93
|
-
let(:
|
|
91
|
+
let(:to_index) { [london] }
|
|
94
92
|
|
|
95
93
|
specify do
|
|
96
94
|
expect(subject.bulk_body).to eq([
|
|
@@ -113,17 +111,15 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
113
111
|
context 'crutches' do
|
|
114
112
|
before do
|
|
115
113
|
stub_index(:cities) do
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
collection.map { |item| [item.id, "Name#{item.id}"] }.to_h
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
field :name, value: ->(o, c) { c.names[o.id] }
|
|
114
|
+
crutch :names do |collection|
|
|
115
|
+
collection.map { |item| [item.id, "Name#{item.id}"] }.to_h
|
|
122
116
|
end
|
|
117
|
+
|
|
118
|
+
field :name, value: ->(o, c) { c.names[o.id] }
|
|
123
119
|
end
|
|
124
120
|
end
|
|
125
121
|
|
|
126
|
-
let(:
|
|
122
|
+
let(:to_index) { [double(id: 42)] }
|
|
127
123
|
|
|
128
124
|
specify do
|
|
129
125
|
expect(subject.bulk_body).to eq([
|
|
@@ -132,7 +128,7 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
132
128
|
end
|
|
133
129
|
|
|
134
130
|
context 'witchcraft' do
|
|
135
|
-
before { CitiesIndex
|
|
131
|
+
before { CitiesIndex.witchcraft! }
|
|
136
132
|
specify do
|
|
137
133
|
expect(subject.bulk_body).to eq([
|
|
138
134
|
{index: {_id: 42, data: {'name' => 'Name42'}}}
|
|
@@ -144,13 +140,11 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
144
140
|
context 'empty ids' do
|
|
145
141
|
before do
|
|
146
142
|
stub_index(:cities) do
|
|
147
|
-
|
|
148
|
-
field :name
|
|
149
|
-
end
|
|
143
|
+
field :name
|
|
150
144
|
end
|
|
151
145
|
end
|
|
152
146
|
|
|
153
|
-
let(:
|
|
147
|
+
let(:to_index) { [{id: 1, name: 'Name0'}, double(id: '', name: 'Name1'), double(name: 'Name2')] }
|
|
154
148
|
let(:delete) { [double(id: '', name: 'Name3'), {name: 'Name4'}, '', 2] }
|
|
155
149
|
|
|
156
150
|
specify do
|
|
@@ -180,15 +174,13 @@ describe Chewy::Type::Import::BulkBuilder do
|
|
|
180
174
|
describe '#index_objects_by_id' do
|
|
181
175
|
before do
|
|
182
176
|
stub_index(:cities) do
|
|
183
|
-
|
|
184
|
-
field :name
|
|
185
|
-
end
|
|
177
|
+
field :name
|
|
186
178
|
end
|
|
187
179
|
end
|
|
188
180
|
|
|
189
|
-
let(:
|
|
181
|
+
let(:to_index) { [double(id: 1), double(id: 2), double(id: ''), double] }
|
|
190
182
|
let(:delete) { [double(id: 3)] }
|
|
191
183
|
|
|
192
|
-
specify { expect(subject.index_objects_by_id).to eq('1' =>
|
|
184
|
+
specify { expect(subject.index_objects_by_id).to eq('1' => to_index.first, '2' => to_index.second) }
|
|
193
185
|
end
|
|
194
186
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Chewy::
|
|
3
|
+
describe Chewy::Index::Import::BulkRequest do
|
|
4
4
|
before { Chewy.massacre }
|
|
5
5
|
|
|
6
|
-
subject { described_class.new(
|
|
6
|
+
subject { described_class.new(index, suffix: suffix, bulk_size: bulk_size, **bulk_options) }
|
|
7
7
|
let(:suffix) {}
|
|
8
8
|
let(:bulk_size) {}
|
|
9
9
|
let(:bulk_options) { {} }
|
|
10
|
-
let(:
|
|
10
|
+
let(:index) { PlacesIndex }
|
|
11
11
|
|
|
12
12
|
describe '#initialize' do
|
|
13
13
|
specify { expect { described_class.new(nil, bulk_size: 100) }.to raise_error(ArgumentError) }
|
|
@@ -18,9 +18,8 @@ describe Chewy::Type::Import::BulkRequest do
|
|
|
18
18
|
before do
|
|
19
19
|
stub_model(:city)
|
|
20
20
|
stub_index(:places) do
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
21
|
+
index_scope City
|
|
22
|
+
field :name
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Chewy::
|
|
3
|
+
describe Chewy::Index::Import::JournalBuilder, :orm do
|
|
4
4
|
before do
|
|
5
5
|
stub_model(:country)
|
|
6
|
-
stub_index 'namespace/cities'
|
|
7
|
-
define_type :city
|
|
8
|
-
end
|
|
6
|
+
stub_index 'namespace/cities'
|
|
9
7
|
stub_index 'namespace/countries' do
|
|
10
|
-
|
|
8
|
+
index_scope Country
|
|
11
9
|
end
|
|
12
10
|
Timecop.freeze(time)
|
|
13
11
|
end
|
|
@@ -15,23 +13,22 @@ describe Chewy::Type::Import::JournalBuilder, :orm do
|
|
|
15
13
|
|
|
16
14
|
let(:time) { Time.parse('2017-07-14 12:00Z') }
|
|
17
15
|
|
|
18
|
-
let(:
|
|
19
|
-
let(:
|
|
16
|
+
let(:index) { Namespace::CitiesIndex }
|
|
17
|
+
let(:to_index) { [] }
|
|
20
18
|
let(:delete) { [] }
|
|
21
|
-
subject { described_class.new(
|
|
19
|
+
subject { described_class.new(index, to_index: to_index, delete: delete) }
|
|
22
20
|
|
|
23
21
|
describe '#bulk_body' do
|
|
24
22
|
specify { expect(subject.bulk_body).to eq([]) }
|
|
25
23
|
|
|
26
24
|
context do
|
|
27
|
-
let(:
|
|
25
|
+
let(:to_index) { [{id: 1, name: 'City'}] }
|
|
28
26
|
specify do
|
|
29
27
|
expect(subject.bulk_body).to eq([{
|
|
30
28
|
index: {
|
|
31
29
|
_index: 'chewy_journal',
|
|
32
30
|
data: {
|
|
33
31
|
'index_name' => 'namespace/cities',
|
|
34
|
-
'type_name' => 'city',
|
|
35
32
|
'action' => 'index',
|
|
36
33
|
'references' => [Base64.encode64('{"id":1,"name":"City"}')],
|
|
37
34
|
'created_at' => time.as_json
|
|
@@ -49,7 +46,6 @@ describe Chewy::Type::Import::JournalBuilder, :orm do
|
|
|
49
46
|
_index: 'chewy_journal',
|
|
50
47
|
data: {
|
|
51
48
|
'index_name' => 'namespace/cities',
|
|
52
|
-
'type_name' => 'city',
|
|
53
49
|
'action' => 'delete',
|
|
54
50
|
'references' => [Base64.encode64('{"id":1,"name":"City"}')],
|
|
55
51
|
'created_at' => time.as_json
|
|
@@ -60,8 +56,8 @@ describe Chewy::Type::Import::JournalBuilder, :orm do
|
|
|
60
56
|
end
|
|
61
57
|
|
|
62
58
|
context do
|
|
63
|
-
let(:
|
|
64
|
-
let(:
|
|
59
|
+
let(:index) { Namespace::CountriesIndex }
|
|
60
|
+
let(:to_index) { [Country.new(id: 1, name: 'City')] }
|
|
65
61
|
let(:delete) { [Country.new(id: 2, name: 'City')] }
|
|
66
62
|
specify do
|
|
67
63
|
expect(subject.bulk_body).to eq([{
|
|
@@ -69,7 +65,6 @@ describe Chewy::Type::Import::JournalBuilder, :orm do
|
|
|
69
65
|
_index: 'chewy_journal',
|
|
70
66
|
data: {
|
|
71
67
|
'index_name' => 'namespace/countries',
|
|
72
|
-
'type_name' => 'country',
|
|
73
68
|
'action' => 'index',
|
|
74
69
|
'references' => [Base64.encode64('1')],
|
|
75
70
|
'created_at' => time.as_json
|
|
@@ -80,7 +75,6 @@ describe Chewy::Type::Import::JournalBuilder, :orm do
|
|
|
80
75
|
_index: 'chewy_journal',
|
|
81
76
|
data: {
|
|
82
77
|
'index_name' => 'namespace/countries',
|
|
83
|
-
'type_name' => 'country',
|
|
84
78
|
'action' => 'delete',
|
|
85
79
|
'references' => [Base64.encode64('2')],
|
|
86
80
|
'created_at' => time.as_json
|