elastic_adapter 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/elastic_adapter.rb +0 -10
  3. data/lib/elastic_adapter/index.rb +41 -74
  4. data/lib/elastic_adapter/version.rb +1 -1
  5. data/spec/integration/index/aggregation_spec.rb +1 -5
  6. data/spec/integration/index/count_spec.rb +6 -5
  7. data/spec/integration/index/get_spec.rb +7 -6
  8. data/spec/integration/index/index_spec.rb +1 -2
  9. data/spec/integration/index/search_spec.rb +6 -4
  10. data/spec/integration/index/shared_context.rb +0 -1
  11. data/spec/integration/index/suggest_spec.rb +1 -1
  12. data/spec/integration/index/validate_spec.rb +2 -2
  13. data/spec/unit/index_spec.rb +15 -27
  14. metadata +3 -33
  15. data/lib/elastic_adapter/response.rb +0 -25
  16. data/lib/elastic_adapter/responses/with_aggregations.rb +0 -9
  17. data/lib/elastic_adapter/responses/with_count.rb +0 -9
  18. data/lib/elastic_adapter/responses/with_exception.rb +0 -9
  19. data/lib/elastic_adapter/responses/with_hit.rb +0 -24
  20. data/lib/elastic_adapter/responses/with_hits.rb +0 -18
  21. data/lib/elastic_adapter/responses/with_suggestions.rb +0 -9
  22. data/lib/elastic_adapter/responses/with_validations.rb +0 -13
  23. data/spec/integration/index/create_index_spec.rb +0 -39
  24. data/spec/integration/index/delete_index_spec.rb +0 -29
  25. data/spec/integration/index/shared_examples.rb +0 -19
  26. data/spec/unit/response_spec.rb +0 -28
  27. data/spec/unit/responses/with_aggregations_spec.rb +0 -30
  28. data/spec/unit/responses/with_count_spec.rb +0 -22
  29. data/spec/unit/responses/with_exception_spec.rb +0 -17
  30. data/spec/unit/responses/with_hit_spec.rb +0 -49
  31. data/spec/unit/responses/with_hits_spec.rb +0 -79
  32. data/spec/unit/responses/with_suggestions_spec.rb +0 -33
  33. data/spec/unit/responses/with_validations_spec.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 901b49ff68803afe86d9f34df44a74bf4a763c20
4
- data.tar.gz: a60382f88af95ecd4f827436e82e28a35ce3141a
3
+ metadata.gz: fcd771ead4aea21340a2679050092a3013cf49b7
4
+ data.tar.gz: 3640999224cc2011557cbd0f1cd3e2234c786c79
5
5
  SHA512:
6
- metadata.gz: c210df90a3fb29054c629f3a6d2138b45e4a2da6b34a0250a291acb58fe18d9919e37b8b5d88bf727691c6ff0cd3cfcd47bb3cf5bcb09a8de2d07b278db29c52
7
- data.tar.gz: aaf13649c527376f157f09c4d007296cc7f1360d9baba31a38ef43f08ea5ef277a6cd94bffadbc8dcf77edae18bc7ea8a685ebe8d5564bf54818973be5d2c6c7
6
+ metadata.gz: c3ff80d83d4ec56a12bdded63a752c197e7f7beb84fc4b135ef114fdea47df382adbf51e1a0315c8e62a018284dc6723cfba003a78b24c5cb32b22caf5c0dbcb
7
+ data.tar.gz: 12330e49c4cc65d118291167369a3c67051409a400cc222f30e1c898fb43e5078adba44de963f9b76eb327ac48d0b50c215457038b9e718ca01a15ac1c645641
@@ -2,16 +2,6 @@ require "elasticsearch"
2
2
 
3
3
  require "elastic_adapter/version"
4
4
  require "elastic_adapter/document_type"
5
- require "elastic_adapter/response"
6
-
7
- require "elastic_adapter/responses/with_exception"
8
- require "elastic_adapter/responses/with_aggregations"
9
- require "elastic_adapter/responses/with_validations"
10
- require "elastic_adapter/responses/with_suggestions"
11
- require "elastic_adapter/responses/with_hits"
12
- require "elastic_adapter/responses/with_hit"
13
- require "elastic_adapter/responses/with_count"
14
-
15
5
  require "elastic_adapter/index"
16
6
 
17
7
  begin
