elasticsearch-model 6.0.0 → 6.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -0
  3. data/README.md +14 -7
  4. data/Rakefile +27 -36
  5. data/elasticsearch-model.gemspec +1 -1
  6. data/examples/activerecord_mapping_completion.rb +2 -15
  7. data/gemfiles/3.0.gemfile +6 -1
  8. data/gemfiles/4.0.gemfile +7 -1
  9. data/gemfiles/5.0.gemfile +6 -0
  10. data/lib/elasticsearch/model.rb +15 -8
  11. data/lib/elasticsearch/model/adapters/active_record.rb +7 -26
  12. data/lib/elasticsearch/model/indexing.rb +5 -3
  13. data/lib/elasticsearch/model/naming.rb +6 -1
  14. data/lib/elasticsearch/model/response.rb +2 -2
  15. data/lib/elasticsearch/model/response/pagination.rb +2 -192
  16. data/lib/elasticsearch/model/response/pagination/kaminari.rb +109 -0
  17. data/lib/elasticsearch/model/response/pagination/will_paginate.rb +95 -0
  18. data/lib/elasticsearch/model/response/result.rb +1 -1
  19. data/lib/elasticsearch/model/version.rb +1 -1
  20. data/spec/elasticsearch/model/adapter_spec.rb +119 -0
  21. data/spec/elasticsearch/model/adapters/active_record/associations_spec.rb +334 -0
  22. data/spec/elasticsearch/model/adapters/active_record/basic_spec.rb +340 -0
  23. data/spec/elasticsearch/model/adapters/active_record/dynamic_index_name_spec.rb +18 -0
  24. data/spec/elasticsearch/model/adapters/active_record/import_spec.rb +187 -0
  25. data/spec/elasticsearch/model/adapters/active_record/multi_model_spec.rb +110 -0
  26. data/spec/elasticsearch/model/adapters/active_record/namespaced_model_spec.rb +38 -0
  27. data/spec/elasticsearch/model/adapters/active_record/pagination_spec.rb +315 -0
  28. data/spec/elasticsearch/model/adapters/active_record/parent_child_spec.rb +75 -0
  29. data/spec/elasticsearch/model/adapters/active_record/serialization_spec.rb +61 -0
  30. data/spec/elasticsearch/model/adapters/active_record_spec.rb +207 -0
  31. data/spec/elasticsearch/model/adapters/default_spec.rb +41 -0
  32. data/spec/elasticsearch/model/adapters/mongoid/basic_spec.rb +267 -0
  33. data/spec/elasticsearch/model/adapters/mongoid/multi_model_spec.rb +66 -0
  34. data/spec/elasticsearch/model/adapters/mongoid_spec.rb +235 -0
  35. data/spec/elasticsearch/model/adapters/multiple_spec.rb +125 -0
  36. data/spec/elasticsearch/model/callbacks_spec.rb +33 -0
  37. data/spec/elasticsearch/model/client_spec.rb +66 -0
  38. data/spec/elasticsearch/model/hash_wrapper_spec.rb +12 -0
  39. data/spec/elasticsearch/model/importing_spec.rb +214 -0
  40. data/spec/elasticsearch/model/indexing_spec.rb +918 -0
  41. data/spec/elasticsearch/model/module_spec.rb +101 -0
  42. data/spec/elasticsearch/model/multimodel_spec.rb +55 -0
  43. data/spec/elasticsearch/model/naming_inheritance_spec.rb +184 -0
  44. data/spec/elasticsearch/model/naming_spec.rb +186 -0
  45. data/spec/elasticsearch/model/proxy_spec.rb +107 -0
  46. data/spec/elasticsearch/model/response/aggregations_spec.rb +66 -0
  47. data/spec/elasticsearch/model/response/base_spec.rb +90 -0
  48. data/spec/elasticsearch/model/response/pagination/kaminari_spec.rb +410 -0
  49. data/spec/elasticsearch/model/response/pagination/will_paginate_spec.rb +262 -0
  50. data/spec/elasticsearch/model/response/records_spec.rb +118 -0
  51. data/spec/elasticsearch/model/response/response_spec.rb +131 -0
  52. data/spec/elasticsearch/model/response/result_spec.rb +122 -0
  53. data/spec/elasticsearch/model/response/results_spec.rb +56 -0
  54. data/spec/elasticsearch/model/searching_search_request_spec.rb +112 -0
  55. data/spec/elasticsearch/model/searching_spec.rb +49 -0
  56. data/spec/elasticsearch/model/serializing_spec.rb +22 -0
  57. data/spec/spec_helper.rb +161 -0
  58. data/spec/support/app.rb +21 -0
  59. data/spec/support/app/answer.rb +33 -0
  60. data/spec/support/app/article.rb +22 -0
  61. data/spec/support/app/article_for_pagination.rb +12 -0
  62. data/spec/support/app/article_with_custom_serialization.rb +13 -0
  63. data/spec/support/app/article_with_dynamic_index_name.rb +15 -0
  64. data/spec/support/app/author.rb +9 -0
  65. data/spec/support/app/authorship.rb +4 -0
  66. data/spec/support/app/category.rb +3 -0
  67. data/spec/support/app/comment.rb +3 -0
  68. data/spec/support/app/episode.rb +11 -0
  69. data/spec/support/app/image.rb +19 -0
  70. data/spec/support/app/import_article.rb +12 -0
  71. data/spec/support/app/mongoid_article.rb +21 -0
  72. data/spec/support/app/namespaced_book.rb +10 -0
  73. data/spec/support/app/parent_and_child_searchable.rb +24 -0
  74. data/spec/support/app/post.rb +14 -0
  75. data/spec/support/app/question.rb +27 -0
  76. data/spec/support/app/searchable.rb +48 -0
  77. data/spec/support/app/series.rb +11 -0
  78. data/spec/support/model.json +1 -0
  79. data/{test → spec}/support/model.yml +0 -0
  80. metadata +129 -86
  81. data/test/integration/active_record_associations_parent_child_test.rb +0 -188
  82. data/test/integration/active_record_associations_test.rb +0 -339
  83. data/test/integration/active_record_basic_test.rb +0 -255
  84. data/test/integration/active_record_custom_serialization_test.rb +0 -67
  85. data/test/integration/active_record_import_test.rb +0 -168
  86. data/test/integration/active_record_namespaced_model_test.rb +0 -56
  87. data/test/integration/active_record_pagination_test.rb +0 -149
  88. data/test/integration/dynamic_index_name_test.rb +0 -52
  89. data/test/integration/mongoid_basic_test.rb +0 -240
  90. data/test/integration/multiple_models_test.rb +0 -176
  91. data/test/support/model.json +0 -1
  92. data/test/test_helper.rb +0 -92
  93. data/test/unit/adapter_active_record_test.rb +0 -157
  94. data/test/unit/adapter_default_test.rb +0 -41
  95. data/test/unit/adapter_mongoid_test.rb +0 -161
  96. data/test/unit/adapter_multiple_test.rb +0 -106
  97. data/test/unit/adapter_test.rb +0 -69
  98. data/test/unit/callbacks_test.rb +0 -31
  99. data/test/unit/client_test.rb +0 -27
  100. data/test/unit/hash_wrapper_test.rb +0 -13
  101. data/test/unit/importing_test.rb +0 -224
  102. data/test/unit/indexing_test.rb +0 -720
  103. data/test/unit/module_test.rb +0 -68
  104. data/test/unit/multimodel_test.rb +0 -38
  105. data/test/unit/naming_inheritance_test.rb +0 -94
  106. data/test/unit/naming_test.rb +0 -103
  107. data/test/unit/proxy_test.rb +0 -98
  108. data/test/unit/response_aggregations_test.rb +0 -46
  109. data/test/unit/response_base_test.rb +0 -40
  110. data/test/unit/response_pagination_kaminari_test.rb +0 -433
  111. data/test/unit/response_pagination_will_paginate_test.rb +0 -398
  112. data/test/unit/response_records_test.rb +0 -91
  113. data/test/unit/response_result_test.rb +0 -90
  114. data/test/unit/response_results_test.rb +0 -34
  115. data/test/unit/response_test.rb +0 -104
  116. data/test/unit/searching_search_request_test.rb +0 -78
  117. data/test/unit/searching_test.rb +0 -41
  118. data/test/unit/serializing_test.rb +0 -17
