chewy 8.0.0 → 8.1.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.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +30 -16
  4. data/lib/chewy/errors.rb +3 -0
  5. data/lib/chewy/fields/root.rb +3 -3
  6. data/lib/chewy/index/crutch.rb +12 -2
  7. data/lib/chewy/index/import/bulk_builder.rb +4 -3
  8. data/lib/chewy/index/import/routine.rb +2 -1
  9. data/lib/chewy/index/import.rb +4 -4
  10. data/lib/chewy/index/witchcraft.rb +24 -8
  11. data/lib/chewy/multi_search.rb +1 -1
  12. data/lib/chewy/search/parameters/runtime_mappings.rb +14 -0
  13. data/lib/chewy/search/request.rb +18 -2
  14. data/lib/chewy/search/scrolling.rb +14 -6
  15. data/lib/chewy/stash.rb +10 -6
  16. data/lib/chewy/version.rb +1 -1
  17. metadata +5 -131
  18. data/.github/CODEOWNERS +0 -1
  19. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -39
  20. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  21. data/.github/PULL_REQUEST_TEMPLATE.md +0 -16
  22. data/.github/dependabot.yml +0 -42
  23. data/.github/workflows/ruby.yml +0 -61
  24. data/.gitignore +0 -22
  25. data/.rspec +0 -2
  26. data/.rubocop.yml +0 -64
  27. data/.rubocop_todo.yml +0 -225
  28. data/.yardopts +0 -5
  29. data/CODE_OF_CONDUCT.md +0 -14
  30. data/CONTRIBUTING.md +0 -63
  31. data/Gemfile +0 -22
  32. data/Guardfile +0 -25
  33. data/Rakefile +0 -17
  34. data/chewy.gemspec +0 -24
  35. data/docker-compose.yml +0 -14
  36. data/docs/README.md +0 -16
  37. data/docs/configuration.md +0 -440
  38. data/docs/import.md +0 -122
  39. data/docs/indexing.md +0 -329
  40. data/docs/querying.md +0 -72
  41. data/docs/rake_tasks.md +0 -108
  42. data/docs/testing.md +0 -41
  43. data/docs/troubleshooting.md +0 -101
  44. data/filters +0 -78
  45. data/gemfiles/base.gemfile +0 -12
  46. data/gemfiles/rails.7.2.activerecord.gemfile +0 -14
  47. data/gemfiles/rails.8.0.activerecord.gemfile +0 -14
  48. data/migration_guide.md +0 -56
  49. data/spec/chewy/config_spec.rb +0 -110
  50. data/spec/chewy/elastic_client_spec.rb +0 -26
  51. data/spec/chewy/fields/base_spec.rb +0 -700
  52. data/spec/chewy/fields/root_spec.rb +0 -142
  53. data/spec/chewy/fields/time_fields_spec.rb +0 -28
  54. data/spec/chewy/index/actions_spec.rb +0 -851
  55. data/spec/chewy/index/adapter/active_record_spec.rb +0 -663
  56. data/spec/chewy/index/adapter/object_spec.rb +0 -243
  57. data/spec/chewy/index/aliases_spec.rb +0 -49
  58. data/spec/chewy/index/import/bulk_builder_spec.rb +0 -494
  59. data/spec/chewy/index/import/bulk_request_spec.rb +0 -95
  60. data/spec/chewy/index/import/journal_builder_spec.rb +0 -87
  61. data/spec/chewy/index/import/routine_spec.rb +0 -110
  62. data/spec/chewy/index/import_spec.rb +0 -615
  63. data/spec/chewy/index/mapping_spec.rb +0 -135
  64. data/spec/chewy/index/observe/active_record_methods_spec.rb +0 -68
  65. data/spec/chewy/index/observe/callback_spec.rb +0 -139
  66. data/spec/chewy/index/observe_spec.rb +0 -143
  67. data/spec/chewy/index/settings_spec.rb +0 -136
  68. data/spec/chewy/index/specification_spec.rb +0 -156
  69. data/spec/chewy/index/syncer_spec.rb +0 -118
  70. data/spec/chewy/index/witchcraft_spec.rb +0 -245
  71. data/spec/chewy/index/wrapper_spec.rb +0 -100
  72. data/spec/chewy/index_spec.rb +0 -269
  73. data/spec/chewy/journal_spec.rb +0 -223
  74. data/spec/chewy/minitest/helpers_spec.rb +0 -194
  75. data/spec/chewy/minitest/search_index_receiver_spec.rb +0 -120
  76. data/spec/chewy/multi_search_spec.rb +0 -84
  77. data/spec/chewy/rake_helper_spec.rb +0 -656
  78. data/spec/chewy/repository_spec.rb +0 -50
  79. data/spec/chewy/rspec/build_query_spec.rb +0 -34
  80. data/spec/chewy/rspec/helpers_spec.rb +0 -61
  81. data/spec/chewy/rspec/update_index_spec.rb +0 -313
  82. data/spec/chewy/runtime/version_spec.rb +0 -48
  83. data/spec/chewy/runtime_spec.rb +0 -9
  84. data/spec/chewy/search/loader_spec.rb +0 -83
  85. data/spec/chewy/search/pagination/kaminari_examples.rb +0 -69
  86. data/spec/chewy/search/pagination/kaminari_spec.rb +0 -21
  87. data/spec/chewy/search/parameters/aggs_spec.rb +0 -5
  88. data/spec/chewy/search/parameters/bool_storage_examples.rb +0 -53
  89. data/spec/chewy/search/parameters/collapse_spec.rb +0 -5
  90. data/spec/chewy/search/parameters/docvalue_fields_spec.rb +0 -5
  91. data/spec/chewy/search/parameters/explain_spec.rb +0 -5
  92. data/spec/chewy/search/parameters/filter_spec.rb +0 -5
  93. data/spec/chewy/search/parameters/hash_storage_examples.rb +0 -59
  94. data/spec/chewy/search/parameters/highlight_spec.rb +0 -5
  95. data/spec/chewy/search/parameters/ignore_unavailable_spec.rb +0 -67
  96. data/spec/chewy/search/parameters/indices_spec.rb +0 -99
  97. data/spec/chewy/search/parameters/integer_storage_examples.rb +0 -32
  98. data/spec/chewy/search/parameters/knn_spec.rb +0 -5
  99. data/spec/chewy/search/parameters/limit_spec.rb +0 -5
  100. data/spec/chewy/search/parameters/load_spec.rb +0 -60
  101. data/spec/chewy/search/parameters/min_score_spec.rb +0 -32
  102. data/spec/chewy/search/parameters/none_spec.rb +0 -5
  103. data/spec/chewy/search/parameters/offset_spec.rb +0 -5
  104. data/spec/chewy/search/parameters/order_spec.rb +0 -72
  105. data/spec/chewy/search/parameters/post_filter_spec.rb +0 -5
  106. data/spec/chewy/search/parameters/preference_spec.rb +0 -5
  107. data/spec/chewy/search/parameters/profile_spec.rb +0 -5
  108. data/spec/chewy/search/parameters/query_spec.rb +0 -5
  109. data/spec/chewy/search/parameters/query_storage_examples.rb +0 -434
  110. data/spec/chewy/search/parameters/request_cache_spec.rb +0 -67
  111. data/spec/chewy/search/parameters/rescore_spec.rb +0 -62
  112. data/spec/chewy/search/parameters/script_fields_spec.rb +0 -5
  113. data/spec/chewy/search/parameters/search_after_spec.rb +0 -35
  114. data/spec/chewy/search/parameters/search_type_spec.rb +0 -5
  115. data/spec/chewy/search/parameters/source_spec.rb +0 -162
  116. data/spec/chewy/search/parameters/storage_spec.rb +0 -60
  117. data/spec/chewy/search/parameters/stored_fields_spec.rb +0 -126
  118. data/spec/chewy/search/parameters/string_array_storage_examples.rb +0 -63
  119. data/spec/chewy/search/parameters/string_storage_examples.rb +0 -32
  120. data/spec/chewy/search/parameters/suggest_spec.rb +0 -5
  121. data/spec/chewy/search/parameters/terminate_after_spec.rb +0 -5
  122. data/spec/chewy/search/parameters/timeout_spec.rb +0 -5
  123. data/spec/chewy/search/parameters/track_scores_spec.rb +0 -5
  124. data/spec/chewy/search/parameters/track_total_hits_spec.rb +0 -5
  125. data/spec/chewy/search/parameters/version_spec.rb +0 -5
  126. data/spec/chewy/search/parameters_spec.rb +0 -161
  127. data/spec/chewy/search/query_proxy_spec.rb +0 -95
  128. data/spec/chewy/search/request_spec.rb +0 -886
  129. data/spec/chewy/search/response_spec.rb +0 -180
  130. data/spec/chewy/search/scrolling_spec.rb +0 -171
  131. data/spec/chewy/search_spec.rb +0 -127
  132. data/spec/chewy/stash_spec.rb +0 -85
  133. data/spec/chewy/strategy/active_job_spec.rb +0 -73
  134. data/spec/chewy/strategy/atomic_no_refresh_spec.rb +0 -60
  135. data/spec/chewy/strategy/atomic_spec.rb +0 -61
  136. data/spec/chewy/strategy/delayed_sidekiq_spec.rb +0 -225
  137. data/spec/chewy/strategy/lazy_sidekiq_spec.rb +0 -214
  138. data/spec/chewy/strategy/sidekiq_spec.rb +0 -52
  139. data/spec/chewy/strategy_spec.rb +0 -125
  140. data/spec/chewy_spec.rb +0 -100
  141. data/spec/spec_helper.rb +0 -69
  142. data/spec/support/active_record.rb +0 -124
  143. data/spec/support/class_helpers.rb +0 -16
  144. data/spec/support/fail_helpers.rb +0 -13
