search_flip 2.0.0.beta7 → 2.0.0.beta8

Sign up to get free protection for your applications and to get access to all the features.
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