@@ -29,8 +29,6 @@ module ElasticAdapter
29
29
  class Index
30
30
  attr_reader :name, :settings, :document_type, :url, :log, :client
31
31
 
32
- ELASTICSEARCH_ERRORS = [Elasticsearch::Transport::Transport::Error]
33
-
34
32
  # @param [Hash] params
35
33
  # @option params [String] :name required
36
34
  # @option params [Hash] :settings required
@@ -56,28 +54,24 @@ module ElasticAdapter
56
54
  #
57
55
  # @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html Elasticsearch create index
58
56
  #
59
- # @return [ElasticAdapter::Response]
57
+ # @return [Hash]
60
58
  def create_index
61
- handle_api_call do
62
- client.indices.create(
63
- index: name,
64
- body: {
65
- mappings: document_type.mappings,
66
- settings: settings
67
- }
68
- )
69
- end
59
+ client.indices.create(
60
+ index: name,
61
+ body: {
62
+ mappings: document_type.mappings,
63
+ settings: settings
64
+ }
65
+ )
70
66
  end
71
67
 
72
68
  # Deletes the index
73
69
  #
74
70
  # @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-delete-index.html Elasticsearch delete index
75
71
  #
76
- # @return [ElasticAdapter::Response]
72
+ # @return [Hash]
77
73
  def delete_index
78
- handle_api_call do
79
- client.indices.delete index: name
80
- end
74
+ client.indices.delete index: name
81
75
  end
82
76
 
83
77
  # Returns the document count for the index
@@ -85,11 +79,9 @@ module ElasticAdapter
85
79
  # @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-count.html#search-count Elasticsearch count api
86
80
  #
87
81
  # @param [Hash] query a query to count the documents for a given query. Defaults to match all
88
- # @return [Decoration::CountResponse] the count
82
+ # @return [Hash] the count
89
83
  def count(query = { query: { match_all: {} } })
90
- response = handle_api_call :count do
91
- client.count index: name, body: query
92
- end.extend(Responses::WithCount)
84
+ client.count index: name, body: query
93
85
  end
94
86
 
95
87
  # Indexes a Hash or anything that responds to to_hash as a document
@@ -102,7 +94,7 @@ module ElasticAdapter
102
94
  # test_index.index(id: 1, name: "foo")
103
95
  #
104
96
  # @param [Hash] document
105
- # @return [Response]
97
+ # @return [Hash]
106
98
  def index(document)
107
99
  doc = document.to_hash.merge({})
108
100
 
@@ -113,11 +105,7 @@ module ElasticAdapter
113
105
  body: doc
114
106
  }
115
107
 
116
- response = handle_api_call do
117
- client.index(params)
118
- end
119
-
120
- response
108
+ client.index(params)
121
109
  end
122
110
 
123
111
  # Returns the document with the given id from the index
@@ -127,13 +115,11 @@ module ElasticAdapter
127
115
  # @param [Integer] id
128
116
  # @return [ElasticAdapter::HitDecorator]
129
117
  def get(id)
130
- handle_api_call :get do
131
- client.get(
132
- index: name,
133
- type: document_type.name,
134
- id: id
135
- )
136
- end.extend(Responses::WithHit)
118
+ client.get(
119
+ index: name,
120
+ type: document_type.name,
121
+ id: id
122
+ )
137
123
  end
138
124
 
139
125
  # Searches the index for documents matching the passed query.
@@ -145,17 +131,12 @@ module ElasticAdapter
145
131
  # test_index.seach(query: {match: {foo: "bar"}})
146
132
  #
147
133
  # @param [Hash] query
148
- # @return [ElasticAdapter::SearchResponse]
134
+ # @return [Hash]
149
135
  def search(query)
150
- handle_api_call :search do
151
- client.search(
152
- index: name,
153
- body: query
154
- )
155
- end
156
- .extend(Responses::WithSuggestions)
157
- .extend(Responses::WithAggregations)
158
- .extend(Responses::WithHits)
136
+ client.search(
137
+ index: name,
138
+ body: query
139
+ )
159
140
  end
160
141
 
161
142
  # Searches the index for suggestions for the passed suggest query
@@ -167,14 +148,12 @@ module ElasticAdapter
167
148
  # test_index.seach(name_suggestions: {text: "foo", completion: {field: "name"}})
168
149
  #
169
150
  # @param [Hash] query
