elasticsearch-model 0.1.9 → 7.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -2
  3. data/Gemfile +22 -0
  4. data/LICENSE.txt +199 -10
  5. data/README.md +96 -43
  6. data/Rakefile +49 -35
  7. data/elasticsearch-model.gemspec +53 -41
  8. data/examples/activerecord_article.rb +18 -1
  9. data/examples/activerecord_associations.rb +86 -17
  10. data/examples/activerecord_custom_analyzer.rb +152 -0
  11. data/examples/activerecord_mapping_completion.rb +33 -16
  12. data/examples/activerecord_mapping_edge_ngram.rb +118 -0
  13. data/examples/couchbase_article.rb +17 -0
  14. data/examples/datamapper_article.rb +28 -1
  15. data/examples/mongoid_article.rb +17 -0
  16. data/examples/ohm_article.rb +17 -0
  17. data/examples/riak_article.rb +17 -0
  18. data/gemfiles/3.0.gemfile +23 -1
  19. data/gemfiles/4.0.gemfile +25 -1
  20. data/gemfiles/5.0.gemfile +35 -0
  21. data/gemfiles/6.0.gemfile +36 -0
  22. data/lib/elasticsearch/model/adapter.rb +17 -0
  23. data/lib/elasticsearch/model/adapters/active_record.rb +31 -27
  24. data/lib/elasticsearch/model/adapters/default.rb +17 -0
  25. data/lib/elasticsearch/model/adapters/mongoid.rb +27 -3
  26. data/lib/elasticsearch/model/adapters/multiple.rb +29 -4
  27. data/lib/elasticsearch/model/callbacks.rb +17 -0
  28. data/lib/elasticsearch/model/client.rb +17 -0
  29. data/lib/elasticsearch/model/ext/active_record.rb +17 -0
  30. data/lib/elasticsearch/model/hash_wrapper.rb +32 -0
  31. data/lib/elasticsearch/model/importing.rb +61 -17
  32. data/lib/elasticsearch/model/indexing.rb +87 -49
  33. data/lib/elasticsearch/model/multimodel.rb +17 -0
  34. data/lib/elasticsearch/model/naming.rb +33 -2
  35. data/lib/elasticsearch/model/proxy.rb +61 -18
  36. data/lib/elasticsearch/model/response/aggregations.rb +55 -0
  37. data/lib/elasticsearch/model/response/base.rb +25 -3
  38. data/lib/elasticsearch/model/response/pagination/kaminari.rb +126 -0
  39. data/lib/elasticsearch/model/response/pagination/will_paginate.rb +112 -0
  40. data/lib/elasticsearch/model/response/pagination.rb +19 -192
  41. data/lib/elasticsearch/model/response/records.rb +17 -1
  42. data/lib/elasticsearch/model/response/result.rb +19 -2
  43. data/lib/elasticsearch/model/response/results.rb +17 -0
  44. data/lib/elasticsearch/model/response/suggestions.rb +20 -1
  45. data/lib/elasticsearch/model/response.rb +28 -10
  46. data/lib/elasticsearch/model/searching.rb +17 -0
  47. data/lib/elasticsearch/model/serializing.rb +17 -0
  48. data/lib/elasticsearch/model/version.rb +18 -1
  49. data/lib/elasticsearch/model.rb +36 -39
  50. data/spec/elasticsearch/model/adapter_spec.rb +136 -0
  51. data/spec/elasticsearch/model/adapters/active_record/associations_spec.rb +351 -0
  52. data/spec/elasticsearch/model/adapters/active_record/basic_spec.rb +395 -0
  53. data/spec/elasticsearch/model/adapters/active_record/dynamic_index_name_spec.rb +35 -0
  54. data/spec/elasticsearch/model/adapters/active_record/import_spec.rb +193 -0
  55. data/spec/elasticsearch/model/adapters/active_record/multi_model_spec.rb +127 -0
  56. data/spec/elasticsearch/model/adapters/active_record/namespaced_model_spec.rb +55 -0
  57. data/spec/elasticsearch/model/adapters/active_record/pagination_spec.rb +332 -0
  58. data/spec/elasticsearch/model/adapters/active_record/parent_child_spec.rb +92 -0
  59. data/spec/elasticsearch/model/adapters/active_record/serialization_spec.rb +78 -0
  60. data/spec/elasticsearch/model/adapters/active_record_spec.rb +224 -0
  61. data/spec/elasticsearch/model/adapters/default_spec.rb +58 -0
  62. data/spec/elasticsearch/model/adapters/mongoid/basic_spec.rb +284 -0
  63. data/spec/elasticsearch/model/adapters/mongoid/multi_model_spec.rb +83 -0
  64. data/spec/elasticsearch/model/adapters/mongoid_spec.rb +252 -0
  65. data/spec/elasticsearch/model/adapters/multiple_spec.rb +142 -0
  66. data/spec/elasticsearch/model/callbacks_spec.rb +50 -0
  67. data/spec/elasticsearch/model/client_spec.rb +83 -0
  68. data/spec/elasticsearch/model/hash_wrapper_spec.rb +29 -0
  69. data/spec/elasticsearch/model/importing_spec.rb +243 -0
  70. data/spec/elasticsearch/model/indexing_spec.rb +1014 -0
  71. data/spec/elasticsearch/model/module_spec.rb +94 -0
  72. data/spec/elasticsearch/model/multimodel_spec.rb +72 -0
  73. data/spec/elasticsearch/model/naming_spec.rb +203 -0
  74. data/spec/elasticsearch/model/proxy_spec.rb +124 -0
  75. data/spec/elasticsearch/model/response/aggregations_spec.rb +83 -0
  76. data/spec/elasticsearch/model/response/base_spec.rb +107 -0
  77. data/spec/elasticsearch/model/response/pagination/kaminari_spec.rb +472 -0
  78. data/spec/elasticsearch/model/response/pagination/will_paginate_spec.rb +279 -0
  79. data/spec/elasticsearch/model/response/records_spec.rb +135 -0
  80. data/spec/elasticsearch/model/response/response_spec.rb +148 -0
  81. data/spec/elasticsearch/model/response/result_spec.rb +139 -0
  82. data/spec/elasticsearch/model/response/results_spec.rb +73 -0
  83. data/spec/elasticsearch/model/searching_search_request_spec.rb +129 -0
  84. data/spec/elasticsearch/model/searching_spec.rb +66 -0
  85. data/spec/elasticsearch/model/serializing_spec.rb +39 -0
  86. data/spec/spec_helper.rb +193 -0
  87. data/spec/support/app/answer.rb +50 -0
  88. data/spec/support/app/article.rb +39 -0
  89. data/spec/support/app/article_for_pagination.rb +29 -0
  90. data/spec/support/app/article_no_type.rb +37 -0
  91. data/spec/support/app/article_with_custom_serialization.rb +30 -0
  92. data/spec/support/app/article_with_dynamic_index_name.rb +32 -0
  93. data/spec/support/app/author.rb +26 -0
  94. data/spec/support/app/authorship.rb +21 -0
  95. data/spec/support/app/category.rb +20 -0
  96. data/spec/support/app/comment.rb +20 -0
  97. data/spec/support/app/episode.rb +28 -0
  98. data/spec/support/app/image.rb +36 -0
  99. data/spec/support/app/import_article.rb +29 -0
  100. data/spec/support/app/mongoid_article.rb +38 -0
  101. data/spec/support/app/namespaced_book.rb +27 -0
  102. data/spec/support/app/parent_and_child_searchable.rb +41 -0
  103. data/spec/support/app/post.rb +31 -0
  104. data/spec/support/app/question.rb +44 -0
  105. data/spec/support/app/searchable.rb +65 -0
  106. data/spec/support/app/series.rb +28 -0
  107. data/spec/support/app.rb +46 -0
  108. data/spec/support/model.json +1 -0
  109. data/{test → spec}/support/model.yml +0 -0
  110. metadata +175 -121
  111. data/test/integration/active_record_associations_parent_child.rb +0 -139
  112. data/test/integration/active_record_associations_test.rb +0 -326
  113. data/test/integration/active_record_basic_test.rb +0 -234
  114. data/test/integration/active_record_custom_serialization_test.rb +0 -62
  115. data/test/integration/active_record_import_test.rb +0 -109
  116. data/test/integration/active_record_namespaced_model_test.rb +0 -49
  117. data/test/integration/active_record_pagination_test.rb +0 -145
  118. data/test/integration/dynamic_index_name_test.rb +0 -47
  119. data/test/integration/mongoid_basic_test.rb +0 -177
  120. data/test/integration/multiple_models_test.rb +0 -172
  121. data/test/support/model.json +0 -1
  122. data/test/test_helper.rb +0 -93
  123. data/test/unit/adapter_active_record_test.rb +0 -157
  124. data/test/unit/adapter_default_test.rb +0 -41
  125. data/test/unit/adapter_mongoid_test.rb +0 -104
  126. data/test/unit/adapter_multiple_test.rb +0 -106
  127. data/test/unit/adapter_test.rb +0 -69
  128. data/test/unit/callbacks_test.rb +0 -31
  129. data/test/unit/client_test.rb +0 -27
  130. data/test/unit/importing_test.rb +0 -203
  131. data/test/unit/indexing_test.rb +0 -650
  132. data/test/unit/module_test.rb +0 -57
  133. data/test/unit/multimodel_test.rb +0 -38
  134. data/test/unit/naming_test.rb +0 -103
  135. data/test/unit/proxy_test.rb +0 -100
  136. data/test/unit/response_base_test.rb +0 -40
  137. data/test/unit/response_pagination_kaminari_test.rb +0 -433
  138. data/test/unit/response_pagination_will_paginate_test.rb +0 -398
  139. data/test/unit/response_records_test.rb +0 -91
  140. data/test/unit/response_result_test.rb +0 -90
  141. data/test/unit/response_results_test.rb +0 -31
  142. data/test/unit/response_test.rb +0 -104
  143. data/test/unit/searching_search_request_test.rb +0 -78
  144. data/test/unit/searching_test.rb +0 -41
  145. data/test/unit/serializing_test.rb +0 -17
