elasticsearch-model 5.1.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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -0
  3. data/README.md +18 -11
  4. data/Rakefile +27 -36
  5. data/elasticsearch-model.gemspec +5 -5
  6. data/examples/activerecord_custom_analyzer.rb +135 -0
  7. data/examples/activerecord_mapping_completion.rb +3 -18
  8. data/examples/datamapper_article.rb +11 -1
  9. data/gemfiles/3.0.gemfile +6 -1
  10. data/gemfiles/4.0.gemfile +7 -1
  11. data/gemfiles/5.0.gemfile +7 -1
  12. data/lib/elasticsearch/model/adapters/active_record.rb +7 -23
  13. data/lib/elasticsearch/model/adapters/mongoid.rb +10 -3
  14. data/lib/elasticsearch/model/importing.rb +1 -1
  15. data/lib/elasticsearch/model/indexing.rb +6 -4
  16. data/lib/elasticsearch/model/naming.rb +9 -2
  17. data/lib/elasticsearch/model/response/aggregations.rb +1 -1
  18. data/lib/elasticsearch/model/response/base.rb +3 -2
  19. data/lib/elasticsearch/model/response/pagination/kaminari.rb +109 -0
  20. data/lib/elasticsearch/model/response/pagination/will_paginate.rb +95 -0
  21. data/lib/elasticsearch/model/response/pagination.rb +2 -192
  22. data/lib/elasticsearch/model/response/result.rb +1 -1
  23. data/lib/elasticsearch/model/response/suggestions.rb +1 -1
  24. data/lib/elasticsearch/model/response.rb +11 -10
  25. data/lib/elasticsearch/model/version.rb +1 -1
  26. data/lib/elasticsearch/model.rb +15 -8
  27. data/spec/elasticsearch/model/adapter_spec.rb +119 -0
  28. data/spec/elasticsearch/model/adapters/active_record/associations_spec.rb +334 -0
  29. data/spec/elasticsearch/model/adapters/active_record/basic_spec.rb +340 -0
  30. data/spec/elasticsearch/model/adapters/active_record/dynamic_index_name_spec.rb +18 -0
  31. data/spec/elasticsearch/model/adapters/active_record/import_spec.rb +187 -0
  32. data/spec/elasticsearch/model/adapters/active_record/multi_model_spec.rb +110 -0
  33. data/spec/elasticsearch/model/adapters/active_record/namespaced_model_spec.rb +38 -0
  34. data/spec/elasticsearch/model/adapters/active_record/pagination_spec.rb +315 -0
  35. data/spec/elasticsearch/model/adapters/active_record/parent_child_spec.rb +75 -0
  36. data/spec/elasticsearch/model/adapters/active_record/serialization_spec.rb +61 -0
  37. data/spec/elasticsearch/model/adapters/active_record_spec.rb +207 -0
  38. data/spec/elasticsearch/model/adapters/default_spec.rb +41 -0
  39. data/spec/elasticsearch/model/adapters/mongoid/basic_spec.rb +267 -0
  40. data/spec/elasticsearch/model/adapters/mongoid/multi_model_spec.rb +66 -0
  41. data/spec/elasticsearch/model/adapters/mongoid_spec.rb +235 -0
  42. data/spec/elasticsearch/model/adapters/multiple_spec.rb +125 -0
  43. data/spec/elasticsearch/model/callbacks_spec.rb +33 -0
  44. data/spec/elasticsearch/model/client_spec.rb +66 -0
  45. data/spec/elasticsearch/model/hash_wrapper_spec.rb +12 -0
  46. data/spec/elasticsearch/model/importing_spec.rb +214 -0
  47. data/spec/elasticsearch/model/indexing_spec.rb +918 -0
  48. data/spec/elasticsearch/model/module_spec.rb +101 -0
  49. data/spec/elasticsearch/model/multimodel_spec.rb +55 -0
  50. data/spec/elasticsearch/model/naming_inheritance_spec.rb +184 -0
  51. data/spec/elasticsearch/model/naming_spec.rb +186 -0
  52. data/spec/elasticsearch/model/proxy_spec.rb +107 -0
  53. data/spec/elasticsearch/model/response/aggregations_spec.rb +66 -0
  54. data/spec/elasticsearch/model/response/base_spec.rb +90 -0
  55. data/spec/elasticsearch/model/response/pagination/kaminari_spec.rb +410 -0
  56. data/spec/elasticsearch/model/response/pagination/will_paginate_spec.rb +262 -0
  57. data/spec/elasticsearch/model/response/records_spec.rb +118 -0
  58. data/spec/elasticsearch/model/response/response_spec.rb +131 -0
  59. data/spec/elasticsearch/model/response/result_spec.rb +122 -0
  60. data/spec/elasticsearch/model/response/results_spec.rb +56 -0
  61. data/spec/elasticsearch/model/searching_search_request_spec.rb +112 -0
  62. data/spec/elasticsearch/model/searching_spec.rb +49 -0
  63. data/spec/elasticsearch/model/serializing_spec.rb +22 -0
  64. data/spec/spec_helper.rb +161 -0
  65. data/spec/support/app/answer.rb +33 -0
  66. data/spec/support/app/article.rb +22 -0
  67. data/spec/support/app/article_for_pagination.rb +12 -0
  68. data/spec/support/app/article_with_custom_serialization.rb +13 -0
  69. data/spec/support/app/article_with_dynamic_index_name.rb +15 -0
  70. data/spec/support/app/author.rb +9 -0
  71. data/spec/support/app/authorship.rb +4 -0
  72. data/spec/support/app/category.rb +3 -0
  73. data/spec/support/app/comment.rb +3 -0
  74. data/spec/support/app/episode.rb +11 -0
  75. data/spec/support/app/image.rb +19 -0
  76. data/spec/support/app/import_article.rb +12 -0
  77. data/spec/support/app/mongoid_article.rb +21 -0
  78. data/spec/support/app/namespaced_book.rb +10 -0
  79. data/spec/support/app/parent_and_child_searchable.rb +24 -0
  80. data/spec/support/app/post.rb +14 -0
  81. data/spec/support/app/question.rb +27 -0
  82. data/spec/support/app/searchable.rb +48 -0
  83. data/spec/support/app/series.rb +11 -0
  84. data/spec/support/app.rb +21 -0
  85. data/spec/support/model.json +1 -0
  86. metadata +134 -90
  87. data/test/integration/active_record_associations_parent_child_test.rb +0 -147
  88. data/test/integration/active_record_associations_test.rb +0 -339
  89. data/test/integration/active_record_basic_test.rb +0 -251
  90. data/test/integration/active_record_custom_serialization_test.rb +0 -67
  91. data/test/integration/active_record_import_test.rb +0 -115
  92. data/test/integration/active_record_namespaced_model_test.rb +0 -54
  93. data/test/integration/active_record_pagination_test.rb +0 -149
  94. data/test/integration/dynamic_index_name_test.rb +0 -52
  95. data/test/integration/mongoid_basic_test.rb +0 -176
  96. data/test/integration/multiple_models_test.rb +0 -176
  97. data/test/support/model.json +0 -1
  98. data/test/test_helper.rb +0 -92
  99. data/test/unit/adapter_active_record_test.rb +0 -157
  100. data/test/unit/adapter_default_test.rb +0 -41
  101. data/test/unit/adapter_mongoid_test.rb +0 -104
  102. data/test/unit/adapter_multiple_test.rb +0 -106
  103. data/test/unit/adapter_test.rb +0 -69
  104. data/test/unit/callbacks_test.rb +0 -31
  105. data/test/unit/client_test.rb +0 -27
  106. data/test/unit/hash_wrapper_test.rb +0 -13
  107. data/test/unit/importing_test.rb +0 -203
  108. data/test/unit/indexing_test.rb +0 -687
  109. data/test/unit/module_test.rb +0 -68
  110. data/test/unit/multimodel_test.rb +0 -38
  111. data/test/unit/naming_inheritance_test.rb +0 -94
  112. data/test/unit/naming_test.rb +0 -103
  113. data/test/unit/proxy_test.rb +0 -98
  114. data/test/unit/response_aggregations_test.rb +0 -46
  115. data/test/unit/response_base_test.rb +0 -40
  116. data/test/unit/response_pagination_kaminari_test.rb +0 -433
  117. data/test/unit/response_pagination_will_paginate_test.rb +0 -398
  118. data/test/unit/response_records_test.rb +0 -91
  119. data/test/unit/response_result_test.rb +0 -90
  120. data/test/unit/response_results_test.rb +0 -31
  121. data/test/unit/response_test.rb +0 -104
  122. data/test/unit/searching_search_request_test.rb +0 -78
  123. data/test/unit/searching_test.rb +0 -41
  124. data/test/unit/serializing_test.rb +0 -17
  125. /data/{test → spec}/support/model.yml +0 -0
