search_flip 2.0.0.beta7 → 2.0.0.beta8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf6b3a5f6bfc602628bc76ea55253357e36fde027c3b203c4755c7521694241d
4
- data.tar.gz: de3a3de47e38a52bf780cc0d51f3dbf22287f57864ac99888832145b22d556ba
3
+ metadata.gz: 8f9a9b030a56e1b3688964be50aed6c66cbe367239a7377c37ebc2045180d4ed
4
+ data.tar.gz: d1a90f539bf2b63d708bcc415b1fb5fae95d967fd539a73f716e10ef04c86754
5
5
  SHA512:
6
- metadata.gz: 7ec3e29db16f930294bd138196c12dbb52be7ceb5ab6198964a7910ad88dd791d4c6ff689758587c29e113d20b05fa5a75d717b0524e482052ee1cca629d466a
7
- data.tar.gz: f0cd3bf68475fbd49d2e977e503029022104425f909bf21299319cd70e78a8cceddef102523d9b3c563954f9294eb0da704c8bc5ed7b9946b8e7abf370f3b5a2
6
+ metadata.gz: '08a14b0c86bcf6744c4dfba020959c6c2fe9002a20ae8c2866cbc745cbe7ea002369c954a3441caaaf07d31bdcc4e68e8ab0ad6a52c236d5bb5f994db6643c5e'
7
+ data.tar.gz: bd9f9aa18dc818bd1da8a2ce9d70e38abc6919bf359508b4d0344195cff9546964bfcfa30345fd8b7ff28c86746b352e21c78530f2e3e0522d108e1bc5338574
data/.rubocop.yml CHANGED
@@ -115,3 +115,5 @@ Style/IfUnlessModifier:
115
115
  Style/RedundantBegin:
116
116
  Enabled: false
117
117
 
118
+ Style/OptionalArguments:
119
+ Enabled: false
data/.travis.yml CHANGED
@@ -5,7 +5,8 @@ env:
5
5
  - ES_IMAGE=elasticsearch:1
6
6
  - ES_IMAGE=plainpicture/elasticsearch:2.4.1_delete-by-query
7
7
  - ES_IMAGE=elasticsearch:5.4
8
- - ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:6.5.0
8
+ - ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:6.7.0
9
+ - ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:7.0.0
9
10
  rvm:
10
11
  - ruby-head
11
12
  before_install:
data/CHANGELOG.md CHANGED
@@ -9,10 +9,20 @@
9
9
  * [BREAKING] Changed `SearchFlip.aliases` to `SearchFlip::Connection#update_aliases`
10
10
  * [BREAKING] Changed `SearchFlip.msearch` to `SearchFlip::Connection#msearch`
11
11
  * [BREAKING] Removed `base_url` param from `SearchFlip::Critiera#execute`
12
+ * [BREAKING] `SearchFlip::Index.index_name` no longer defaults to `SearchFlip::Index.type_name`
13
+ * [BREAKING] No longer include the type name in `SearchFlip::Index.mapping`
12
14
  * Added `SearchFlip::Connection#get_aliases`
13
15
  * Added `SearchFlip::Connection#get_indices`
14
16
  * Added `SearchFlip::Connection#alias_exists?`
15
17
  * Added `SearchFlip::Index#with_settings` and `SearchFlip::Criteria#with_settings`
18
+ * Added `SearchFlip::Aggregation#merge`
19
+ * Added `bulk_max_mb` config and option
20
+ * Added `SearchFlip::Index.analyze`
21
+ * Added `SearchFlip::Criteria#preference`
22
+ * Added `SearchFlip::Criteria#search_type`
23
+ * Added `SearchFlip::Criteria#routing`
24
+ * Added `SearchFlip::Index.open_index` and `SearchFlip::Index.close_index`
25
+ * Added `SearchFlip::Index.mget`
16
26
 
17
27
  ## v1.1.0