@@ -1,120 +0,0 @@
1
- require 'spec_helper'
2
- require 'chewy/minitest'
3
-
4
- describe :search_index_receiver do
5
- def search_request(item_count = 2, verb: :index)
6
- items = Array.new(item_count) do |i|
7
- {
8
- verb => {_id: i + 1, data: {}}
9
- }
10
- end
11
-
12
- [
13
- {
14
- body: items
15
- }
16
- ]
17
- end
18
-
19
- def parse_request(request)
20
- request.map { |r| r[:_id] }
21
- end
22
-
23
- let(:receiver) do
24
- SearchIndexReceiver.new
25
- end
26
-
27
- let(:dummy_class) { Struct.new(:id) }
28
-
29
- before do
30
- stub_index(:dummies) do
31
- root value: ->(_o) { {} }
32
- end
33
-
34
- stub_index(:dummies2) do
35
- root value: ->(_o) { {} }
36
- end
37
- end
38
-
39
- context 'catch' do
40
- specify 'archives more than one type' do
41
- receiver.catch search_request(2), DummiesIndex
42
- receiver.catch search_request(3), Dummies2Index
43
- expect(receiver.indexes.keys).to match_array([DummiesIndex, Dummies2Index])
44
- end
45
- end
46
-
47
- context 'indexes_for' do
48
- before do
49
- receiver.catch search_request(2), DummiesIndex
50
- receiver.catch search_request(3), Dummies2Index
51
- end
52
-
53
- specify 'returns indexes for a specific type' do
54
- expect(parse_request(receiver.indexes_for(DummiesIndex))).to match_array([1, 2])
55
- end
56
-
57
- specify 'returns only indexes for all types' do
58
- index_responses = receiver.indexes
59
- expect(index_responses.keys).to match_array([DummiesIndex, Dummies2Index])
60
- expect(parse_request(index_responses.values.flatten)).to match_array([1, 2, 1, 2, 3])
61
- end
62
- end
63
-
64
- context 'deletes_for' do
65
- before do
66
- receiver.catch search_request(2, verb: :delete), DummiesIndex
67
- receiver.catch search_request(3, verb: :delete), Dummies2Index
68
- end
69
-
70
- specify 'returns deletes for a specific type' do
71
- expect(receiver.deletes_for(Dummies2Index)).to match_array([1, 2, 3])
72
- end
73
-
74
- specify 'returns only deletes for all types' do
75
- deletes = receiver.deletes
76
- expect(deletes.keys).to match_array([DummiesIndex, Dummies2Index])
77
- expect(deletes.values.flatten).to match_array([1, 2, 1, 2, 3])
78
- end
79
- end
80
-
81
- context 'indexed?' do
82
- before do
83
- receiver.catch search_request(1), DummiesIndex
84
- end
85
-
86
- specify 'validates that an object was indexed' do
87
- dummy = dummy_class.new(1)
88
- expect(receiver.indexed?(dummy, DummiesIndex)).to be(true)
89
- end
90
-
91
- specify 'doesn\'t validate than unindexed objects were indexed' do
92
- dummy = dummy_class.new(2)
93
- expect(receiver.indexed?(dummy, DummiesIndex)).to be(false)
94
- end
95
- end
96
-
97
- context 'deleted?' do
98
- before do
99
- receiver.catch search_request(1, verb: :delete), DummiesIndex
100
- end
101
-
102
- specify 'validates than an object was deleted' do
103
- dummy = dummy_class.new(1)
104
- expect(receiver.deleted?(dummy, DummiesIndex)).to be(true)
105
- end
106
-
107
- specify 'doesn\'t validate than undeleted objects were deleted' do
108
- dummy = dummy_class.new(2)
109
- expect(receiver.deleted?(dummy, DummiesIndex)).to be(false)
110
- end
111
- end
112
-
113
- context 'updated_indexes' do
114
- specify 'provides a list of indices updated' do
115
- receiver.catch search_request(2, verb: :delete), DummiesIndex
116
- receiver.catch search_request(3, verb: :delete), Dummies2Index
117
- expect(receiver.updated_indexes).to match_array([DummiesIndex, Dummies2Index])
118
- end
119
- end
120
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
- require 'chewy/multi_search'
3
-
4
- describe Chewy::MultiSearch do
5
- before { drop_indices }
6
-
7
- before do
8
- stub_model(:city)
9
- stub_model(:country)
10
-
11
- stub_index(:cities) do
12
- def self.aggregate_by_country
13
- aggs(country: {terms: {field: :country_id}})
14
- end
15
-
16
- index_scope City
17
- field :name, type: 'keyword'
18
- field :country_id, type: 'keyword'
19
- end
20
- end
21
-
22
- let(:places_query) { CitiesIndex.all }
23
-
24
- describe '#queries' do
25
- specify 'returns the queries that are a part of the multi search' do
26
- multi_search = described_class.new([places_query])
27
- expect(multi_search.queries).to contain_exactly(places_query)
28
- end
29
- end
30
-
31
- describe '#add_query' do
32
- specify 'adds a query to the multi search' do
33
- multi_search = described_class.new([])
34
- expect do
35
- multi_search.add_query(places_query)
36
- end.to change {
37
- multi_search.queries
38
- }.from([]).to([places_query])
39
- end
40
- end
41
-
42
- context 'when given two queries' do
43
- let(:queries) { [aggregates, results] }
44
- let(:aggregates) { CitiesIndex.aggregate_by_country.limit(0) }
45
- let(:results) { CitiesIndex.limit(10) }
46
- let(:multi_search) { described_class.new(queries) }
47
- let(:cities) { Array.new(3) { |i| City.create! name: "Name#{i + 2}", country_id: i + 1 } }
48
- before { CitiesIndex.import! city: cities }
49
-
50
- describe '#perform' do
51
- specify 'performs each query' do
52
- expect { multi_search.perform }
53
- .to change(aggregates, :performed?).from(false).to(true)
54
- .and change(results, :performed?).from(false).to(true)
55
- end
56
-
57
- specify 'issues a single request using the msearch endpoint', :aggregate_failures do
58
- expect(Chewy.client).to receive(:msearch).once.and_return('responses' => [])
59
- expect(Chewy.client).to_not receive(:search)
60
- multi_search.perform
61
- end
62
- end
63
-
64
- describe '#responses' do
65
- subject(:responses) { multi_search.responses }
66
-
67
- context 'on a previously performed multi search' do
68
- before { multi_search.perform }
69
-
70
- it 'does not perform the query again' do
71
- expect(Chewy.client).to_not receive(:msearch)
72
- multi_search.responses
73
- end
74
- end
75
-
76
- specify 'returns the results of each query', :aggregate_failures do
77
- is_expected.to have(2).responses
78
- expect(responses[0]).to be_a(Chewy::Search::Response)
79
- expect(responses[1]).to be_a(Chewy::Search::Response)
80
- expect(responses[1].wrappers).to all(be_a CitiesIndex)
81
- end
82
- end
83
- end
84
- end