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,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe :build_query do
4
- before do
5
- stub_model(:city)
6
- stub_index(:cities) { index_scope City }
7
- CitiesIndex.create
8
- end
9
-
10
- let(:expected_query) do
11
- {
12
- index: ['cities'],
13
- body: {
14
- query: {
15
- match: {name: 'name'}
16
- }
17
- }
18
- }
19
- end
20
- let(:dummy_query) { {match: {name: 'name'}} }
21
- let(:unexpected_query) { {match: {name: 'name'}} }
22
-
23
- context 'build expected query' do
24
- specify do
25
- expect(CitiesIndex.query(dummy_query)).to build_query(expected_query)
26
- end
27
- end
28
-
29
- context 'not to build unexpected query' do
30
- specify do
31
- expect(CitiesIndex.query(dummy_query)).not_to build_query(unexpected_query)
32
- end
33
- end
34
- end
@@ -1,61 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe :rspec_helper do
4
- include Chewy::Rspec::Helpers
5
-
6
- before do
7
- stub_model(:city)
8
- stub_index(:cities) { index_scope City }
9
- CitiesIndex.create
10
- end
11
-
12
- let(:hits) do
13
- [
14
- {
15
- '_index' => 'cities',
16
- '_type' => '_doc',
17
- '_id' => '1',
18
- '_score' => 3.14,
19
- '_source' => source
20
- }
21
- ]
22
- end
23
-
24
- let(:source) { {'name' => 'some_name'} }
25
- let(:sources) { [source] }
26
-
27
- context :mock_elasticsearch_response do
28
- let(:raw_response) do
29
- {
30
- 'took' => 4,
31
- 'timed_out' => false,
32
- '_shards' => {
33
- 'total' => 1,
34
- 'successful' => 1,
35
- 'skipped' => 0,
36
- 'failed' => 0
37
- },
38
- 'hits' => {
39
- 'total' => {
40
- 'value' => 1,
41
- 'relation' => 'eq'
42
- },
43
- 'max_score' => 1.0,
44
- 'hits' => hits
45
- }
46
- }
47
- end
48
-
49
- specify do
50
- mock_elasticsearch_response(CitiesIndex, raw_response)
51
- expect(CitiesIndex.query({}).hits).to eq(hits)
52
- end
53
- end
54
-
55
- context :mock_elasticsearch_response_sources do
56
- specify do
57
- mock_elasticsearch_response_sources(CitiesIndex, sources)
58
- expect(CitiesIndex.query({}).hits).to eq(hits)
59
- end
60
- end
61
- end
@@ -1,313 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe :update_index do
4
- before do
5
- stub_index(:dummies) do
6
- end
7
- stub_index(:dummies2) do
8
- end
9
- end
10
-
11
- before do
12
- drop_indices
13
- DummiesIndex.create!
14
- end
15
-
16
- specify { expect {}.not_to update_index(DummiesIndex) }
17
- specify { expect { DummiesIndex.bulk body: [] }.not_to update_index(DummiesIndex) }
18
-
19
- specify do
20
- expect { expect { DummiesIndex.bulk body: [{index: {_id: 42}}] }.not_to update_index(DummiesIndex) }
21
- .to fail_with(/Expected index .* not to be updated, but it was with/)
22
- end
23
-
24
- specify do
25
- expect do
26
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 41, data: {}}}]
27
- end.to update_index(DummiesIndex).and_reindex(41, 42).only
28
- end
29
-
30
- context do
31
- let(:expectation) do
32
- expect do
33
- expect do
34
- DummiesIndex.bulk body: [{index: {_id: 42}}, {index: {_id: 41}}, {index: {_id: 42}}]
35
- end.not_to update_index(DummiesIndex)
36
- end
37
- end
38
-
39
- specify { expectation.to fail_matching 'document id `42` (2 times)' }
40
- specify { expectation.to fail_matching 'document id `41` (1 times)' }
41
- end
42
-
43
- context 'compound matchers' do
44
- specify do
45
- expect do
46
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 41, data: {}}}]
47
- Dummies2Index.bulk body: [{index: {_id: 43, data: {}}}]
48
- end.to update_index(DummiesIndex).and_reindex(41, 42).only
49
- .and update_index(Dummies2Index).and_reindex(43).only
50
- end
51
-
52
- context do
53
- let(:expectation) do
54
- expect do
55
- expect do
56
- Dummies2Index.bulk body: [{index: {_id: 43, data: {}}}]
57
- end.to update_index(DummiesIndex).and_reindex(41, 42).only
58
- .and update_index(Dummies2Index).and_reindex(43).only
59
- end
60
- end
61
-
62
- specify { expectation.to fail_matching 'Expected index `DummiesIndex` to be updated' }
63
- end
64
- end
65
-
66
- context '#only' do
67
- specify do
68
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 41, data: {}}}] }
69
- .to update_index(DummiesIndex).and_reindex(41, 42).only
70
- end
71
- specify do
72
- expect do
73
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 41, data: {}}}] }
74
- .to update_index(DummiesIndex).and_reindex(41).only
75
- end.to fail_matching 'to update documents ["41"] only, but ["42"] was updated also'
76
- end
77
- specify do
78
- expect do
79
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 41, data: {}}}] }
80
- .to update_index(DummiesIndex).and_reindex(41, times: 2).only
81
- end.to fail_matching 'to update documents ["41"] only, but ["42"] was updated also'
82
- end
83
-
84
- specify do
85
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 41}}] }
86
- .to update_index(DummiesIndex).and_delete(41, 42).only
87
- end
88
- specify do
89
- expect do
90
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 41}}] }
91
- .to update_index(DummiesIndex).and_delete(41).only
92
- end.to fail_matching 'to delete documents ["41"] only, but ["42"] was deleted also'
93
- end
94
- specify do
95
- expect do
96
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 41}}] }
97
- .to update_index(DummiesIndex).and_delete(41, times: 2).only
98
- end.to fail_matching 'to delete documents ["41"] only, but ["42"] was deleted also'
99
- end
100
-
101
- specify do
102
- expect do
103
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {delete: {_id: 41}}] }
104
- .to update_index(DummiesIndex).and_reindex(42).only
105
- end.to fail_matching 'to update documents ["42"] only, but ["41"] was deleted also'
106
- end
107
- specify do
108
- expect do
109
- expect do
110
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}},
111
- {delete: {_id: 41}}]
112
- end.to update_index(DummiesIndex).and_reindex(42).only
113
- end.to fail_matching 'to update documents ["42"] only, but ["43"] was updated and ["41"] was deleted also'
114
- end
115
- specify do
116
- expect do
117
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {delete: {_id: 41}}] }
118
- .to update_index(DummiesIndex).and_delete(41).only
119
- end.to fail_matching 'to delete documents ["41"] only, but ["42"] was updated also'
120
- end
121
- specify do
122
- expect do
123
- expect do
124
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {delete: {_id: 41}}, {delete: {_id: 43}}]
125
- end.to update_index(DummiesIndex).and_delete(41).only
126
- end.to fail_matching 'to delete documents ["41"] only, but ["42"] was updated and ["43"] was deleted also'
127
- end
128
- end
129
-
130
- context '#and_reindex' do
131
- specify { expect { DummiesIndex.bulk body: [{index: {_id: 42}}] }.to update_index(DummiesIndex) }
132
- specify do
133
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}] }
134
- .to update_index(DummiesIndex).and_reindex(42)
135
- end
136
- specify do
137
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}] }
138
- .to update_index(DummiesIndex).and_reindex(double(id: 42))
139
- end
140
- specify do
141
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}] }
142
- .to update_index(DummiesIndex).and_reindex(double(id: 42), double(id: 43))
143
- end
144
- specify do
145
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}] }
146
- .to update_index(DummiesIndex).and_reindex([double(id: 42), 43])
147
- end
148
-
149
- specify do
150
- expect do
151
- expect do
152
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}]
153
- end.to update_index(DummiesIndex).and_reindex([44, 43])
154
- end.to fail_matching 'Expected document with id `44` to be reindexed, but it was not'
155
- end
156
-
157
- context do
158
- let(:expectation) do
159
- expect do
160
- expect do
161
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}]
162
- end.to update_index(DummiesIndex).and_reindex(44, double(id: 47))
163
- end
164
- end
165
-
166
- specify { expectation.to fail_matching('Expected document with id `44` to be reindexed, but it was not') }
167
- specify { expectation.to fail_matching('Expected document with id `47` to be reindexed, but it was not') }
168
- end
169
-
170
- context ':times' do
171
- specify do
172
- expect do
173
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}]
174
- DummiesIndex.bulk body: [{index: {_id: 43, data: {}}}, {index: {_id: 44, data: {}}}]
175
- end.to update_index(DummiesIndex).and_reindex(42, 44, times: 1).and_reindex(43, times: 2)
176
- end
177
-
178
- specify do
179
- expect do
180
- expect do
181
- DummiesIndex.bulk body: [{index: {_id: 43, data: {a: '1'}}}]
182
- end.to update_index(DummiesIndex).and_reindex(42, times: 3)
183
- end.to fail_matching('Expected document with id `42` to be reindexed, but it was not')
184
- end
185
-
186
- context do
187
- let(:expectation) do
188
- expect do
189
- expect do
190
- DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {index: {_id: 43, data: {}}}]
191
- DummiesIndex.bulk body: [{index: {_id: 43, data: {}}}, {index: {_id: 44, data: {}}}]
192
- end.to update_index(DummiesIndex).and_reindex(42, times: 3).and_reindex(44, 43, times: 4)
193
- end
194
- end
195
-
196
- specify { expectation.to fail_matching 'Expected document with id `44` to be reindexed' }
197
- specify { expectation.to fail_matching 'Expected document with id `43` to be reindexed' }
198
- specify { expectation.to fail_matching '3 times, but was reindexed 1 times' }
199
- specify { expectation.to fail_matching '4 times, but was reindexed 2 times' }
200
- end
201
- end
202
-
203
- context ':with' do
204
- specify do
205
- expect do
206
- DummiesIndex.bulk body: [{index: {_id: 42, data: {a: '1'}}}, {index: {_id: 42, data: {'a' => 2}}}]
207
- end.to update_index(DummiesIndex).and_reindex(42, with: {a: 2})
208
- end
209
-
210
- specify do
211
- expect do
212
- DummiesIndex.bulk body: [{index: {_id: 42, data: {a: '1'}}}, {index: {_id: 42, data: {'b' => 2}}}]
213
- end.to update_index(DummiesIndex).and_reindex(42, with: {a: '1', b: 2})
214
- end
215
-
216
- specify do
217
- expect do
218
- expect do
219
- DummiesIndex.bulk body: [{index: {_id: 43, data: {a: '1'}}}]
220
- end.to update_index(DummiesIndex).and_reindex(42, with: {a: 1})
221
- end.to fail_matching('Expected document with id `42` to be reindexed, but it was not')
222
- end
223
-
224
- [
225
- [{a: %w[one two]}, {a: %w[one two]}],
226
- [{a: %w[one two]}, {a: %w[two one]}],
227
- [{a: %w[one one two]}, {a: %w[one two one]}],
228
- [{a: {b: %w[one one two]}}, {a: {b: %w[one two one]}}],
229
- [{a: 1, b: 1}, {a: 1}]
230
- ].each do |(data, with)|
231
- specify do
232
- expect do
233
- DummiesIndex.bulk body: [{index: {_id: 42, data: data}}]
234
- end.to update_index(DummiesIndex).and_reindex(42, with: with)
235
- end
236
- end
237
-
238
- [
239
- [{a: %w[one two]}, {a: %w[one one two]}],
240
- [{a: %w[one one two]}, {a: %w[one two]}],
241
- [{a: %w[one two]}, {a: 1}],
242
- [{a: 1}, {a: %w[one two]}],
243
- [{a: 1}, {a: 1, b: 1}]
244
- ].each do |(data, with)|
245
- specify do
246
- expect do
247
- expect do
248
- DummiesIndex.bulk body: [{index: {_id: 42, data: data}}]
249
- end.to update_index(DummiesIndex).and_reindex(42, with: with)
250
- end.to fail_matching('Expected document with id `42` to be reindexed')
251
- end
252
- end
253
-
254
- context do
255
- let(:expectation) do
256
- expect do
257
- expect do
258
- DummiesIndex.bulk body: [{index: {_id: 43, data: {a: '1'}}}, {index: {_id: 42, data: {'a' => 2}}}]
259
- end.to update_index(DummiesIndex).and_reindex(43, times: 2, with: {a: 2})
260
- end
261
- end
262
-
263
- specify { expectation.to fail_matching 'Expected document with id `43` to be reindexed' }
264
- specify { expectation.to fail_matching '2 times, but was reindexed 1 times' }
265
- specify { expectation.to fail_matching 'but it was reindexed with' }
266
- end
267
- end
268
- end
269
-
270
- context '#and_delete' do
271
- specify do
272
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {delete: {_id: 43}}] }
273
- .to update_index(DummiesIndex).and_reindex(42).and_delete(double(id: 43))
274
- end
275
- specify do
276
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 43}}] }
277
- .to update_index(DummiesIndex).and_delete(42).and_delete(double(id: 43))
278
- end
279
- specify do
280
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 43}}] }
281
- .to update_index(DummiesIndex).and_delete(42, double(id: 43))
282
- end
283
- specify do
284
- expect { DummiesIndex.bulk body: [{delete: {_id: 42}}, {delete: {_id: 43}}] }
285
- .to update_index(DummiesIndex).and_delete([43, double(id: 42)])
286
- end
287
-
288
- context do
289
- let(:expectation) do
290
- expect do
291
- expect { DummiesIndex.bulk body: [{index: {_id: 42, data: {}}}, {delete: {_id: 43}}] }
292
- .to update_index(DummiesIndex).and_reindex(43).and_delete(double(id: 42))
293
- end
294
- end
295
-
296
- specify { expectation.to fail_matching 'Expected document with id `43` to be reindexed, but it was not' }
297
- specify { expectation.to fail_matching 'Expected document with id `42` to be deleted, but it was not' }
298
- end
299
-
300
- context do
301
- let(:expectation) do
302
- expect do
303
- expect { DummiesIndex.bulk body: [{delete: {_id: 42, data: {}}}, {delete: {_id: 42}}] }
304
- .to update_index(DummiesIndex).and_delete(44, times: 2).and_delete(double(id: 42), times: 3)
305
- end
306
- end
307
-
308
- specify { expectation.to fail_matching 'Expected document with id `44` to be deleted, but it was not' }
309
- specify { expectation.to fail_matching 'Expected document with id `42` to be deleted' }
310
- specify { expectation.to fail_matching '3 times, but was deleted 2 times' }
311
- end
312
- end
313
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Runtime::Version do
4
- describe '#major' do
5
- specify { expect(described_class.new('1.2.3').major).to eq(1) }
6
- specify { expect(described_class.new('1.2').major).to eq(1) }
7
- specify { expect(described_class.new(1.2).major).to eq(1) }
8
- specify { expect(described_class.new('1').major).to eq(1) }
9
- specify { expect(described_class.new('').major).to eq(0) }
10
- end
11
-
12
- describe '#minor' do
13
- specify { expect(described_class.new('1.2.3').minor).to eq(2) }
14
- specify { expect(described_class.new('1.2').minor).to eq(2) }
15
- specify { expect(described_class.new(1.2).minor).to eq(2) }
16
- specify { expect(described_class.new('1').minor).to eq(0) }
17
- end
18
-
19
- describe '#patch' do
20
- specify { expect(described_class.new('1.2.3').patch).to eq(3) }
21
- specify { expect(described_class.new('1.2.3.pre1').patch).to eq(3) }
22
- specify { expect(described_class.new('1.2').patch).to eq(0) }
23
- specify { expect(described_class.new(1.2).patch).to eq(0) }
24
- end
25
-
26
- describe '#to_s' do
27
- specify { expect(described_class.new('1.2.3').to_s).to eq('1.2.3') }
28
- specify { expect(described_class.new('1.2.3.pre1').to_s).to eq('1.2.3') }
29
- specify { expect(described_class.new('1.2').to_s).to eq('1.2.0') }
30
- specify { expect(described_class.new(1.2).to_s).to eq('1.2.0') }
31
- specify { expect(described_class.new('1').to_s).to eq('1.0.0') }
32
- specify { expect(described_class.new('').to_s).to eq('0.0.0') }
33
- end
34
-
35
- describe '#<=>' do
36
- specify { expect(described_class.new('1.2.3')).to eq('1.2.3') }
37
- specify { expect(described_class.new('1.2.3')).to be < '1.2.4' }
38
- specify { expect(described_class.new('1.2.3')).to be < '1.2.10' }
39
- specify { expect(described_class.new('1.10.2')).to eq('1.10.2') }
40
- specify { expect(described_class.new('1.10.2')).to be > '1.7.2' }
41
- specify { expect(described_class.new('2.10.2')).to be > '1.7.2' }
42
- specify { expect(described_class.new('1.10.2')).to be < '2.7.2' }
43
- specify { expect(described_class.new('1.10.2')).to be < described_class.new('2.7.2') }
44
- specify { expect(described_class.new('1.10.2')).to be < 2.7 }
45
- specify { expect(described_class.new('1.10.2')).to be < 1.11 }
46
- specify { expect(described_class.new('1.2.0')).to eq('1.2') }
47
- end
48
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Runtime do
4
- describe '.version' do
5
- specify { expect(described_class.version).to be_a(described_class::Version) }
6
- specify { expect(described_class.version).to be >= '8.0' }
7
- specify { expect(described_class.version).to be < '9.0' }
8
- end
9
- end
@@ -1,83 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chewy::Search::Loader do
4
- before { drop_indices }
5
-
6
- before do
7
- stub_model(:city)
8
- stub_model(:country)
9
-
10
- stub_index(:cities) do
11
- index_scope City
12
- field :name
13
- field :rating, type: 'integer'
14
- end
15
-
16
- stub_index(:countries) do
17
- index_scope Country
18
- field :name
19
- field :rating, type: 'integer'
20
- end
21
- end
22
-
23
- before do
24
- CitiesIndex.import!(cities: cities)
25
- CountriesIndex.import!(countries: countries)
26
- end
27
-
28
- let(:cities) { Array.new(2) { |i| City.create!(rating: i, name: "city #{i}") } }
29
- let(:countries) { Array.new(2) { |i| Country.create!(rating: i + 2, name: "country #{i}") } }
30
-
31
- let(:options) { {} }
32
- subject { described_class.new(indexes: [CitiesIndex, CountriesIndex], **options) }
33
-
34
- describe '#derive_index' do
35
- specify { expect(subject.derive_index('cities')).to eq(CitiesIndex) }
36
- specify { expect(subject.derive_index('cities_suffix')).to eq(CitiesIndex) }
37
-
38
- specify { expect { subject.derive_index('whatever') }.to raise_error(Chewy::UndefinedIndex) }
39
- specify { expect { subject.derive_index('citiessuffix') }.to raise_error(Chewy::UndefinedIndex) }
40
-
41
- context do
42
- before { CitiesIndex.index_name :boro_goves }
43
-
44
- specify { expect(subject.derive_index('boro_goves')).to eq(CitiesIndex) }
45
- specify { expect(subject.derive_index('boro_goves_suffix')).to eq(CitiesIndex) }
46
- end
47
- end
48
-
49
- describe '#load' do
50
- let(:hits) { Chewy::Search::Request.new(CitiesIndex, CountriesIndex).order(:rating).hits }
51
-
52
- specify { expect(subject.load(hits)).to eq([*cities, *countries]) }
53
-
54
- context 'scopes', :active_record do
55
- context do
56
- let(:options) { {scope: -> { where('rating > 2') }} }
57
- specify { expect(subject.load(hits)).to eq([nil, nil, nil, countries.last]) }
58
- end
59
-
60
- context do
61
- let(:options) { {countries: {scope: -> { where('rating > 2') }}} }
62
- specify { expect(subject.load(hits)).to eq([*cities, nil, countries.last]) }
63
- end
64
- end
65
-
66
- context 'objects' do
67
- before do
68
- stub_index(:cities) do
69
- field :name
70
- field :rating, type: 'integer'
71
- end
72
-
73
- stub_index(:countries) do
74
- field :name
75
- field :rating, type: 'integer'
76
- end
77
- end
78
-
79
- specify { expect(subject.load(hits).map(&:class).uniq).to eq([CitiesIndex, CountriesIndex]) }
80
- specify { expect(subject.load(hits).map(&:rating)).to eq([*cities, *countries].map(&:rating)) }
81
- end
82
- end
83
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples :kaminari do |request_base_class|
4
- before { drop_indices }
5
-
6
- before do
7
- stub_index(:products) do
8
- field :name
9
- field :age, type: 'integer'
10
- end
11
- end
12
-
13
- let(:except_fields) { %w[_score _explanation] }
14
- let(:request_class) do
15
- Class.new(request_base_class).tap do |k|
16
- k.include Chewy::Search::Pagination::Kaminari
17
- end
18
- end
19
- let(:search) { request_class.new(ProductsIndex).order(:age) }
20
-
21
- specify { expect(search.total_pages).to eq(0) }
22
-
23
- context do
24
- let(:data) { Array.new(10) { |i| {id: i.next.to_s, name: "Name#{i.next}", age: 10 * i.next}.stringify_keys! } }
25
-
26
- before { ProductsIndex.import!(data.map { |h| double(h) }) }
27
- before { allow(Kaminari.config).to receive_messages(default_per_page: 3) }
28
-
29
- describe '#per, #page' do
30
- specify { expect(search.map { |e| e.attributes.except(*except_fields) }).to match_array(data) }
31
- specify { expect(search.page(1).map { |e| e.attributes.except(*except_fields) }).to eq(data[0..2]) }
32
- specify { expect(search.page(2).map { |e| e.attributes.except(*except_fields) }).to eq(data[3..5]) }
33
- specify { expect(search.page(2).per(4).map { |e| e.attributes.except(*except_fields) }).to eq(data[4..7]) }
34
- specify { expect(search.per(2).page(3).map { |e| e.attributes.except(*except_fields) }).to eq(data[4..5]) }
35
- specify { expect(search.per(5).page.map { |e| e.attributes.except(*except_fields) }).to eq(data[0..4]) }
36
- specify { expect(search.page.per(4).map { |e| e.attributes.except(*except_fields) }).to eq(data[0..3]) }
37
- end
38
-
39
- describe '#total_pages' do
40
- specify { expect(search.total_pages).to eq(4) }
41
- specify { expect(search.per(5).page(2).total_pages).to eq(2) }
42
- specify { expect(search.per(2).page(3).total_pages).to eq(5) }
43
- end
44
-
45
- describe '#total_count' do
46
- specify { expect(search.per(4).page(1).total_count).to eq(10) }
47
- specify { expect(search.query(range: {age: {gt: 20}}).limit(3).total_count).to eq(8) }
48
- end
49
-
50
- describe '#load' do
51
- specify { expect(search.per(2).page(1).load.first.age).to eq(10) }
52
- specify { expect(search.per(2).page(3).load.first.age).to eq(50) }
53
- specify { expect(search.per(2).page(3).load.page(2).load.first.age).to eq(30) }
54
-
55
- specify { expect(search.per(4).page(1).load.total_count).to eq(10) }
56
- specify { expect(search.per(2).page(3).load.total_pages).to eq(5) }
57
- end
58
-
59
- describe '#limit_value' do
60
- specify { expect(search.limit_value).to eq(3) }
61
- specify { expect(search.per(15).limit_value).to eq(15) }
62
- end
63
-
64
- describe '#offset_value' do
65
- specify { expect(search.offset_value).to eq(0) }
66
- specify { expect(search.page(3).offset_value).to eq(6) }
67
- end
68
- end
69
- end
@@ -1,21 +0,0 @@
1
- require 'chewy/search/pagination/kaminari_examples'
2
-
3
- describe Chewy::Search::Pagination::Kaminari do
4
- it_behaves_like :kaminari, 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.import!(data.map { |h| double(h) }) }
9
- before { allow(Kaminari.config).to receive_messages(default_per_page: 17) }
10
-
11
- specify { expect(search.objects.class).to eq(Kaminari::PaginatableArray) }
12
- specify { expect(search.objects.total_count).to eq(12) }
13
- specify { expect(search.objects.limit_value).to eq(17) }
14
- specify { expect(search.objects.offset_value).to eq(0) }
15
- specify { expect(search.per(2).page(3).objects.class).to eq(Kaminari::PaginatableArray) }
16
- specify { expect(search.per(2).page(3).objects.total_count).to eq(12) }
17
- specify { expect(search.per(2).page(3).objects.limit_value).to eq(2) }
18
- specify { expect(search.per(2).page(3).objects.offset_value).to eq(4) }
19
- end
20
- end
21
- end
@@ -1,5 +0,0 @@
1
- require 'chewy/search/parameters/hash_storage_examples'
2
-
3
- describe Chewy::Search::Parameters::Aggs do
4
- it_behaves_like :hash_storage, :aggs
5
- end