18
28
 
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  Using SearchFlip it is dead-simple to create index classes that correspond to
10
10
  [ElasticSearch](https://www.elastic.co/) indices and to manipulate, query and
11
11
  aggregate these indices using a chainable, concise, yet powerful DSL. Finally,
12
- SearchFlip supports ElasticSearch 1.x, 2.x, 5.x, 6.x. Check section
12
+ SearchFlip supports ElasticSearch 1.x, 2.x, 5.x, 6.x, 7.x. Check section
13
13
  [Feature Support](#feature-support) for version dependent features.
14
14
 
15
15
  ```ruby
@@ -51,6 +51,9 @@ CommentIndex.where(available: true).search("hello world").sort(id: "desc").aggre
51
51
 
52
52
  ```
53
53
 
54
+ Finally, SearchFlip comes with a minimal set of dependencies (http-rb, hashie
55
+ and oj only).
56
+
54
57
  ## Reference Docs
55
58
 
56
59
  SearchFlip has a great documentation.
@@ -89,10 +92,10 @@ Available config options are:
89
92
 
90
93
  * `index_prefix` to have a prefix added to your index names automatically. This
91
94
  can be useful to separate the indices of e.g. testing and development environments.
92
- * `base_url` to tell search_flip how to connect to your cluster
95
+ * `base_url` to tell SearchFlip how to connect to your cluster
93
96
  * `bulk_limit` a global limit for bulk requests
94
97
  * `bulk_max_mb` a global limit for the payload of bulk requests
95
- * `auto_refresh` tells search_flip to automatically refresh an index after
98
+ * `auto_refresh` tells SearchFlip to automatically refresh an index after
96
99
  import, index, delete, etc operations. This is e.g. usuful for testing, etc.
97
100
  Defaults to false.
98
101
 
@@ -106,14 +109,14 @@ class CommentIndex
106
109
  end
107
110
  ```
108
111
 
109
- Then tell the Index about the type name, the correspoding model and how to
112
+ Then tell the Index about the index name, the correspoding model and how to
110
113
  serialize the model for indexing.
111
114
 
112
115
  ```ruby
113
116
  class CommentIndex
114
117
  include SearchFlip::Index
115
118
 
116
- def self.type_name
119
+ def self.index_name
117
120
  "comments"
118
121
  end
119
122
 
@@ -132,42 +135,37 @@ class CommentIndex
132
135
  end
133
136
  ```
134
137
 
135
- You can additionally specify an `index_scope` which will automatically be
136
- applied to scopes, eg. ActiveRecord::Relation objects, passed to `#import`,
137
- `#index`, etc. This can be used to preload associations that are used when
138
- serializing records or to restrict the records you want to index.
138
+ Optionally, you can specify a custom `type_name`, but note that starting with
139
+ Elasticsearch 7, types are deprecated.
139
140
 
140
141
  ```ruby
141
142
  class CommentIndex
142
143
  # ...
143
144
 
144
- def self.index_scope(scope)
145
- scope.preload(:user)
145
+ def self.type_name
146
+ "comment"
146
147
  end
147
148
  end
148
-
149
- CommentIndex.import(Comment.all) # => CommentIndex.import(Comment.all.preload(:user))
150
149
  ```
151
150
 
152
- Please note, ElasticSearch allows to have multiple types per index. However,
153
- this forces to have the same mapping for fields having the same name even
154
- though the fields live in different types of the same index. Thus, this gem is
155
- using a different index for each type by default, but you can change that.
156
- Simply supply a custom `index_name`.
151
+ You can additionally specify an `index_scope` which will automatically be
152
+ applied to scopes, eg. ActiveRecord::Relation objects, passed to `#import`,
153
+ `#index`, etc. This can be used to preload associations that are used when
154
+ serializing records or to restrict the records you want to index.
157
155
 
158
156
  ```ruby
159
157
  class CommentIndex
160
158
  # ...
161
159
 
162
- def self.index_name
163
- "custom_index_name"
160
+ def self.index_scope(scope)
161
+ scope.preload(:user)
164
162
  end
165
-
166
- # ...
167
163
  end
164
+
165
+ CommentIndex.import(Comment.all) # => CommentIndex.import(Comment.all.preload(:user))
168
166
  ```
169
167
 
170
- Optionally, specify a custom mapping:
168
+ To specify a custom mapping:
171
169
 
172
170
  ```ruby
173
171
  class CommentIndex
@@ -175,10 +173,8 @@ class CommentIndex
175
173
 
176
174
  def self.mapping
177
175
  {
178
- comments: {
179
- properties: {
180
- # ...
181
- }
176
+ properties: {
177
+ # ...
182
178
  }
183
179
  }
184
180
  end
@@ -187,7 +183,11 @@ class CommentIndex
187
183
  end
188
184
  ```
189
185
 
190
- or index settings:
186
+ Please note that you need to specify the mapping without a type name, even for
187
+ Elasticsearch versions before 7, as SearchFlip will add the type name
188
+ automatically if neccessary.
189
+
190
+ To specify index settings:
191
191
 
192
192
  ```ruby
193
193
  def self.index_settings
@@ -250,8 +250,8 @@ CommentIndex.match_all.delete
250
250
 
251
251
  # or delete manually via the bulk API:
252
252
 
253
- CommentIndex.match_all.find_each do |record|
254
- CommentIndex.bulk do |indexer|
253
+ CommentIndex.bulk do |indexer|
254
+ CommentIndex.match_all.find_each do |record|
255
255
  indexer.delete record.id
256
256
  end
257
257
  end
data/UPDATING.md CHANGED
@@ -3,6 +3,46 @@
3
3
 
4
4
  ## Update 1.x to 2.x
5
5
 
6
+ * **[BREAKING]** No longer include the mapping in `SearchFlip::Index.mapping`
7
+
8
+ 1.x:
9
+
10
+ ```ruby
11
+ class MyIndex
12
+ include SearchFlip::Index
13
+
14
+ # ...
15
+
16
+ def self.mapping
17
+ {
18
+ type_name: {
19
+ properties: {
20
+ # ...
21
+ }
22
+ }
23
+ }
24
+ end
25
+ end
26
+ ```
27
+
28
+ 2.x:
29
+
30
+ ```ruby
31
+ class MyIndex
32
+ include SearchFlip::Index
33
+
34
+ # ...
35
+
36
+ def self.mapping
37
+ {
38
+ properties: {
39
+ # ...
40
+ }
41
+ }
42
+ end
43
+ end
44
+ ```
45
+
6
46
  * **[BREAKING]** Changed `SearchFlip::Index.base_url` to `SearchFlip::Index.connection`
7
47
 
8
48
  1.x:
data/docker-compose.yml CHANGED
@@ -2,5 +2,7 @@ version: '2'
2
2
  services:
3
3
  elasticsearch:
4
4
  image: $ES_IMAGE
5
+ environment:
6
+ - discovery.type=single-node
5
7
  ports:
6
8
  - 9200:9200
@@ -171,11 +171,12 @@ module SearchFlip
171
171
  #
172
172
  # @param index_name [String] The index name
173
173
  # @param index_settings [Hash] The index settings
174
+ # @param params [Hash] Optional url params
174
175
  #
175
176
  # @return [Boolean] Returns true or raises SearchFlip::ResponseError
176
177
 
177
- def create_index(index_name, index_settings = {})
178
- http_client.put(index_url(index_name), json: index_settings)
178
+ def create_index(index_name, index_settings = {}, params = {})
179
+ http_client.put(index_url(index_name), params: params, json: index_settings)
179
180
 
180
181
  true
181
182
  end
@@ -250,13 +251,17 @@ module SearchFlip
250
251
  # SearchFlip::ResponseError in case any errors occur.
251
252
  #
252
253
  # @param index_name [String] The index name
253
- # @param type_name [String] The type name
254
254
  # @param mapping [Hash] The mapping
255
+ # @param type_name [String] The type name. Starting with Elasticsearch 7,
256
+ # the type name is optional.
255
257
  #
256
258
  # @return [Boolean] Returns true or raises SearchFlip::ResponseError
257
259
 
258
- def update_mapping(index_name, type_name, mapping)
259
- http_client.put("#{type_url(index_name, type_name)}/_mapping", json: mapping)
260
+ def update_mapping(index_name, mapping, type_name: nil)
261
+ url = type_name ? type_url(index_name, type_name) : index_url(index_name)
262
+ params = type_name && version.to_f >= 6.7 ? { include_type_name: true } : {}
263
+
264
+ http_client.put("#{url}/_mapping", params: params, json: mapping)
260
265
 
261
266
  true
262
267
  end
@@ -265,12 +270,16 @@ module SearchFlip
265
270
  # ElasticSearch. Raises SearchFlip::ResponseError in case any errors occur.
266
271
  #
267
272
  # @param index_name [String] The index name
268
- # @param type_name [String] The type name
273
+ # @param type_name [String] The type name. Starting with Elasticsearch 7,
274
+ # the type name is optional.
269
275
  #
270
276
  # @return [Hash] The current type mapping
271
277
 
272
- def get_mapping(index_name, type_name)
273
- http_client.headers(accept: "application/json").get("#{type_url(index_name, type_name)}/_mapping").parse
278
+ def get_mapping(index_name, type_name: nil)
279
+ url = type_name ? type_url(index_name, type_name) : index_url(index_name)
280
+ params = type_name && version.to_f >= 6.7 ? { include_type_name: true } : {}
281
+
282
+ http_client.headers(accept: "application/json").get("#{url}/_mapping", params: params).parse
274
283
  end
275
284
 
276
285
  # Deletes the specified index from ElasticSearch. Raises
@@ -262,11 +262,11 @@ module SearchFlip
262
262
  # @return [String] The name used for the type within the index
263
263
 
264
264
  def type_name
265
- raise SearchFlip::MethodNotImplemented, "You must implement #{name}::type_name"
265
+ "_doc"
266
266
  end
267
267
 
268
268
  # Returns the base name of the index within ElasticSearch, ie the index
269
- # name without prefix. Equals #type_name by default.
269
+ # name without prefix.
270
270
  #
271
271
  # @return [String] The base name of the index, ie without prefix
272
272
 
@@ -327,15 +327,10 @@ module SearchFlip
327
327
  # specified. Raises SearchFlip::ResponseError in case any errors
328
328
  # occur.
329
329
  #
330
- # @param include_mapping [Boolean] Whether or not to include the mapping
331
- #
332
330
  # @return [Boolean] Returns true or false
333
331
 
334
- def create_index(include_mapping: false)
335
- json = index_settings
336
- json = json.merge(mappings: mapping) if include_mapping
337
-
338
- connection.create_index(index_name_with_prefix, json)
332
+ def create_index
333
+ connection.create_index(index_name_with_prefix, index_settings)
339
334
  end
340
335
 
341
336
  # Closes the index within ElasticSearch. Raises SearchFlip::ResponseError
@@ -373,24 +368,22 @@ module SearchFlip
373
368
  connection.delete_index(index_name_with_prefix)
374
369
  end
375
370
 
376
- # Specifies a type mapping. Override to specify a custom mapping.
371
+ # Specifies a type mapping. Override to specify a custom mapping. Please
372
+ # note that you don't have to include the type name, even for
373
+ # Elasticsearch versions before 7, as SearchFlip automatically adds the
374
+ # type name if neccessary.
377
375
  #
378
376
  # @example
379
377
  # def self.mapping
380
378
  # {
381
- # comments: {
382
- # _all: {
383
- # enabled: false
384
- # },
385
- # properties: {
386
- # email: { type: "string", analyzer: "custom_analyzer" }
387
- # }
379
+ # properties: {
380
+ # email: { type: "string", analyzer: "custom_analyzer" }
388
381
  # }
389
382
  # }
390
383
  # end
391
384
 
392
385
  def mapping
393
- { type_name => {} }
386
+ {}
394
387
  end
395
388
 
396
389
  # Updates the type mapping within ElasticSearch according to the mapping
@@ -398,7 +391,11 @@ module SearchFlip
398
391
  # errors occur.
399
392
 
400
393
  def update_mapping
401
- connection.update_mapping(index_name_with_prefix, type_name, mapping)
394
+ if include_type_name?
395
+ connection.update_mapping(index_name_with_prefix, { type_name => mapping }, type_name: type_name)
396
+ else
397
+ connection.update_mapping(index_name_with_prefix, mapping)
398
+ end
402
399
  end
403
400
 
404
401
  # Retrieves the current type mapping from ElasticSearch. Raises
@@ -407,7 +404,21 @@ module SearchFlip
407
404
  # @return [Hash] The current type mapping
408
405
 
409
406
  def get_mapping
410
- connection.get_mapping(index_name_with_prefix, type_name)
407
+ if include_type_name?
408
+ connection.get_mapping(index_name_with_prefix, type_name: type_name)
409
+ else
410
+ connection.get_mapping(index_name_with_prefix)
411
+ end
412
+ end
413
+
414
+ # Returns whether or not to include a type name. As types are deprecated
415
+ # in Elasticsearch 7, this method controls whether or not to include the
416
+ # type name. By default, the method returns true for Elasticsearch
417
+ # versions before 7 or if the specified type name for the index is not
418
+ # equal to _doc.
419
+
420
+ def include_type_name?
421
+ type_name != "_doc" || connection.version.to_i < 7
411
422
  end
412
423
 
413
424
  # Retrieves the document specified by id from ElasticSearch. Raises
@@ -40,7 +40,7 @@ module SearchFlip
40
40
  # @return [Fixnum] The total number of results
41
41
 
42
42
  def total_entries
43
- hits["total"]
43
+ hits["total"].is_a?(Hash) ? hits["total"]["value"] : hits["total"]
44
44
  end
45
45
 
46
46
  alias_method :total_count, :total_entries
@@ -1,5 +1,5 @@
1
1
 
2
2
  module SearchFlip
3
- VERSION = "2.0.0.beta7"
3
+ VERSION = "2.0.0.beta8"
4
4
  end
5
5
 
@@ -199,6 +199,23 @@ RSpec.describe SearchFlip::Connection do
199
199
  end
200
200
 
201
201
  describe "#update_mapping" do
202
+ if SearchFlip::Connection.new.version.to_i >= 7
203
+ it "updates the mapping of an index without type name" do
204
+ begin
205
+ connection = SearchFlip::Connection.new
206
+
207
+ mapping = { "properties" => { "id" => { "type" => "long" } } }
208
+
209
+ connection.create_index("index_name")
210
+ connection.update_mapping("index_name", mapping)
211
+
212
+ expect(connection.get_mapping("index_name")).to eq("index_name" => { "mappings" => mapping })
213
+ ensure
214
+ connection.delete_index("index_name") if connection.index_exists?("index_name")
215
+ end
216
+ end
217
+ end
218
+
202
219
  it "updates the mapping of an index" do
203
220
  begin
204
221
  connection = SearchFlip::Connection.new
@@ -206,9 +223,9 @@ RSpec.describe SearchFlip::Connection do
206
223
  mapping = { "type_name" => { "properties" => { "id" => { "type" => "long" } } } }
207
224
 
208
225
  connection.create_index("index_name")
209
- connection.update_mapping("index_name", "type_name", mapping)
226
+ connection.update_mapping("index_name", mapping, type_name: "type_name")
210
227
 
211
- expect(connection.get_mapping("index_name", "type_name")).to eq("index_name" => { "mappings" => mapping })
228
+ expect(connection.get_mapping("index_name", type_name: "type_name")).to eq("index_name" => { "mappings" => mapping })
212
229
  ensure
213
230
  connection.delete_index("index_name") if connection.index_exists?("index_name")
214
231
  end
@@ -33,16 +33,16 @@ RSpec.describe SearchFlip::Index do
33
33
  end
34
34
 
35
35
  describe ".type_name" do
36
- it "raises a SearchFlip::MethodNotImplemented by default" do
36
+ it "returns _doc by default" do
37
37
  klass = Class.new do
38
38
  include SearchFlip::Index
39
39
  end
40
40
 
41
- expect { klass.type_name }.to raise_error(SearchFlip::MethodNotImplemented)
41
+ expect(klass.type_name).to eq("_doc")
42
42
  end
43
43
  end
44
44
 
45
- describe ".type_name" do
45
+ describe ".index_name" do
46
46
  it "raises a SearchFlip::MethodNotImplemented by default" do
47
47
  klass = Class.new do
48
48
  include SearchFlip::Index
@@ -61,24 +61,35 @@ RSpec.describe SearchFlip::Index do
61
61
  expect(TestIndex.connection).to have_received(:create_index).with("test", {})
62
62
  end
63
63
 
64
- it "includes the mapping if specified" do
65
- mapping = { test: { properties: { id: { type: "long" } } } }
66
-
67
- allow(TestIndex).to receive(:mapping).and_return(mapping)
64
+ it "includes the index settings" do
65
+ allow(TestIndex).to receive(:index_settings).and_return(settings: { number_of_shards: 2 })
68
66
  allow(TestIndex.connection).to receive(:create_index).and_call_original
69
67
 
70
- TestIndex.create_index(include_mapping: true)
68
+ TestIndex.create_index
71
69
 
72
- expect(TestIndex.connection).to have_received(:create_index).with("test", mappings: mapping)
70
+ expect(TestIndex.connection).to have_received(:create_index).with("test", { settings: { number_of_shards: 2 } })
73
71
  end
72
+ end
74
73
 
75
- it "includes the index settings" do
76
- allow(TestIndex).to receive(:index_settings).and_return(number_of_shards: 2)
77
- allow(TestIndex.connection).to receive(:create_index).and_call_original
74
+ describe ".include_type_name?" do
75
+ it "returns true for Elasticsearch before version 7 and the default type name" do
76
+ klass = Class.new do
77
+ include SearchFlip::Index
78
+ end
78
79
 
79
- TestIndex.create_index
80
+ expect(klass.include_type_name?).to eq(klass.connection.version.to_i < 7)
81
+ end
80
82
 
81
- expect(TestIndex.connection).to have_received(:create_index).with("test", number_of_shards: 2)
83
+ it "returns true if the type name is not equal to _doc" do
84
+ klass = Class.new do
85
+ include SearchFlip::Index
86
+
87
+ def self.type_name
88
+ "type_name"
89
+ end
90
+ end
91
+
92
+ expect(klass.include_type_name?).to eq(true)
82
93
  end
83
94
  end
84
95
 
@@ -160,30 +171,85 @@ RSpec.describe SearchFlip::Index do
160
171
  end
161
172
 
162
173
  describe ".update_mapping" do
163
- it "delegates to connection" do
164
- TestIndex.create_index
174
+ if TestIndex.connection.version.to_i >= 7
175
+ context "without type name" do
176
+ it "delegates to connection" do
177
+ TestIndex.create_index
178
+
179
+ allow(TestIndex).to receive(:include_type_name?).and_return(false)
165
180
 
166
- mapping = { test: { properties: { id: { type: "long" } } } }
181
+ mapping = { properties: { id: { type: "long" } } }
167
182
 
168
- allow(TestIndex).to receive(:mapping).and_return(mapping)
169
- allow(TestIndex.connection).to receive(:update_mapping).and_call_original
183
+ allow(TestIndex).to receive(:mapping).and_return(mapping)
184
+ allow(TestIndex.connection).to receive(:update_mapping).and_call_original
170
185
 
171
- TestIndex.update_mapping
186
+ TestIndex.update_mapping
172
187
 
173
- expect(TestIndex.connection).to have_received(:update_mapping).with("test", "test", mapping)
188
+ expect(TestIndex.connection).to have_received(:update_mapping).with("test", mapping)
189
+ end
190
+ end
191
+ end
192
+
193
+ context "with type name" do
194
+ it "delegates to connection" do
195
+ TestIndex.create_index
196
+
197
+ mapping = { properties: { id: { type: "long" } } }
198
+
199
+ allow(TestIndex).to receive(:mapping).and_return(mapping)
200
+ allow(TestIndex.connection).to receive(:update_mapping).and_call_original
201
+
202
+ TestIndex.update_mapping
203
+
204
+ expect(TestIndex.connection).to have_received(:update_mapping).with("test", { "test" => mapping }, type_name: "test")
205
+ end
206
+ end
207
+ end
208
+
209
+ describe ".mapping" do
210
+ it "returns an empty mapping" do
211
+ klass = Class.new do
212
+ include SearchFlip::Index
213
+
214
+ def self.include_type_name?
215
+ true
216
+ end
217
+ end
218
+
219
+ expect(klass.mapping).to eq({})
174
220
  end
175
221
  end
176
222
 
177
223
  describe ".get_mapping" do
178
- it "delegates to connection" do
179
- TestIndex.create_index
180
- TestIndex.update_mapping
224
+ if TestIndex.connection.version.to_i >= 7
225
+ context "without type name" do
226
+ it "delegates to connection" do
227
+ allow(TestIndex).to receive(:include_type_name?).and_return(false)
228
+ allow(TestIndex).to receive(:mapping).and_return({})
229
+
230
+ TestIndex.create_index
231
+ TestIndex.update_mapping
232
+
233
+ allow(TestIndex.connection).to receive(:get_mapping).and_call_original
234
+
235
+ TestIndex.get_mapping
181
236
 
182
- allow(TestIndex.connection).to receive(:get_mapping).and_call_original
237
+ expect(TestIndex.connection).to have_received(:get_mapping).with("test")
238
+ end
239
+ end
240
+ end
183
241
 
184
- TestIndex.get_mapping
242
+ context "with type name" do
243
+ it "delegates to connection" do
244
+ TestIndex.create_index
245
+ TestIndex.update_mapping
185
246
 
186
- expect(TestIndex.connection).to have_received(:get_mapping).with("test", "test")
247
+ allow(TestIndex.connection).to receive(:get_mapping).and_call_original
248
+
249
+ TestIndex.get_mapping
250
+
251
+ expect(TestIndex.connection).to have_received(:get_mapping).with("test", type_name: "test")
252
+ end
187
253
  end
188
254
  end
189
255
 
data/spec/spec_helper.rb CHANGED
@@ -114,25 +114,23 @@ class ProductIndex
114
114
  def self.mapping
115
115
  if ProductIndex.connection.version.to_i >= 5
116
116
  {
117
- products: {
118
- properties: {
119
- category: {
120
- type: "text",
121
- fielddata: true
122
- },
123
- title: {
124
- type: "text",
125
- fielddata: true
126
- },
127
- description: {
128
- type: "text",
129
- fielddata: true
130
- }
117
+ properties: {
118
+ category: {
119
+ type: "text",
120
+ fielddata: true
121
+ },
122
+ title: {
123
+ type: "text",
124
+ fielddata: true
125
+ },
126
+ description: {
127
+ type: "text",
128
+ fielddata: true
131
129
  }
132
130
  }
133
131
  }
134
132
  else
135
- { products: {} }
133
+ { }
136
134
  end
137
135
  end
138
136
 
@@ -171,10 +169,8 @@ class TestIndex
171
169
 
172
170
  def self.mapping
173
171
  {
174
- test: {
175
- properties: {
176
- test_field: { type: "date" }
177
- }
172
+ properties: {
173
+ test_field: { type: "date" }
178
174
  }
179
175
  }
180
176
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: search_flip
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta7
4
+ version: 2.0.0.beta8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Vetter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-20 00:00:00.000000000 Z
11
+ date: 2019-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord