elasticsearch-model 6.0.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,255 +0,0 @@
1
- require 'test_helper'
2
- require 'active_record'
3
-
4
- puts "ActiveRecord #{ActiveRecord::VERSION::STRING}", '-'*80
5
-
6
- # Needed for ActiveRecord 3.x ?
7
- ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => ":memory:" ) unless ActiveRecord::Base.connected?
8
-
9
- ::ActiveRecord::Base.raise_in_transactional_callbacks = true if ::ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks) && ::ActiveRecord::VERSION::MAJOR.to_s < '5'
10
-
11
- module Elasticsearch
12
- module Model
13
- class ActiveRecordBasicIntegrationTest < Elasticsearch::Test::IntegrationTestCase
14
-
15
- class ::Article < ActiveRecord::Base
16
- include Elasticsearch::Model
17
- include Elasticsearch::Model::Callbacks
18
-
19
- document_type 'article'
20
-
21
- settings index: { number_of_shards: 1, number_of_replicas: 0 } do
22
- mapping do
23
- indexes :title, type: 'text', analyzer: 'snowball'
24
- indexes :body, type: 'text'
25
- indexes :clicks, type: 'integer'
26
- indexes :created_at, type: 'date'
27
- end
28
- end
29
-
30
- def as_indexed_json(options = {})
31
- attributes
32
- .symbolize_keys
33
- .slice(:title, :body, :clicks, :created_at)
34
- .merge(suggest_title: title)
35
- end
36
- end
37
-
38
- context "ActiveRecord basic integration" do
39
- setup do
40
- ActiveRecord::Schema.define(:version => 1) do
41
- create_table :articles do |t|
42
- t.string :title
43
- t.string :body
44
- t.integer :clicks, :default => 0
45
- t.datetime :created_at, :default => 'NOW()'
46
- end
47
- end
48
-
49
- Article.delete_all
50
- Article.__elasticsearch__.create_index! force: true
51
-
52
- ::Article.create! title: 'Test', body: '', clicks: 1
53
- ::Article.create! title: 'Testing Coding', body: '', clicks: 2
54
- ::Article.create! title: 'Coding', body: '', clicks: 3
55
-
56
- Article.__elasticsearch__.refresh_index!
57
- end
58
-
59
- should "index and find a document" do
60
- response = Article.search('title:test')
61
-
62
- assert response.any?, "Response should not be empty: #{response.to_a.inspect}"
63
-
64
- assert_equal 2, response.results.size
65
- assert_equal 2, response.records.size
66
-
67
- assert_instance_of Elasticsearch::Model::Response::Result, response.results.first
68
- assert_instance_of Article, response.records.first
69
-
70
- assert_equal 'Test', response.results.first.title
71
- assert_equal 'Test', response.records.first.title
72
- end
73
-
74
- should "provide access to result" do
75
- response = Article.search query: { match: { title: 'test' } }, highlight: { fields: { title: {} } }
76
-
77
- assert_equal 'Test', response.results.first.title
78
-
79
- assert_equal true, response.results.first.title?
80
- assert_equal false, response.results.first.boo?
81
-
82
- assert_equal true, response.results.first.highlight?
83
- assert_equal true, response.results.first.highlight.title?
84
- assert_equal false, response.results.first.highlight.boo?
85
- end
86
-
87
- should "iterate over results" do
88
- response = Article.search('title:test')
89
-
90
- assert_equal ['1', '2'], response.results.map(&:_id)
91
- assert_equal [1, 2], response.records.map(&:id)
92
- end
93
-
94
- should "return _id and _type as #id and #type" do
95
- response = Article.search('title:test')
96
-
97
- assert_equal '1', response.results.first.id
98
- assert_equal 'article', response.results.first.type
99
- end
100
-
101
- should "access results from records" do
102
- response = Article.search('title:test')
103
-
104
- response.records.each_with_hit do |r, h|
105
- assert_not_nil h._score
106
- assert_not_nil h._source.title
107
- end
108
- end
109
-
110
- should "preserve the search results order for records" do
111
- response = Article.search query: { match: { title: 'code' }}, sort: { clicks: :desc }
112
-
113
- assert_equal response.records[0].clicks, 3
114
- assert_equal response.records[1].clicks, 2
115
-
116
- response.records.each_with_hit do |r, h|
117
- assert_equal h._id, r.id.to_s
118
- end
119
-
120
- response.records.map_with_hit do |r, h|
121
- assert_equal h._id, r.id.to_s
122
- end
123
- end
124
-
125
- should "remove document from index on destroy" do
126
- article = Article.first
127
-
128
- article.destroy
129
- assert_equal 2, Article.count
130
-
131
- Article.__elasticsearch__.refresh_index!
132
-
133
- response = Article.search 'title:test'
134
-
135
- assert_equal 1, response.results.size
136
- assert_equal 1, response.records.size
137
- end
138
-
139
- should "index updates to the document" do
140
- article = Article.first
141
-
142
- article.title = 'Writing'
143
- article.save
144
-
145
- Article.__elasticsearch__.refresh_index!
146
-
147
- response = Article.search 'title:write'
148
-
149
- assert_equal 1, response.results.size
150
- assert_equal 1, response.records.size
151
- end
152
-
153
- should "update specific attributes" do
154
- article = Article.first
155
-
156
- response = Article.search 'title:special'
157
-
158
- assert_equal 0, response.results.size
159
- assert_equal 0, response.records.size
160
-
161
- article.__elasticsearch__.update_document_attributes title: 'special'
162
-
163
- Article.__elasticsearch__.refresh_index!
164
-
165
- response = Article.search 'title:special'
166
-
167
- assert_equal 1, response.results.size
168
- assert_equal 1, response.records.size
169
- end
170
-
171
- should "update document when save is called multiple times in a transaction" do
172
- article = Article.first
173
- response = Article.search 'body:dummy'
174
-
175
- assert_equal 0, response.results.size
176
- assert_equal 0, response.records.size
177
-
178
- ActiveRecord::Base.transaction do
179
- article.body = 'dummy'
180
- article.save
181
-
182
- article.title = 'special'
183
- article.save
184
- end
185
-
186
- article.__elasticsearch__.update_document
187
- Article.__elasticsearch__.refresh_index!
188
-
189
- response = Article.search 'body:dummy'
190
- assert_equal 1, response.results.size
191
- assert_equal 1, response.records.size
192
- end
193
-
194
- should "return results for a DSL search" do
195
- response = Article.search query: { match: { title: { query: 'test' } } }
196
-
197
- assert_equal 2, response.results.size
198
- assert_equal 2, response.records.size
199
- end
200
-
201
- should "return a paged collection" do
202
- response = Article.search query: { match: { title: { query: 'test' } } },
203
- size: 2,
204
- from: 1
205
-
206
- assert_equal 1, response.results.size
207
- assert_equal 1, response.records.size
208
-
209
- assert_equal 'Testing Coding', response.results.first.title
210
- assert_equal 'Testing Coding', response.records.first.title
211
- end
212
-
213
- should "allow chaining SQL commands on response.records" do
214
- response = Article.search query: { match: { title: { query: 'test' } } }
215
-
216
- assert_equal 2, response.records.size
217
- assert_equal 1, response.records.where(title: 'Test').size
218
- assert_equal 'Test', response.records.where(title: 'Test').first.title
219
- end
220
-
221
- should "allow ordering response.records in SQL" do
222
- response = Article.search query: { match: { title: { query: 'test' } } }
223
-
224
- if defined?(::ActiveRecord) && ::ActiveRecord::VERSION::MAJOR >= 4
225
- assert_equal 'Testing Coding', response.records.order(title: :desc).first.title
226
- assert_equal 'Testing Coding', response.records.order(title: :desc)[0].title
227
- else
228
- assert_equal 'Testing Coding', response.records.order('title DESC').first.title
229
- assert_equal 'Testing Coding', response.records.order('title DESC')[0].title
230
- end
231
- end
232
-
233
- should "allow dot access to response" do
234
- response = Article.search query: { match: { title: { query: 'test' } } },
235
- aggregations: {
236
- dates: { date_histogram: { field: 'created_at', interval: 'hour' } },
237
- clicks: { global: {}, aggregations: { min: { min: { field: 'clicks' } } } }
238
- },
239
- suggest: { text: 'tezt', title: { term: { field: 'title', suggest_mode: 'always' } } }
240
-
241
- response.response.respond_to?(:aggregations)
242
- assert_equal 2, response.aggregations.dates.buckets.first.doc_count
243
- assert_equal 3, response.aggregations.clicks.doc_count
244
- assert_equal 1.0, response.aggregations.clicks.min.value
245
- assert_nil response.aggregations.clicks.max
246
-
247
- response.response.respond_to?(:suggest)
248
- assert_equal 1, response.suggestions.title.first.options.size
249
- assert_equal ['test'], response.suggestions.terms
250
- end
251
- end
252
-
253
- end
254
- end
255
- end
@@ -1,67 +0,0 @@
1
- require 'test_helper'
2
- require 'active_record'
3
-
4
- # Needed for ActiveRecord 3.x ?
5
- ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => ":memory:" ) unless ActiveRecord::Base.connected?
6
-
7
- ::ActiveRecord::Base.raise_in_transactional_callbacks = true if ::ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks) && ::ActiveRecord::VERSION::MAJOR.to_s < '5'
8
-
9
- module Elasticsearch
10
- module Model
11
- class ActiveRecordCustomSerializationTest < Elasticsearch::Test::IntegrationTestCase
12
- context "ActiveRecord model with custom JSON serialization" do
13
- setup do
14
- class ::ArticleWithCustomSerialization < ActiveRecord::Base
15
- include Elasticsearch::Model
16
- include Elasticsearch::Model::Callbacks
17
-
18
- mapping do
19
- indexes :title
20
- end
21
-
22
- def as_indexed_json(options={})
23
- # as_json(options.merge root: false).slice('title')
24
- { title: self.title }
25
- end
26
- end
27
-
28
- ActiveRecord::Schema.define(:version => 1) do
29
- create_table ArticleWithCustomSerialization.table_name do |t|
30
- t.string :title
31
- t.string :status
32
- end
33
- end
34
-
35
- ArticleWithCustomSerialization.delete_all
36
- ArticleWithCustomSerialization.__elasticsearch__.create_index! force: true
37
- end
38
-
39
- should "index only the title attribute when creating" do
40
- ArticleWithCustomSerialization.create! title: 'Test', status: 'green'
41
-
42
- a = ArticleWithCustomSerialization.__elasticsearch__.client.get \
43
- index: 'article_with_custom_serializations',
44
- type: '_doc',
45
- id: '1'
46
-
47
- assert_equal( { 'title' => 'Test' }, a['_source'] )
48
- end
49
-
50
- should "index only the title attribute when updating" do
51
- ArticleWithCustomSerialization.create! title: 'Test', status: 'green'
52
-
53
- article = ArticleWithCustomSerialization.first
54
- article.update_attributes title: 'UPDATED', status: 'red'
55
-
56
- a = ArticleWithCustomSerialization.__elasticsearch__.client.get \
57
- index: 'article_with_custom_serializations',
58
- type: '_doc',
59
- id: '1'
60
-
61
- assert_equal( { 'title' => 'UPDATED' }, a['_source'] )
62
- end
63
- end
64
-
65
- end
66
- end
67
- end
@@ -1,168 +0,0 @@
1
- require 'test_helper'
2
- require 'active_record'
3
-
4
- # Needed for ActiveRecord 3.x ?
5
- ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => ":memory:" ) unless ActiveRecord::Base.connected?
6
-
7
- ::ActiveRecord::Base.raise_in_transactional_callbacks = true if ::ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks) && ::ActiveRecord::VERSION::MAJOR.to_s < '5'
8
-
9
- module Elasticsearch
10
- module Model
11
- class ActiveRecordImportIntegrationTest < Elasticsearch::Test::IntegrationTestCase
12
-
13
- context "ActiveRecord importing" do
14
- setup do
15
- Object.send(:remove_const, :ImportArticle) if defined?(ImportArticle)
16
- class ::ImportArticle < ActiveRecord::Base
17
- include Elasticsearch::Model
18
-
19
- scope :popular, -> { where('views >= 50') }
20
-
21
- mapping do
22
- indexes :title, type: 'text'
23
- indexes :views, type: 'integer'
24
- indexes :numeric, type: 'integer'
25
- indexes :created_at, type: 'date'
26
- end
27
- end
28
-
29
- ActiveRecord::Schema.define(:version => 1) do
30
- create_table :import_articles do |t|
31
- t.string :title
32
- t.integer :views
33
- t.string :numeric # For the sake of invalid data sent to Elasticsearch
34
- t.datetime :created_at, :default => 'NOW()'
35
- end
36
- end
37
-
38
- ImportArticle.delete_all
39
- ImportArticle.__elasticsearch__.create_index! force: true
40
- ImportArticle.__elasticsearch__.client.cluster.health wait_for_status: 'yellow'
41
-
42
- 100.times { |i| ImportArticle.create! title: "Test #{i}", views: i }
43
- end
44
-
45
- should "import all the documents" do
46
- assert_equal 100, ImportArticle.count
47
-
48
- ImportArticle.__elasticsearch__.refresh_index!
49
- assert_equal 0, ImportArticle.search('*').results.total
50
-
51
- batches = 0
52
- errors = ImportArticle.import(batch_size: 10) do |response|
53
- batches += 1
54
- end
55
-
56
- assert_equal 0, errors
57
- assert_equal 10, batches
58
-
59
- ImportArticle.__elasticsearch__.refresh_index!
60
- assert_equal 100, ImportArticle.search('*').results.total
61
- end
62
-
63
- should "import only documents from a specific scope" do
64
- assert_equal 100, ImportArticle.count
65
-
66
- assert_equal 0, ImportArticle.import(scope: 'popular')
67
-
68
- ImportArticle.__elasticsearch__.refresh_index!
69
- assert_equal 50, ImportArticle.search('*').results.total
70
- end
71
-
72
- should "import only documents from a specific query" do
73
- assert_equal 100, ImportArticle.count
74
-
75
- assert_equal 0, ImportArticle.import(query: -> { where('views >= 30') })
76
-
77
- ImportArticle.__elasticsearch__.refresh_index!
78
- assert_equal 70, ImportArticle.search('*').results.total
79
- end
80
-
81
- should "report and not store/index invalid documents" do
82
- ImportArticle.create! title: "Test INVALID", numeric: "INVALID"
83
-
84
- assert_equal 101, ImportArticle.count
85
-
86
- ImportArticle.__elasticsearch__.refresh_index!
87
- assert_equal 0, ImportArticle.search('*').results.total
88
-
89
- batches = 0
90
- errors = ImportArticle.__elasticsearch__.import(batch_size: 10) do |response|
91
- batches += 1
92
- end
93
-
94
- assert_equal 1, errors
95
- assert_equal 11, batches
96
-
97
- ImportArticle.__elasticsearch__.refresh_index!
98
- assert_equal 100, ImportArticle.search('*').results.total
99
- end
100
-
101
- should "transform documents with the option" do
102
- assert_equal 100, ImportArticle.count
103
-
104
- assert_equal 0, ImportArticle.import( transform: ->(a) {{ index: { data: { name: a.title, foo: 'BAR' } }}} )
105
-
106
- ImportArticle.__elasticsearch__.refresh_index!
107
- assert_contains ImportArticle.search('*').results.first._source.keys, 'name'
108
- assert_contains ImportArticle.search('*').results.first._source.keys, 'foo'
109
- assert_equal 100, ImportArticle.search('test').results.total
110
- assert_equal 100, ImportArticle.search('bar').results.total
111
- end
112
- end
113
-
114
- context "ActiveRecord importing when the model has a default scope" do
115
-
116
- setup do
117
- Object.send(:remove_const, :ImportArticle) if defined?(ImportArticle)
118
- class ::ImportArticle < ActiveRecord::Base
119
- include Elasticsearch::Model
120
-
121
- default_scope { where('views >= 8') }
122
-
123
- mapping do
124
- indexes :title, type: 'text'
125
- indexes :views, type: 'integer'
126
- indexes :numeric, type: 'integer'
127
- indexes :created_at, type: 'date'
128
- end
129
- end
130
-
131
- ActiveRecord::Schema.define(:version => 1) do
132
- create_table :import_articles do |t|
133
- t.string :title
134
- t.integer :views
135
- t.string :numeric # For the sake of invalid data sent to Elasticsearch
136
- t.datetime :created_at, :default => 'NOW()'
137
- end
138
- end
139
-
140
- ImportArticle.delete_all
141
- ImportArticle.__elasticsearch__.delete_index! force: true
142
- ImportArticle.__elasticsearch__.create_index! force: true
143
- ImportArticle.__elasticsearch__.client.cluster.health wait_for_status: 'yellow'
144
-
145
- 10.times { |i| ImportArticle.create! title: "Test #{i}", views: i }
146
- end
147
-
148
- should "import only documents from the default scope" do
149
- assert_equal 2, ImportArticle.count
150
-
151
- assert_equal 0, ImportArticle.import
152
-
153
- ImportArticle.__elasticsearch__.refresh_index!
154
- assert_equal 2, ImportArticle.search('*').results.total
155
- end
156
-
157
- should "import only documents from a specific query combined with the default scope" do
158
- assert_equal 2, ImportArticle.count
159
-
160
- assert_equal 0, ImportArticle.import(query: -> { where("title = 'Test 9'") })
161
-
162
- ImportArticle.__elasticsearch__.refresh_index!
163
- assert_equal 1, ImportArticle.search('*').results.total
164
- end
165
- end
166
- end
167
- end
168
- end