@@ -1,40 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Elasticsearch::Model::BaseTest < Test::Unit::TestCase
4
- context "Response base module" do
5
- class OriginClass
6
- def self.index_name; 'foo'; end
7
- def self.document_type; 'bar'; end
8
- end
9
-
10
- class DummyBaseClass
11
- include Elasticsearch::Model::Response::Base
12
- end
13
-
14
- RESPONSE = { 'hits' => { 'total' => 123, 'max_score' => 456, 'hits' => [] } }
15
-
16
- setup do
17
- @search = Elasticsearch::Model::Searching::SearchRequest.new OriginClass, '*'
18
- @response = Elasticsearch::Model::Response::Response.new OriginClass, @search
19
- @search.stubs(:execute!).returns(RESPONSE)
20
- end
21
-
22
- should "access klass, response, total and max_score" do
23
- r = DummyBaseClass.new OriginClass, @response
24
-
25
- assert_equal OriginClass, r.klass
26
- assert_equal @response, r.response
27
- assert_equal RESPONSE, r.response.response
28
- assert_equal 123, r.total
29
- assert_equal 456, r.max_score
30
- end
31
-
32
- should "have abstract methods results and records" do
33
- r = DummyBaseClass.new OriginClass, @response
34
-
35
- assert_raise(Elasticsearch::Model::NotImplemented) { |e| r.results }
36
- assert_raise(Elasticsearch::Model::NotImplemented) { |e| r.records }
37
- end
38
-
39
- end
40
- end
@@ -1,433 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Elasticsearch::Model::ResponsePaginationKaminariTest < Test::Unit::TestCase
4
- class ModelClass
5
- include ::Kaminari::ConfigurationMethods
6
-
7
- def self.index_name; 'foo'; end
8
- def self.document_type; 'bar'; end
9
- end
10
-
11
- RESPONSE = { 'took' => '5', 'timed_out' => false, '_shards' => {'one' => 'OK'},
12
- 'hits' => { 'total' => 100, 'hits' => (1..100).to_a.map { |i| { _id: i } } } }
13
-
14
- context "Response pagination" do
15
-
16
- setup do
17
- @search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass, '*'
18
- @response = Elasticsearch::Model::Response::Response.new ModelClass, @search, RESPONSE
19
- @response.klass.stubs(:client).returns mock('client')
20
- end
21
-
22
- should "have pagination methods" do
23
- assert_respond_to @response, :page
24
- assert_respond_to @response, :limit_value
25
- assert_respond_to @response, :offset_value
26
- assert_respond_to @response, :limit
27
- assert_respond_to @response, :offset
28
- assert_respond_to @response, :total_count
29
- end
30
-
31
- context "#page method" do
32
- should "advance the from/size" do
33
- @response.klass.client
34
- .expects(:search)
35
- .with do |definition|
36
- assert_equal 25, definition[:from]
37
- assert_equal 25, definition[:size]
38
- true
39
- end
40
- .returns(RESPONSE)
41
-
42
- assert_nil @response.search.definition[:from]
43
- assert_nil @response.search.definition[:size]
44
-
45
- @response.page(2).to_a
46
- assert_equal 25, @response.search.definition[:from]
47
- assert_equal 25, @response.search.definition[:size]
48
- end
49
-
50
- should "advance the from/size further" do
51
- @response.klass.client
52
- .expects(:search)
53
- .with do |definition|
54
- assert_equal 75, definition[:from]
55
- assert_equal 25, definition[:size]
56
- true
57
- end
58
- .returns(RESPONSE)
59
-
60
- @response.page(4).to_a
61
- assert_equal 75, @response.search.definition[:from]
62
- assert_equal 25, @response.search.definition[:size]
63
- end
64
- end
65
-
66
- context "limit/offset readers" do
67
- should "return the default" do
68
- assert_equal Kaminari.config.default_per_page, @response.limit_value
69
- assert_equal 0, @response.offset_value
70
- end
71
-
72
- should "return the value from URL parameters" do
73
- search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass, '*', size: 10, from: 50
74
- @response = Elasticsearch::Model::Response::Response.new ModelClass, search, RESPONSE
75
-
76
- assert_equal 10, @response.limit_value
77
- assert_equal 50, @response.offset_value
78
- end
79
-
80
- should "ignore the value from request body" do
81
- search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass,
82
- { query: { match_all: {} }, from: 333, size: 999 }
83
- @response = Elasticsearch::Model::Response::Response.new ModelClass, search, RESPONSE
84
-
85
- assert_equal Kaminari.config.default_per_page, @response.limit_value
86
- assert_equal 0, @response.offset_value
87
- end
88
- end
89
-
90
- context "limit setter" do
91
- setup do
92
- @response.records
93
- @response.results
94
- end
95
-
96
- should "set the values" do
97
- @response.limit(35)
98
- assert_equal 35, @response.search.definition[:size]
99
- end
100
-
101
- should "reset the variables" do
102
- @response.limit(35)
103
-
104
- assert_nil @response.instance_variable_get(:@response)
105
- assert_nil @response.instance_variable_get(:@records)
106
- assert_nil @response.instance_variable_get(:@results)
107
- end
108
-
109
- should 'coerce string parameters' do
110
- @response.limit("35")
111
- assert_equal 35, @response.search.definition[:size]
112
- end
113
-
114
- should 'ignore invalid string parameters' do
115
- @response.limit(35)
116
- @response.limit("asdf")
117
- assert_equal 35, @response.search.definition[:size]
118
- end
119
- end
120
-
121
- context "with the page() and limit() methods" do
122
- setup do
123
- @response.records
124
- @response.results
125
- end
126
-
127
- should "set the values" do
128
- @response.page(3).limit(35)
129
- assert_equal 35, @response.search.definition[:size]
130
- assert_equal 70, @response.search.definition[:from]
131
- end
132
-
133
- should "set the values when limit is called first" do
134
- @response.limit(35).page(3)
135
- assert_equal 35, @response.search.definition[:size]
136
- assert_equal 70, @response.search.definition[:from]
137
- end
138
-
139
- should "reset the instance variables" do
140
- @response.page(3).limit(35)
141
-
142
- assert_nil @response.instance_variable_get(:@response)
143
- assert_nil @response.instance_variable_get(:@records)
144
- assert_nil @response.instance_variable_get(:@results)
145
- end
146
- end
147
-
148
- context "offset setter" do
149
- setup do
150
- @response.records
151
- @response.results
152
- end
153
-
154
- should "set the values" do
155
- @response.offset(15)
156
- assert_equal 15, @response.search.definition[:from]
157
- end
158
-
159
- should "reset the variables" do
160
- @response.offset(35)
161
-
162
- assert_nil @response.instance_variable_get(:@response)
163
- assert_nil @response.instance_variable_get(:@records)
164
- assert_nil @response.instance_variable_get(:@results)
165
- end
166
-
167
- should 'coerce string parameters' do
168
- @response.offset("35")
169
- assert_equal 35, @response.search.definition[:from]
170
- end
171
-
172
- should 'coerce invalid string parameters' do
173
- @response.offset(35)
174
- @response.offset("asdf")
175
- assert_equal 0, @response.search.definition[:from]
176
- end
177
- end
178
-
179
- context "total" do
180
- should "return the number of hits" do
181
- @response.expects(:results).returns(mock('results', total: 100))
182
- assert_equal 100, @response.total_count
183
- end
184
- end
185
-
186
- context "results" do
187
- setup do
188
- @search.stubs(:execute!).returns RESPONSE
189
- end
190
-
191
- should "return current page and total count" do
192
- assert_equal 1, @response.page(1).results.current_page
193
- assert_equal 100, @response.results.total_count
194
-
195
- assert_equal 5, @response.page(5).results.current_page
196
- end
197
-
198
- should "return previous page and next page" do
199
- assert_equal nil, @response.page(1).results.prev_page
200
- assert_equal 2, @response.page(1).results.next_page
201
-
202
- assert_equal 3, @response.page(4).results.prev_page
203
- assert_equal nil, @response.page(4).results.next_page
204
-
205
- assert_equal 2, @response.page(3).results.prev_page
206
- assert_equal 4, @response.page(3).results.next_page
207
- end
208
- end
209
-
210
- context "records" do
211
- setup do
212
- @search.stubs(:execute!).returns RESPONSE
213
- end
214
-
215
- should "return current page and total count" do
216
- assert_equal 1, @response.page(1).records.current_page
217
- assert_equal 100, @response.records.total_count
218
-
219
- assert_equal 5, @response.page(5).records.current_page
220
- end
221
-
222
- should "return previous page and next page" do
223
- assert_equal nil, @response.page(1).records.prev_page
224
- assert_equal 2, @response.page(1).records.next_page
225
-
226
- assert_equal 3, @response.page(4).records.prev_page
227
- assert_equal nil, @response.page(4).records.next_page
228
-
229
- assert_equal 2, @response.page(3).records.prev_page
230
- assert_equal 4, @response.page(3).records.next_page
231
- end
232
- end
233
- end
234
-
235
- context "Multimodel response pagination" do
236
- setup do
237
- @multimodel = Elasticsearch::Model::Multimodel.new(ModelClass)
238
- @search = Elasticsearch::Model::Searching::SearchRequest.new @multimodel, '*'
239
- @response = Elasticsearch::Model::Response::Response.new @multimodel, @search, RESPONSE
240
- @response.klass.stubs(:client).returns mock('client')
241
- end
242
-
243
- should "have pagination methods" do
244
- assert_respond_to @response, :page
245
- assert_respond_to @response, :limit_value
246
- assert_respond_to @response, :offset_value
247
- assert_respond_to @response, :limit
248
- assert_respond_to @response, :offset
249
- assert_respond_to @response, :total_count
250
- end
251
-
252
- context "#page method" do
253
- should "advance the from/size" do
254
- @response.klass.client
255
- .expects(:search)
256
- .with do |definition|
257
- assert_equal 25, definition[:from]
258
- assert_equal 25, definition[:size]
259
- true
260
- end
261
- .returns(RESPONSE)
262
-
263
- assert_nil @response.search.definition[:from]
264
- assert_nil @response.search.definition[:size]
265
-
266
- @response.page(2).to_a
267
- assert_equal 25, @response.search.definition[:from]
268
- assert_equal 25, @response.search.definition[:size]
269
- end
270
-
271
- should "advance the from/size further" do
272
- @response.klass.client
273
- .expects(:search)
274
- .with do |definition|
275
- assert_equal 75, definition[:from]
276
- assert_equal 25, definition[:size]
277
- true
278
- end
279
- .returns(RESPONSE)
280
-
281
- @response.page(4).to_a
282
- assert_equal 75, @response.search.definition[:from]
283
- assert_equal 25, @response.search.definition[:size]
284
- end
285
- end
286
-
287
- context "limit/offset readers" do
288
- should "return the default" do
289
- assert_equal Kaminari.config.default_per_page, @response.limit_value
290
- assert_equal 0, @response.offset_value
291
- end
292
-
293
- should "return the value from URL parameters" do
294
- search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass, '*', size: 10, from: 50
295
- @response = Elasticsearch::Model::Response::Response.new ModelClass, search, RESPONSE
296
-
297
- assert_equal 10, @response.limit_value
298
- assert_equal 50, @response.offset_value
299
- end
300
-
301
- should "ignore the value from request body" do
302
- search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass,
303
- { query: { match_all: {} }, from: 333, size: 999 }
304
- @response = Elasticsearch::Model::Response::Response.new ModelClass, search, RESPONSE
305
-
306
- assert_equal Kaminari.config.default_per_page, @response.limit_value
307
- assert_equal 0, @response.offset_value
308
- end
309
- end
310
-
311
- context "limit setter" do
312
- setup do
313
- @response.records
314
- @response.results
315
- end
316
-
317
- should "set the values" do
318
- @response.limit(35)
319
- assert_equal 35, @response.search.definition[:size]
320
- end
321
-
322
- should "reset the variables" do
323
- @response.limit(35)
324
-
325
- assert_nil @response.instance_variable_get(:@response)
326
- assert_nil @response.instance_variable_get(:@records)
327
- assert_nil @response.instance_variable_get(:@results)
328
- end
329
- end
330
-
331
- context "with the page() and limit() methods" do
332
- setup do
333
- @response.records
334
- @response.results
335
- end
336
-
337
- should "set the values" do
338
- @response.page(3).limit(35)
339
- assert_equal 35, @response.search.definition[:size]
340
- assert_equal 70, @response.search.definition[:from]
341
- end
342
-
343
- should "set the values when limit is called first" do
344
- @response.limit(35).page(3)
345
- assert_equal 35, @response.search.definition[:size]
346
- assert_equal 70, @response.search.definition[:from]
347
- end
348
-
349
- should "reset the instance variables" do
350
- @response.page(3).limit(35)
351
-
352
- assert_nil @response.instance_variable_get(:@response)
353
- assert_nil @response.instance_variable_get(:@records)
354
- assert_nil @response.instance_variable_get(:@results)
355
- end
356
- end
357
-
358
- context "offset setter" do
359
- setup do
360
- @response.records
361
- @response.results
362
- end
363
-
364
- should "set the values" do
365
- @response.offset(15)
366
- assert_equal 15, @response.search.definition[:from]
367
- end
368
-
369
- should "reset the variables" do
370
- @response.offset(35)
371
-
372
- assert_nil @response.instance_variable_get(:@response)
373
- assert_nil @response.instance_variable_get(:@records)
374
- assert_nil @response.instance_variable_get(:@results)
375
- end
376
- end
377
-
378
- context "total" do
379
- should "return the number of hits" do
380
- @response.expects(:results).returns(mock('results', total: 100))
381
- assert_equal 100, @response.total_count
382
- end
383
- end
384
-
385
- context "results" do
386
- setup do
387
- @search.stubs(:execute!).returns RESPONSE
388
- end
389
-
390
- should "return current page and total count" do
391
- assert_equal 1, @response.page(1).results.current_page
392
- assert_equal 100, @response.results.total_count
393
-
394
- assert_equal 5, @response.page(5).results.current_page
395
- end
396
-
397
- should "return previous page and next page" do
398
- assert_equal nil, @response.page(1).results.prev_page
399
- assert_equal 2, @response.page(1).results.next_page
400
-
401
- assert_equal 3, @response.page(4).results.prev_page
402
- assert_equal nil, @response.page(4).results.next_page
403
-
404
- assert_equal 2, @response.page(3).results.prev_page
405
- assert_equal 4, @response.page(3).results.next_page
406
- end
407
- end
408
-
409
- context "records" do
410
- setup do
411
- @search.stubs(:execute!).returns RESPONSE
412
- end
413
-
414
- should "return current page and total count" do
415
- assert_equal 1, @response.page(1).records.current_page
416
- assert_equal 100, @response.records.total_count
417
-
418
- assert_equal 5, @response.page(5).records.current_page
419
- end
420
-
421
- should "return previous page and next page" do
422
- assert_equal nil, @response.page(1).records.prev_page
423
- assert_equal 2, @response.page(1).records.next_page
424
-
425
- assert_equal 3, @response.page(4).records.prev_page
426
- assert_equal nil, @response.page(4).records.next_page
427
-
428
- assert_equal 2, @response.page(3).records.prev_page
429
- assert_equal 4, @response.page(3).records.next_page
430
- end
431
- end
432
- end
433
- end