170
- # @return [ElasticAdapter::SuggestResponse]
151
+ # @return [Hash]
171
152
  def suggest(query)
172
- handle_api_call do
173
- client.suggest(
174
- index: name,
175
- body: query
176
- )
177
- end.extend(Responses::WithSuggestions)
153
+ client.suggest(
154
+ index: name,
155
+ body: query
156
+ )
178
157
  end
179
158
 
180
159
  # Validates the passed query
@@ -182,36 +161,24 @@ module ElasticAdapter
182
161
  # @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-validate.html Elasticsearch validate api
183
162
  #
184
163
  # @param [Hash] query
185
- # @return [ElasticAdapter::ValidationResponse]
164
+ # @return [Hash]
186
165
  def validate(query)
187
- handle_api_call do
188
- client.indices.validate_query(
189
- index: name,
190
- explain: true,
191
- body: query
192
- )
193
- end.extend(Responses::WithValidations)
166
+ client.indices.validate_query(
167
+ index: name,
168
+ explain: true,
169
+ body: query
170
+ )
194
171
  end
195
172
 
196
- # Executes a search request and wraps the response in an AggregationResponse
173
+ # Executes a search request and returns the response
197
174
  #
198
175
  # @param [Hash] query
199
- # @return [ElasticAdapter::Decoration::AggregationResponse]
176
+ # @return [Hash]
200
177
  def aggregate(query)
201
- handle_api_call do
202
- client.search(
203
- index: name,
204
- body: query
205
- )
206
- end.extend(Responses::WithAggregations)
207
- end
208
-
209
- private
210
-
211
- def handle_api_call(*args)
212
- Response.new(yield)
213
- rescue *ELASTICSEARCH_ERRORS => e
214
- Response.new(exception: e).extend(Responses::WithException)
178
+ client.search(
179
+ index: name,
180
+ body: query
181
+ )
215
182
  end
216
183
  end
217
184
  end
@@ -1,3 +1,3 @@
1
1
  module ElasticAdapter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -29,12 +29,8 @@ module ElasticAdapter
29
29
  @response = subject.aggregate(query)
30
30
  end
31
31
 
32
- it "is a WithAggregation" do
33
- expect(@response.singleton_class).to be < Responses::WithAggregations
34
- end
35
-
36
32
  it "has a aggregation" do
37
- expect(@response.aggregations).not_to be_empty
33
+ expect(@response['aggregations']).not_to be_empty
38
34
  end
39
35
  end
40
36
  end
@@ -10,14 +10,14 @@ module ElasticAdapter
10
10
  create_test_index
11
11
  end
12
12
 
13
-
14
13
  after :all do
15
14
  delete_test_index
16
15
  end
17
16
 
17
+ before { @result = subject.count }
18
+
18
19
  it "returns the amount of all documents" do
19
- result = subject.count
20
- expect(result.count).to eq 0
20
+ expect(@result['count']).to eq 0
21
21
  end
22
22
  end
23
23
 
@@ -31,9 +31,10 @@ module ElasticAdapter
31
31
  delete_test_index
32
32
  end
33
33
 
34
+ before { @result = subject.count }
35
+
34
36
  it "returns 1" do
35
- result = subject.count
36
- expect(result.count).to eq 1
37
+ expect(@result['count']).to eq 1
37
38
  end
38
39
  end
39
40
  end
@@ -22,13 +22,14 @@ module ElasticAdapter
22
22
  describe "document" do
23
23
  it "returns the document" do
24
24
  expected = {
25
- _index: "test_index",
26
- _type: "test_doc",
27
- _id: "1",
28
- _version: 1,
29
- _source: { foo: "bar" }
25
+ '_index' => 'test_index',
26
+ '_type' => "test_doc",
27
+ '_id' => "1",
28
+ '_version' => 1,
29
+ 'found' => true,
30
+ '_source' => { 'foo' => 'bar' }
30
31
  }
31
- expect(response.hit).to eq expected
32
+ expect(response).to eq expected
32
33
  end
33
34
  end
34
35
  end
@@ -18,9 +18,8 @@ module ElasticAdapter
18
18
 
19
19
  it "indexes a document" do
20
20
  subject.index(document)
21
- wait(1)
22
21
  response = subject.count
23
- expect(response.count).to eq 1
22
+ expect(response['count']).to eq 1
24
23
  end