@@ -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
-
3
- class Elasticsearch::Model::ResultTest < Test::Unit::TestCase
4
- context "Response result" do
5
-
6
- should "have method access to properties" do
7
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', bar: { bam: 'baz' }
8
-
9
- assert_respond_to result, :foo
10
- assert_respond_to result, :bar
11
-
12
- assert_equal 'bar', result.foo
13
- assert_equal 'baz', result.bar.bam
14
-
15
- assert_raise(NoMethodError) { result.xoxo }
16
- end
17
-
18
- should "return _id as #id" do
19
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _id: 42, _source: { id: 12 }
20
-
21
- assert_equal 42, result.id
22
- assert_equal 12, result._source.id
23
- end
24
-
25
- should "return _type as #type" do
26
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _type: 'baz', _source: { type: 'BAM' }
27
-
28
- assert_equal 'baz', result.type
29
- assert_equal 'BAM', result._source.type
30
- end
31
-
32
- should "delegate method calls to `_source` when available" do
33
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: 'baz' }
34
-
35
- assert_respond_to result, :foo
36
- assert_respond_to result, :_source
37
- assert_respond_to result, :bar
38
-
39
- assert_equal 'bar', result.foo
40
- assert_equal 'baz', result._source.bar
41
- assert_equal 'baz', result.bar
42
- end
43
-
44
- should "delegate existence method calls to `_source`" do
45
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: { bam: 'baz' } }
46
-
47
- assert_respond_to result._source, :bar?
48
- assert_respond_to result, :bar?
49
-
50
- assert_equal true, result._source.bar?
51
- assert_equal true, result.bar?
52
- assert_equal false, result.boo?
53
-
54
- assert_equal true, result.bar.bam?
55
- assert_equal false, result.bar.boo?
56
- end
57
-
58
- should "delegate methods to @result" do
59
- result = Elasticsearch::Model::Response::Result.new foo: 'bar'
60
-
61
- assert_equal 'bar', result.foo
62
- assert_equal 'bar', result.fetch('foo')
63
- assert_equal 'moo', result.fetch('NOT_EXIST', 'moo')
64
- assert_equal ['foo'], result.keys
65
-
66
- assert_respond_to result, :to_hash
67
- assert_equal({'foo' => 'bar'}, result.to_hash)
68
-
69
- assert_raise(NoMethodError) { result.does_not_exist }
70
- end
71
-
72
- should "delegate existence method calls to @result" do
73
- result = Elasticsearch::Model::Response::Result.new foo: 'bar', _source: { bar: 'bam' }
74
- assert_respond_to result, :foo?
75
-
76
- assert_equal true, result.foo?
77
- assert_equal false, result.boo?
78
- assert_equal false, result._source.foo?
79
- assert_equal false, result._source.boo?
80
- end
81
-
82
- should "delegate as_json to @result even when ActiveSupport changed half of Ruby" do
83
- require 'active_support/json/encoding'
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