@@ -1,398 +0,0 @@
1
- require 'test_helper'
2
- require 'will_paginate'
3
- require 'will_paginate/collection'
4
-
5
- class Elasticsearch::Model::ResponsePaginationWillPaginateTest < Test::Unit::TestCase
6
- class ModelClass
7
- def self.index_name; 'foo'; end
8
- def self.document_type; 'bar'; end
9
-
10
- # WillPaginate adds this method to models (see WillPaginate::PerPage module)
11
- def self.per_page
12
- 33
13
- end
14
- end
15
-
16
- # Subsclass Response so we can include WillPaginate module without conflicts with Kaminari.
17
- class WillPaginateResponse < Elasticsearch::Model::Response::Response
18
- include Elasticsearch::Model::Response::Pagination::WillPaginate
19
- end
20
-
21
- RESPONSE = { 'took' => '5', 'timed_out' => false, '_shards' => {'one' => 'OK'},
22
- 'hits' => { 'total' => 100, 'hits' => (1..100).to_a.map { |i| { _id: i } } } }
23
-
24
- context "Response pagination" do
25
-
26
- setup do
27
- @search = Elasticsearch::Model::Searching::SearchRequest.new ModelClass, '*'
28
- @response = WillPaginateResponse.new ModelClass, @search, RESPONSE
29
- @response.klass.stubs(:client).returns mock('client')
30
-
31
- @expected_methods = [
32
- # methods needed by WillPaginate::CollectionMethods
33
- :current_page,
34
- :offset,
35
- :per_page,
36
- :total_entries,
37
- :length,
38
-
39
- # methods defined by WillPaginate::CollectionMethods
40
- :total_pages,
41
- :previous_page,
42
- :next_page,
43
- :out_of_bounds?,
44
- ]
45
- end
46
-
47
- should "have pagination methods" do
48
- assert_respond_to @response, :paginate
49
-
50
- @expected_methods.each do |method|
51
- assert_respond_to @response, method
52
- end
53
- end
54
-
55
- context "response.results" do
56
- should "have pagination methods" do
57
- @expected_methods.each do |method|
58
- assert_respond_to @response.results, method
59
- end
60
- end
61
- end
62
-
63
- context "response.records" do
64
- should "have pagination methods" do
65
- @expected_methods.each do |method|
66
- @response.klass.stubs(:find).returns([])
67
- assert_respond_to @response.records, method
68
- end
69
- end
70
- end
71
-
72
- context "#offset method" do
73
- should "calculate offset using current_page and per_page" do
74
- @response.per_page(3).page(3)
75
- assert_equal 6, @response.offset
76
- end
77
- end
78
- context "#length method" do
79
- should "return count of paginated results" do
80
- @response.per_page(3).page(3)
81
- assert_equal 3, @response.length
82
- end
83
- end
84
-
85
- context "#paginate method" do
86
- should "set from/size using defaults" do
87
- @response.klass.client
88
- .expects(:search)
89
- .with do |definition|
90
- assert_equal 0, definition[:from]
91
- assert_equal 33, definition[:size]
92
- true
93
- end
94
- .returns(RESPONSE)
95
-
96
- assert_nil @response.search.definition[:from]
97
- assert_nil @response.search.definition[:size]
98
-
99
- @response.paginate(page: nil).to_a
100
- assert_equal 0, @response.search.definition[:from]
101
- assert_equal 33, @response.search.definition[:size]
102
- end
103
-
104
- should "set from/size using default per_page" do
105
- @response.klass.client
106
- .expects(:search)
107
- .with do |definition|
108
- assert_equal 33, definition[:from]
109
- assert_equal 33, definition[:size]
110
- true
111
- end
112
- .returns(RESPONSE)
113
-
114
- assert_nil @response.search.definition[:from]
115
- assert_nil @response.search.definition[:size]
116
-
117
- @response.paginate(page: 2).to_a
118
- assert_equal 33, @response.search.definition[:from]
119
- assert_equal 33, @response.search.definition[:size]
120
- end
121
-
122
- should "set from/size using custom page and per_page" do
123
- @response.klass.client
124
- .expects(:search)
125
- .with do |definition|
126
- assert_equal 18, definition[:from]
127
- assert_equal 9, definition[:size]
128
- true
129
- end
130
- .returns(RESPONSE)
131
-
132
- assert_nil @response.search.definition[:from]
133
- assert_nil @response.search.definition[:size]
134
-
135
- @response.paginate(page: 3, per_page: 9).to_a
136
- assert_equal 18, @response.search.definition[:from]
137
- assert_equal 9, @response.search.definition[:size]
138
- end
139
-
140
- should "search for first page if specified page is < 1" do
141
- @response.klass.client
142
- .expects(:search)
143
- .with do |definition|
144
- assert_equal 0, definition[:from]
145
- assert_equal 33, definition[:size]
146
- true
147
- end
148
- .returns(RESPONSE)
149
-
150
- assert_nil @response.search.definition[:from]
151
- assert_nil @response.search.definition[:size]
152
-
153
- @response.paginate(page: "-1").to_a
154
- assert_equal 0, @response.search.definition[:from]
155
- assert_equal 33, @response.search.definition[:size]
156
- end
157
-
158
- should "use the param_name" do
159
- @response.klass.client
160
- .expects(:search)
161
- .with do |definition|
162
- assert_equal 10, definition[:from]
163
- true
164
- end
165
- .returns(RESPONSE)
166
-
167
- @response.paginate(my_page: 2, per_page: 10, param_name: :my_page).to_a
168
- end
169
- end
170
-
171
- context "#page and #per_page shorthand methods" do
172
- should "set from/size using default per_page" do
173
- @response.page(5)
174
- assert_equal 132, @response.search.definition[:from]
175
- assert_equal 33, @response.search.definition[:size]
176
- end
177
-
178
- should "set from/size when calling #page then #per_page" do
179
- @response.page(5).per_page(3)
180
- assert_equal 12, @response.search.definition[:from]
181
- assert_equal 3, @response.search.definition[:size]
182
- end
183
-
184
- should "set from/size when calling #per_page then #page" do
185
- @response.per_page(3).page(5)
186
- assert_equal 12, @response.search.definition[:from]
187
- assert_equal 3, @response.search.definition[:size]
188
- end
189
- end
190
-
191
- context "#current_page method" do
192
- should "return 1 by default" do
193
- @response.paginate({})
194
- assert_equal 1, @response.current_page
195
- end
196
-
197
- should "return current page number" do
198
- @response.paginate(page: 3, per_page: 9)
199
- assert_equal 3, @response.current_page
200
- end
201
-
202
- should "return nil if not pagination set" do
203
- assert_equal nil, @response.current_page
204
- end
205
- end
206
-
207
- context "#per_page method" do
208
- should "return value set in paginate call" do
209
- @response.paginate(per_page: 8)
210
- assert_equal 8, @response.per_page
211
- end
212
- end
213
-
214
- context "#total_entries method" do
215
- should "return total from response" do
216
- @response.expects(:results).returns(mock('results', total: 100))
217
- assert_equal 100, @response.total_entries
218
- end
219
- end
220
- end
221
-
222
- context "Multimodel response pagination" do
223
- setup do
224
- @multimodel = Elasticsearch::Model::Multimodel.new ModelClass
225
- @search = Elasticsearch::Model::Searching::SearchRequest.new @multimodel, '*'
226
- @response = WillPaginateResponse.new @multimodel, @search, RESPONSE
227
- @response.klass.stubs(:client).returns mock('client')
228
-
229
- @expected_methods = [
230
- # methods needed by WillPaginate::CollectionMethods
231
- :current_page,
232
- :offset,
233
- :per_page,
234
- :total_entries,
235
- :length,
236
-
237
- # methods defined by WillPaginate::CollectionMethods
238
- :total_pages,
239
- :previous_page,
240
- :next_page,
241
- :out_of_bounds?,
242
- ]
243
- end
244
-
245
- should "have pagination methods" do
246
- assert_respond_to @response, :paginate
247
-
248
- @expected_methods.each do |method|
249
- assert_respond_to @response, method
250
- end
251
- end
252
-
253
- context "response.results" do
254
- should "have pagination methods" do
255
- @expected_methods.each do |method|
256
- assert_respond_to @response.results, method
257
- end
258
- end
259
- end
260
-
261
- context "#offset method" do
262
- should "calculate offset using current_page and per_page" do
263
- @response.per_page(3).page(3)
264
- assert_equal 6, @response.offset
265
- end
266
- end
267
- context "#length method" do
268
- should "return count of paginated results" do
269
- @response.per_page(3).page(3)
270
- assert_equal 3, @response.length
271
- end
272
- end
273
-
274
- context "#paginate method" do
275
- should "set from/size using WillPaginate defaults, ignoring aggregated models configuration" do
276
- @response.klass.client
277
- .expects(:search)
278
- .with do |definition|
279
- assert_equal 0, definition[:from]
280
- assert_equal ::WillPaginate.per_page, definition[:size]
281
- true
282
- end
283
- .returns(RESPONSE)
284
-
285
- assert_nil @response.search.definition[:from]
286
- assert_nil @response.search.definition[:size]
287
-
288
- @response.paginate(page: nil).to_a
289
- assert_equal 0, @response.search.definition[:from]
290
- assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
291
- end
292
-
293
- should "set from/size using default per_page, ignoring aggregated models' configuration" do
294
- @response.klass.client
295
- .expects(:search)
296
- .with do |definition|
297
- assert_equal ::WillPaginate.per_page, definition[:from]
298
- assert_equal ::WillPaginate.per_page, definition[:size]
299
- true
300
- end
301
- .returns(RESPONSE)
302
-
303
- assert_nil @response.search.definition[:from]
304
- assert_nil @response.search.definition[:size]
305
-
306
- @response.paginate(page: 2).to_a
307
- assert_equal ::WillPaginate.per_page, @response.search.definition[:from]
308
- assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
309
- end
310
-
311
- should "set from/size using custom page and per_page" do
312
- @response.klass.client
313
- .expects(:search)
314
- .with do |definition|
315
- assert_equal 18, definition[:from]
316
- assert_equal 9, definition[:size]
317
- true
318
- end
319
- .returns(RESPONSE)
320
-
321
- assert_nil @response.search.definition[:from]
322
- assert_nil @response.search.definition[:size]
323
-
324
- @response.paginate(page: 3, per_page: 9).to_a
325
- assert_equal 18, @response.search.definition[:from]
326
- assert_equal 9, @response.search.definition[:size]
327
- end
328
-
329
- should "search for first page if specified page is < 1" do
330
- @response.klass.client
331
- .expects(:search)
332
- .with do |definition|
333
- assert_equal 0, definition[:from]
334
- assert_equal ::WillPaginate.per_page, definition[:size]
335
- true
336
- end
337
- .returns(RESPONSE)
338
-
339
- assert_nil @response.search.definition[:from]
340
- assert_nil @response.search.definition[:size]
341
-
342
- @response.paginate(page: "-1").to_a
343
- assert_equal 0, @response.search.definition[:from]
344
- assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
345
- end
346
- end
347
-
348
- context "#page and #per_page shorthand methods" do
349
- should "set from/size using default per_page" do
350
- @response.page(5)
351
- assert_equal 120, @response.search.definition[:from]
352
- assert_equal ::WillPaginate.per_page, @response.search.definition[:size]
353
- end
354
-
355
- should "set from/size when calling #page then #per_page" do
356
- @response.page(5).per_page(3)
357
- assert_equal 12, @response.search.definition[:from]
358
- assert_equal 3, @response.search.definition[:size]
359
- end
360
-
361
- should "set from/size when calling #per_page then #page" do
362
- @response.per_page(3).page(5)
363
- assert_equal 12, @response.search.definition[:from]
364
- assert_equal 3, @response.search.definition[:size]
365
- end
366
- end
367
-
368
- context "#current_page method" do
369
- should "return 1 by default" do
370
- @response.paginate({})
371
- assert_equal 1, @response.current_page
372
- end
373
-
374
- should "return current page number" do
375
- @response.paginate(page: 3, per_page: 9)
376
- assert_equal 3, @response.current_page
377
- end
378
-
379
- should "return nil if not pagination set" do
380
- assert_equal nil, @response.current_page
381
- end
382
- end
383
-
384
- context "#per_page method" do
385
- should "return value set in paginate call" do
386
- @response.paginate(per_page: 8)
387
- assert_equal 8, @response.per_page
388
- end
389
- end
390
-
391
- context "#total_entries method" do
392
- should "return total from response" do
393
- @response.expects(:results).returns(mock('results', total: 100))
394
- assert_equal 100, @response.total_entries
395
- end
396
- end
397
- end
398
- end
@@ -1,91 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Elasticsearch::Model::RecordsTest < Test::Unit::TestCase
4
- context "Response records" do
5
- class DummyCollection
6
- include Enumerable
7
-
8
- def each(&block); ['FOO'].each(&block); end
9
- def size; ['FOO'].size; end
10
- def empty?; ['FOO'].empty?; end
11
- def foo; 'BAR'; end
12
- end
13
-
14
- class DummyModel
15
- def self.index_name; 'foo'; end
16
- def self.document_type; 'bar'; end
17
-
18
- def self.find(*args)
19
- DummyCollection.new
20
- end
21
- end
22
-
23
- RESPONSE = { 'hits' => { 'total' => 123, 'max_score' => 456, 'hits' => [{'_id' => '1', 'foo' => 'bar'}] } }
24
- RESULTS = Elasticsearch::Model::Response::Results.new DummyModel, RESPONSE
25
-
26
- setup do
27
- search = Elasticsearch::Model::Searching::SearchRequest.new DummyModel, '*'
28
- search.stubs(:execute!).returns RESPONSE
29
-
30
- response = Elasticsearch::Model::Response::Response.new DummyModel, search
31
- @records = Elasticsearch::Model::Response::Records.new DummyModel, response
32
- end
33
-
34
- should "access the records" do
35
- assert_respond_to @records, :records
36
- assert_equal 1, @records.records.size
37
- assert_equal 'FOO', @records.records.first
38
- end
39
-
40
- should "delegate Enumerable methods to records" do
41
- assert ! @records.empty?
42
- assert_equal 'FOO', @records.first
43
- end
44
-
45
- should "delegate methods to records" do
46
- assert_respond_to @records, :foo
47
- assert_equal 'BAR', @records.foo
48
- end
49
-
50
- should "have each_with_hit method" do
51
- @records.each_with_hit do |record, hit|
52
- assert_equal 'FOO', record
53
- assert_equal 'bar', hit.foo
54
- end
55
- end
56
-
57
- should "have map_with_hit method" do
58
- assert_equal ['FOO---bar'], @records.map_with_hit { |record, hit| "#{record}---#{hit.foo}" }
59
- end
60
-
61
- should "return the IDs" do
62
- assert_equal ['1'], @records.ids
63
- end
64
-
65
- context "with adapter" do
66
- module DummyAdapter
67
- module RecordsMixin
68
- def records
69
- ['FOOBAR']
70
- end
71
- end
72
-
73
- def records_mixin
74
- RecordsMixin
75
- end; module_function :records_mixin
76
- end
77
-
78
- should "delegate the records method to the adapter" do
79
- Elasticsearch::Model::Adapter.expects(:from_class)
80
- .with(DummyModel)
81
- .returns(DummyAdapter)
82
-
83
- @records = Elasticsearch::Model::Response::Records.new DummyModel,
84
- RESPONSE
85
-
86
- assert_equal ['FOOBAR'], @records.records
87
- end
88
- end
89
-
90
- end
91
- end
@@ -1,90 +0,0 @@
1
- require 'test_helper'
2
- require 'active_support/json/encoding'
3
-
4
- class Elasticsearch::Model::ResultTest < Test::Unit::TestCase
5
- context "Response result" do
6
-
7
- should "have method access to properties" do
8
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', bar: { bam: 'baz' }
9
-
10
- assert_respond_to result, :foo
11
- assert_respond_to result, :bar
12
-
13
- assert_equal 'bar', result.foo
14
- assert_equal 'baz', result.bar.bam
15
-
16
- assert_raise(NoMethodError) { result.xoxo }
17
- end
18
-
19
- should "return _id as #id" do
20
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _id: 42, _source: { id: 12 }
21
-
22
- assert_equal 42, result.id
23
- assert_equal 12, result._source.id
24
- end
25
-
26
- should "return _type as #type" do
27
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _type: 'baz', _source: { type: 'BAM' }
28
-
29
- assert_equal 'baz', result.type
30
- assert_equal 'BAM', result._source.type
31
- end
32
-
33
- should "delegate method calls to `_source` when available" do
34
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: 'baz' }
35
-
36
- assert_respond_to result, :foo
37
- assert_respond_to result, :_source
38
- assert_respond_to result, :bar
39
-
40
- assert_equal 'bar', result.foo
41
- assert_equal 'baz', result._source.bar
42
- assert_equal 'baz', result.bar
43
- end
44
-
45
- should "delegate existence method calls to `_source`" do
46
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: { bam: 'baz' } }
47
-
48
- assert_respond_to result._source, :bar?
49
- assert_respond_to result, :bar?
50
-
51
- assert_equal true, result._source.bar?
52
- assert_equal true, result.bar?
53
- assert_equal false, result.boo?
54
-
55
- assert_equal true, result.bar.bam?
56
- assert_equal false, result.bar.boo?
57
- end
58
-
59
- should "delegate methods to @result" do
60
- result = Elasticsearch::Model::Response::Result.new foo: 'bar'
61
-
62
- assert_equal 'bar', result.foo
63
- assert_equal 'bar', result.fetch('foo')
64
- assert_equal 'moo', result.fetch('NOT_EXIST', 'moo')
65
- assert_equal ['foo'], result.keys
66
-
67
- assert_respond_to result, :to_hash
68
- assert_equal({'foo' => 'bar'}, result.to_hash)
69
-
70
- assert_raise(NoMethodError) { result.does_not_exist }
71
- end
72
-
73
- should "delegate existence method calls to @result" do
74
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: 'bam' }
75
- assert_respond_to result, :foo?
76
-
77
- assert_equal true, result.foo?
78
- assert_equal false, result.boo?
79
- assert_equal false, result._source.foo?
80
- assert_equal false, result._source.boo?
81
- end
82
-
83
- should "delegate as_json to @result even when ActiveSupport changed half of Ruby" do
84
- result = Elasticsearch::Model::Response::Result.new foo: 'bar'
85
-
86
- result.instance_variable_get(:@result).expects(:as_json)
87
- result.as_json(except: 'foo')
88
- end
89
- end
90
- end
@@ -1,31 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Elasticsearch::Model::ResultsTest < Test::Unit::TestCase
4
- context "Response results" do
5
- class OriginClass
6
- def self.index_name; 'foo'; end
7
- def self.document_type; 'bar'; end
8
- end
9
-
10
- RESPONSE = { 'hits' => { 'total' => 123, 'max_score' => 456, 'hits' => [{'foo' => 'bar'}] } }
11
-
12
- setup do
13
- @search = Elasticsearch::Model::Searching::SearchRequest.new OriginClass, '*'
14
- @response = Elasticsearch::Model::Response::Response.new OriginClass, @search
15
- @results = Elasticsearch::Model::Response::Results.new OriginClass, @response
16
- @search.stubs(:execute!).returns(RESPONSE)
17
- end
18
-
19
- should "access the results" do
20
- assert_respond_to @results, :results
21
- assert_equal 1, @results.results.size
22
- assert_equal 'bar', @results.results.first.foo
23
- end
24
-
25
- should "delegate Enumerable methods to results" do
26
- assert ! @results.empty?
27
- assert_equal 'bar', @results.first.foo
28
- end
29
-
30
- end
31
- end