25
24
  end
26
25
  end
@@ -17,19 +17,21 @@ module ElasticAdapter
17
17
 
18
18
  context "match_all" do
19
19
  it "returns all documents" do
20
- expect(subject.search({query: {match_all: {}}}).hits.count).to eq 2
20
+ result = subject.search({query: {match_all: {}}})
21
+ expect(result['hits']['total']).to eq 2
21
22
  end
22
23
  end
23
24
 
24
25
  context "zoo" do
25
26
  let(:response) { subject.search(query: {match: {foo: "zoo"}})}
27
+
26
28
  it "returns one document" do
27
- expect(response.hits.count).to eq 1
29
+ expect(response['hits']['total']).to eq 1
28
30
  end
29
31
 
30
32
  it "returns the wanted document" do
31
- expect(response.hits.first[:_id]).to eq "2"
32
- expect(response.hits.first[:_source][:foo]).to eq "zoo"
33
+ expect(response['hits']['hits'].first['_id']).to eq '2'
34
+ expect(response['hits']['hits'].first['_source']['foo']).to eq 'zoo'
33
35
  end
34
36
  end
35
37
  end
@@ -1,5 +1,4 @@
1
1
  require "spec_helper"
2
- require_relative "./shared_examples.rb"
3
2
 
4
3
  RSpec.shared_context "index context" do
5
4
  let(:name) { "test_index" }
@@ -31,7 +31,7 @@ module ElasticAdapter
31
31
  let(:response) { subject.suggest(query) }
32
32
 
33
33
  it "returns bar" do
34
- expect(response[:foo_suggest].first[:options].first[:text]).to eq "bar"
34
+ expect(response['foo_suggest'].first['options'].first['text']).to eq 'bar'
35
35
  end
36
36
  end
37
37
  end
@@ -24,7 +24,7 @@ module ElasticAdapter
24
24
 
25
25
  describe "valid?" do
26
26
  it "is false" do
27
- expect(response.valid?).to be false
27
+ expect(response['valid']).to be false
28
28
  end
29
29
  end
30
30
  end
@@ -34,7 +34,7 @@ module ElasticAdapter
34
34
  let(:response) { subject.validate(query) }
35
35
 
36
36
  it "is true" do
37
- expect(response.valid?).to eq true
37
+ expect(response['valid']).to eq true
38
38
  end
39
39
  end
40
40
  end
@@ -110,9 +110,10 @@ module ElasticAdapter
110
110
  subject.count(query)
111
111
  end
112
112
 
113
- it "returns a response with count" do
113
+ it "returns the response" do
114
114
  expect(client).to receive(:count).and_return({})
115
- expect(subject.count(query).singleton_class).to be < Responses::WithCount
115
+ result = subject.count(query)
116
+ expect(result).to eq({})
116
117
  end
117
118
  end
118
119
 
@@ -130,10 +131,10 @@ module ElasticAdapter
130
131
  subject.index(doc)
131
132
  end
132
133
 
133
- it "returns a response" do
134
+ it "returns the response" do
134
135
  expect(client).to receive(:index).and_return({})
135
136
  result = subject.index(doc)
136
- expect(result).to be_a Response
137
+ expect(result).to eq({})
137
138
  end
138
139
  end
139
140
 
@@ -143,10 +144,10 @@ module ElasticAdapter
143
144
  subject.get(1)
144
145
  end
145
146
 
146
- it "returns a response with hit" do
147
+ it "returns the response" do
147
148
  expect(client).to receive(:get).and_return({})
148
149
  result = subject.get(1)
149
- expect(result.singleton_class).to be < Responses::WithHit
150
+ expect(result).to eq({})
150
151
  end
151
152
  end
152
153
 
@@ -156,12 +157,10 @@ module ElasticAdapter
156
157
  subject.search(query)
157
158
  end
158
159
 
159
- it "returns a response with hits, aggregations and suggestions" do
160
+ it "returns the response" do
160
161
  expect(client).to receive(:search).and_return({})
161
162
  result = subject.search(query)
162
- expect(result.singleton_class).to be < Responses::WithHits
163
- expect(result.singleton_class).to be < Responses::WithSuggestions
164
- expect(result.singleton_class).to be < Responses::WithAggregations
163
+ expect(result).to eq({})
165
164
  end
166
165
  end
167
166
 
@@ -171,10 +170,10 @@ module ElasticAdapter
171
170
  subject.suggest(query)
172
171
  end
173
172
 
174
- it "returns a response with suggestions" do
173
+ it "returns the response" do
175
174
  expect(client).to receive(:suggest).and_return({})
176
175
  result = subject.suggest(query)
177
- expect(result.singleton_class).to be < Responses::WithSuggestions
176
+ expect(result).to eq({})
178
177
  end
179
178
  end
180
179
 
@@ -184,10 +183,10 @@ module ElasticAdapter
184
183
  subject.aggregate(query)
185
184
  end
186
185
 
187
- it "returns a response with aggregations" do
186
+ it "returns the response" do
188
187
  expect(client).to receive(:search).and_return({})
189
188
  result = subject.aggregate(query)
190
- expect(result.singleton_class).to be < Responses::WithAggregations
189
+ expect(result).to eq({})
191
190
  end
192
191
  end
193
192
 
@@ -197,21 +196,10 @@ module ElasticAdapter
197
196
  subject.validate(query)
198
197
  end
199
198
 
200
- it "returns a response with validations" do
199
+ it "returns the response" do
201
200
  expect(indices).to receive(:validate_query).and_return({})
202
201
  result = subject.validate(query)
203
- expect(result.singleton_class).to be < Responses::WithValidations
204
- end
205
- end
206
-
207
- describe "error handling" do
208
- before do
209
- allow(client).to receive(:search).and_raise(Elasticsearch::Transport::Transport::Error)
210
- end
211
-
212
- it "returns a response with exception" do
213
- result = subject.search(query)
214
- expect(result.singleton_class).to be < Responses::WithException
202
+ expect(result).to eq({})
215
203
  end
216
204
  end
217
205
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristopher Bredemeier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-28 00:00:00.000000000 Z
11
+ date: 2016-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch
@@ -159,14 +159,6 @@ files:
159
159
  - lib/elastic_adapter.rb
160
160
  - lib/elastic_adapter/document_type.rb
161
161
  - lib/elastic_adapter/index.rb
162
- - lib/elastic_adapter/response.rb
163
- - lib/elastic_adapter/responses/with_aggregations.rb
164
- - lib/elastic_adapter/responses/with_count.rb
165
- - lib/elastic_adapter/responses/with_exception.rb
166
- - lib/elastic_adapter/responses/with_hit.rb
167
- - lib/elastic_adapter/responses/with_hits.rb
168
- - lib/elastic_adapter/responses/with_suggestions.rb
169
- - lib/elastic_adapter/responses/with_validations.rb
170
162
  - lib/elastic_adapter/version.rb
171
163
  - spec/cassettes/ElasticAdapter_Index/_aggregate.yml
172
164
  - spec/cassettes/ElasticAdapter_Index/_aggregate/response/has_a_aggregation.yml
@@ -212,13 +204,10 @@ files:
212
204
  - spec/cassettes/ElasticAdapter_Index/_validate/valid_query/is_true.yml
213
205
  - spec/integration/index/aggregation_spec.rb
214
206
  - spec/integration/index/count_spec.rb
215
- - spec/integration/index/create_index_spec.rb
216
- - spec/integration/index/delete_index_spec.rb
217
207
  - spec/integration/index/get_spec.rb
218
208
  - spec/integration/index/index_spec.rb
219
209
  - spec/integration/index/search_spec.rb
220
210
  - spec/integration/index/shared_context.rb
221
- - spec/integration/index/shared_examples.rb
222
211
  - spec/integration/index/suggest_spec.rb
223
212
  - spec/integration/index/unit_spec.rb
224
213
  - spec/integration/index/validate_spec.rb
@@ -227,14 +216,6 @@ files:
227
216
  - spec/unit/document_type_spec.rb
228
217
  - spec/unit/elastic_adapter_spec.rb
229
218
  - spec/unit/index_spec.rb
230
- - spec/unit/response_spec.rb
231
- - spec/unit/responses/with_aggregations_spec.rb
232
- - spec/unit/responses/with_count_spec.rb
233
- - spec/unit/responses/with_exception_spec.rb
234
- - spec/unit/responses/with_hit_spec.rb
235
- - spec/unit/responses/with_hits_spec.rb
236
- - spec/unit/responses/with_suggestions_spec.rb
237
- - spec/unit/responses/with_validations_spec.rb
238
219
  homepage: https://github.com/kbredemeier/elastic_adapter
239
220
  licenses:
240
221
  - MIT
@@ -255,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
255
236
  version: '0'
256
237
  requirements: []
257
238
  rubyforge_project:
258
- rubygems_version: 2.4.6
239
+ rubygems_version: 2.5.1
259
240
  signing_key:
260
241
  specification_version: 4
261
242
  summary: Repository like access to elasticseach indices
@@ -304,13 +285,10 @@ test_files:
304
285
  - spec/cassettes/ElasticAdapter_Index/_validate/valid_query/is_true.yml
305
286
  - spec/integration/index/aggregation_spec.rb
306
287
  - spec/integration/index/count_spec.rb
307
- - spec/integration/index/create_index_spec.rb
308
- - spec/integration/index/delete_index_spec.rb
309
288
  - spec/integration/index/get_spec.rb
310
289
  - spec/integration/index/index_spec.rb
311
290
  - spec/integration/index/search_spec.rb
312
291
  - spec/integration/index/shared_context.rb
313
- - spec/integration/index/shared_examples.rb
314
292
  - spec/integration/index/suggest_spec.rb
315
293
  - spec/integration/index/unit_spec.rb
316
294
  - spec/integration/index/validate_spec.rb
@@ -319,12 +297,4 @@ test_files:
319
297
  - spec/unit/document_type_spec.rb
320
298
  - spec/unit/elastic_adapter_spec.rb
321
299
  - spec/unit/index_spec.rb
322
- - spec/unit/response_spec.rb
323
- - spec/unit/responses/with_aggregations_spec.rb
324
- - spec/unit/responses/with_count_spec.rb
325
- - spec/unit/responses/with_exception_spec.rb
326
- - spec/unit/responses/with_hit_spec.rb
327
- - spec/unit/responses/with_hits_spec.rb
328
- - spec/unit/responses/with_suggestions_spec.rb
329
- - spec/unit/responses/with_validations_spec.rb
330
300
  has_rdoc:
@@ -1,25 +0,0 @@
1
- require "delegate"
2
-
3
- module ElasticAdapter
4
- class Response < SimpleDelegator
5
- def initialize(object)
6
- __setobj__(symbolize_keys(object))
7
- end
8
-
9
- def object
10
- __getobj__
11
- end
12
-
13
- private
14
-
15
- def symbolize_keys(obj)
16
- if obj.is_a? Hash
17
- Hash[obj.map { |k, v| [k.to_sym, symbolize_keys(v)] }]
18
- elsif obj.is_a? Array
19
- obj.map { |e| symbolize_keys(e) }
20
- else
21
- obj
22
- end
23
- end
24
- end
25
- end
@@ -1,9 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithAggregations
4
- def aggregations
5
- object.fetch(:aggregations, {})
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithCount
4
- def count
5
- object.fetch(:count, 0)
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithException
4
- def exception
5
- object.fetch(:exception)
6
- end
7
- end
8
- end
9
- end
@@ -1,24 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithHit
4
- class Hit < SimpleDelegator
5
- attr_reader :version
6
-
7
- def initialize(response)
8
- response = response.dup
9
- @found = response.delete(:found)
10
- @version = response.delete(:version)
11
- __setobj__(response)
12
- end
13
-
14
- def found?
15
- @found
16
- end
17
- end
18
-
19
- def hit
20
- @hit ||= Hit.new(object)
21
- end
22
- end
23
- end
24
- end
@@ -1,18 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithHits
4
- class Hits < SimpleDelegator
5
- attr_reader :count
6
-
7
- def initialize(response)
8
- @count = response.fetch(:hits, {}).fetch(:total, 0)
9
- __setobj__(response.fetch(:hits, {}).fetch(:hits, []))
10
- end
11
- end
12
-
13
- def hits
14
- @hits ||= Hits.new(object)
15
- end
16
- end
17
- end
18
- end
@@ -1,9 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithSuggestions
4
- def suggestions
5
- object.fetch(:suggest, {})
6
- end
7
- end
8
- end
9
- end
@@ -1,13 +0,0 @@
1
- module ElasticAdapter
2
- module Responses
3
- module WithValidations
4
- def explanations
5
- object.fetch(:explanations, [])
6
- end
7
-
8
- def valid?
9
- object[:valid]
10
- end
11
- end
12
- end
13
- end
@@ -1,39 +0,0 @@
1
- require_relative "./shared_context.rb"
2
-
3
- module ElasticAdapter
4
- describe Index do
5
- include_context "index context"
6
-
7
- describe "#create_index", :vcr do
8
- context "index is present" do
9
- before :all do
10
- create_test_index
11
- end
12
-
13
- after :all do
14
- delete_test_index
15
- end
16
-
17
- let(:response) { subject.create_index }
18
-
19
- describe "response" do
20
- # TODO fix this
21
- # Somehow VCR doesn't record the requests for the current context
22
- include_examples "response with exception"
23
- end
24
- end
25
-
26
- context "index not present" do
27
- after :each do
28
- delete_test_index
29
- end
30
-
31
- let(:response) { subject.create_index }
32
-
33
- describe "response" do
34
- include_examples "response without exception"
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,29 +0,0 @@
1
- require_relative "./shared_context.rb"
2
-
3
- module ElasticAdapter
4
- describe Index do
5
- include_context "index context"
6
-
7
- describe "#delete_index", :vcr do
8
- context "index present" do
9
- let(:response) { subject.delete_index }
10
-
11
- before :each do |example|
12
- create_test_index prefix: vcr_cassette_name_for(example.metadata)
13
- end
14
-
15
- describe "repsonse" do
16
- include_examples "response without exception"
17
- end
18
- end
19
-
20
- context "index not present" do
21
- let(:response) { subject.delete_index }
22
-
23
- describe "repsonse" do
24
- include_examples "response with exception"
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,19 +0,0 @@
1
- RSpec.shared_examples "response without exception" do
2
- it "is a Response" do
3
- expect(response).to be_a ElasticAdapter::Response
4
- end
5
-
6
- it "has no exception" do
7
- expect(response).not_to have_key :exception
8
- end
9
- end
10
-
11
- RSpec.shared_examples "response with exception" do
12
- it "is a Response" do
13
- expect(response).to be_a ElasticAdapter::Response
14
- end
15
-
16
- it "has an exception" do
17
- expect(response).to have_key :exception
18
- end
19
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Response do
5
- let(:object) {{
6
- "foo" => { "bim" => "bam" },
7
- "bar" => [
8
- { "biz" => "buz" }
9
- ],
10
- "boo" => "bam"
11
- }}
12
-
13
- subject { Response.new(object) }
14
-
15
- describe "symbolize keys" do
16
- it "symbolizes all keys" do
17
- expected = {
18
- foo: { bim: "bam" },
19
- bar: [
20
- { biz: "buz" }
21
- ],
22
- boo: "bam"
23
- }
24
- expect(subject.object).to eq expected
25
- end
26
- end
27
- end
28
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithAggregations do
5
- let(:plain_response) {{
6
- aggregations: {
7
- products: {
8
- doc_count_error_upper_bound: 46,
9
- buckets: [
10
- {
11
- key: "Product A",
12
- doc_count: 100
13
- },
14
- {
15
- key: "Product Z",
16
- doc_count: 52
17
- }
18
- ]
19
- }
20
- }
21
- }}
22
- subject { Response.new(plain_response).extend(Responses::WithAggregations) }
23
-
24
- describe "#aggregations" do
25
- it "includes the products aggregation" do
26
- expect(subject.aggregations).to eq plain_response[:aggregations]
27
- end
28
- end
29
- end
30
- end
@@ -1,22 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithCount do
5
- let(:plain_response) {{
6
- count: 1,
7
- shards: {
8
- total: 5,
9
- successful: 5,
10
- failed: 0
11
- }
12
- }}
13
-
14
- subject { Response.new(plain_response).extend(Responses::WithCount) }
15
-
16
- describe "#count" do
17
- it "returns the count" do
18
- expect(subject.count).to eq 1
19
- end
20
- end
21
- end
22
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithException do
5
- let(:plain_response) {{
6
- exception: ArgumentError.new()
7
- }}
8
-
9
- subject { Response.new(plain_response).extend(Responses::WithException) }
10
-
11
- describe "#exception" do
12
- it "returns the exception" do
13
- expect(subject.exception).to be plain_response[:exception]
14
- end
15
- end
16
- end
17
- end
@@ -1,49 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithHits do
5
- let(:plain_response) {{
6
- index: "twitter",
7
- type: "tweet",
8
- id: "1",
9
- version: 1,
10
- found: true,
11
- source: {
12
- user: "kimchy",
13
- postDate: "2009-11-15T14:12:12",
14
- message: "trying out Elasticsearch"
15
- }
16
- }}
17
- subject { Response.new(plain_response).extend(Responses::WithHit) }
18
-
19
- describe "#hit" do
20
- it "is the hit" do
21
- doc = {
22
- index: "twitter",
23
- type: "tweet",
24
- id: "1",
25
- source: {
26
- user: "kimchy",
27
- postDate: "2009-11-15T14:12:12",
28
- message: "trying out Elasticsearch"
29
- }
30
- }
31
-
32
- expect(subject.hit).to eq doc
33
-
34
- end
35
-
36
- describe "#found?" do
37
- it "returns true" do
38
- expect(subject.hit.found?).to be true
39
- end
40
- end
41
-
42
- describe "#found" do
43
- it "returns the version" do
44
- expect(subject.hit.version).to eq 1
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,79 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithHits do
5
- context "with hits" do
6
- let(:plain_response) {{
7
- shards: {
8
- total: 5,
9
- successful: 5,
10
- failed: 0
11
- },
12
- hits: {
13
- total: 100,
14
- hits: [
15
- {
16
- index: "twitter",
17
- type: "tweet",
18
- id: "1",
19
- source: {
20
- user: "kimchy",
21
- postDate: "2009-11-15T14:12:12",
22
- message: "trying out Elasticsearch"
23
- }
24
- }
25
- ]
26
- }
27
- }}
28
-
29
- subject { Response.new(plain_response).extend(Responses::WithHits) }
30
-
31
- describe "#hits" do
32
- it "includes the hit in a flattened format" do
33
- doc = {
34
- index: "twitter",
35
- type: "tweet",
36
- id: "1",
37
- source: {
38
- user: "kimchy",
39
- postDate: "2009-11-15T14:12:12",
40
- message: "trying out Elasticsearch"
41
- }
42
- }
43
-
44
- expect(subject.hits).to include doc
45
- end
46
-
47
- describe "#count" do
48
- it "returns the count" do
49
- expect(subject.hits.count).to be plain_response[:hits][:total]
50
- end
51
- end
52
- end
53
- end
54
-
55
- context "without hits" do
56
- let(:plain_response) {{
57
- shards: {
58
- total: 5,
59
- successful: 5,
60
- failed: 0
61
- },
62
- hits: {
63
- total: 0,
64
- hits: []
65
- }
66
- }}
67
-
68
- subject { Response.new(plain_response).extend(Responses::WithHits) }
69
-
70
- describe "#hits" do
71
- describe "#count" do
72
- it "returns 0" do
73
- expect(subject.hits.count).to eq 0
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithSuggestions do
5
- let(:plain_response) {{
6
- shards: {
7
- total: 5, successful: 5, failed: 0
8
- },
9
- suggest: {
10
- foo_suggest: [
11
- {
12
- text: "ba",
13
- offset: 0,
14
- length: 2,
15
- options: [
16
- {
17
- text: "bar",
18
- score: 1.0
19
- }
20
- ]
21
- }
22
- ]
23
- }
24
- }}
25
- subject { Response.new(plain_response).extend(Responses::WithSuggestions) }
26
-
27
- describe "#suggestions" do
28
- it "includes the suggestion" do
29
- expect(subject.suggestions).to eq plain_response[:suggest]
30
- end
31
- end
32
- end
33
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Responses::WithValidations do
5
- let(:plain_response) {{
6
- valid: false,
7
- shards: {
8
- total: 1,
9
- successful: 1,
10
- failed: 0
11
- },
12
- explanations: [
13
- {
14
- index: "twitter",
15
- valid: false,
16
- error: "some error message"
17
- }
18
- ]
19
- }}
20
- subject { Response.new(plain_response).extend(Responses::WithValidations) }
21
-
22
- describe "#explanations" do
23
- it "includes the explanation" do
24
- expect(subject.explanations).to eq plain_response[:explanations]
25
- end
26
- end
27
-
28
- describe "#valid?" do
29
- it "returns false" do
30
- expect(subject.valid?).to be false
31
- end
32
- end
33
- end
34
- end