elastic_adapter 0.0.3 → 0.0.4

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/elastic_adapter.rb +11 -9
  3. data/lib/elastic_adapter/index.rb +6 -4
  4. data/lib/elastic_adapter/{decoration → responses}/aggregation_response.rb +7 -13
  5. data/lib/elastic_adapter/responses/base_response.rb +28 -0
  6. data/lib/elastic_adapter/responses/count_response.rb +13 -0
  7. data/lib/elastic_adapter/responses/get_response.rb +13 -0
  8. data/lib/elastic_adapter/{decoration → responses}/response_decorator_factory.rb +5 -23
  9. data/lib/elastic_adapter/responses/sanitized_response.rb +46 -0
  10. data/lib/elastic_adapter/responses/search_response.rb +21 -0
  11. data/lib/elastic_adapter/responses/suggestion_response.rb +46 -0
  12. data/lib/elastic_adapter/responses/validation_response.rb +18 -0
  13. data/lib/elastic_adapter/version.rb +1 -1
  14. data/spec/cassettes/ElasticAdapter_Index/_count/empty_index/is_a_fixnum.yml +30 -0
  15. data/spec/cassettes/ElasticAdapter_Index/_count/empty_index/number.yml +57 -0
  16. data/spec/cassettes/ElasticAdapter_Index/_count/not_empty_index/is_a_fixnum.yml +30 -0
  17. data/spec/cassettes/ElasticAdapter_Index/_get/document_exists.yml +3 -3
  18. data/spec/cassettes/ElasticAdapter_Index/_get/document_exists/response/{contains_the_document.yml → document/returns_the_document.yml} +1 -1
  19. data/spec/cassettes/ElasticAdapter_Index/_search.yml +16 -16
  20. data/spec/cassettes/ElasticAdapter_Index/_search/match_all/returns_all_documents.yml +2 -2
  21. data/spec/cassettes/ElasticAdapter_Index/_search/zoo/returns_one_document.yml +1 -1
  22. data/spec/cassettes/ElasticAdapter_Index/_search/zoo/returns_the_wanted_document.yml +2 -2
  23. data/spec/cassettes/ElasticAdapter_Index/_validate.yml +2 -2
  24. data/spec/cassettes/ElasticAdapter_Index/_validate/invalid_query/is_a_response.yml +1 -1
  25. data/spec/cassettes/ElasticAdapter_Index/_validate/invalid_query/{is_false.yml → valid_/is_false.yml} +1 -1
  26. data/spec/cassettes/ElasticAdapter_Index/_validate/valid_query/is_a_response.yml +1 -1
  27. data/spec/cassettes/ElasticAdapter_Index/_validate/valid_query/is_true.yml +1 -1
  28. data/spec/index/aggregation_spec.rb +1 -1
  29. data/spec/index/count_spec.rb +4 -4
  30. data/spec/index/get_spec.rb +4 -2
  31. data/spec/index/index_spec.rb +1 -1
  32. data/spec/index/search_spec.rb +4 -4
  33. data/spec/index/shared_examples.rb +2 -2
  34. data/spec/index/suggest_spec.rb +2 -3
  35. data/spec/index/validate_spec.rb +7 -5
  36. data/spec/{decoration → responses}/aggregation_response_spec.rb +1 -2
  37. data/spec/responses/base_response_spec.rb +19 -0
  38. data/spec/responses/count_response_spec.rb +24 -0
  39. data/spec/responses/get_response_spec.rb +29 -0
  40. data/spec/{decoration → responses}/response_decorator_factory_spec.rb +54 -6
  41. data/spec/responses/sanitized_response_spec.rb +36 -0
  42. data/spec/responses/search_response_spec.rb +43 -0
  43. data/spec/responses/suggestion_response_spec.rb +63 -0
  44. data/spec/responses/validation_response_spec.rb +45 -0
  45. metadata +38 -20
  46. data/lib/elastic_adapter/decoration/count_response.rb +0 -16
  47. data/lib/elastic_adapter/decoration/decorator.rb +0 -37
  48. data/lib/elastic_adapter/decoration/hit_decorator.rb +0 -25
  49. data/lib/elastic_adapter/decoration/search_response.rb +0 -27
  50. data/lib/elastic_adapter/decoration/suggestion_response.rb +0 -24
  51. data/lib/elastic_adapter/decoration/validation_response.rb +0 -15
  52. data/lib/elastic_adapter/response.rb +0 -51
  53. data/spec/response_spec.rb +0 -64
@@ -1,25 +0,0 @@
1
- module ElasticAdapter
2
- module Decoration
3
- # Used to decorate responses from the elasticsearch get api or
4
- # to decorate single hits returned from the elasticsearch
5
- # search api
6
- #
7
- # @see ResponseDecoratorFactory
8
- # @see SearchResponse#alter_object
9
- class HitDecorator < Decorator
10
- # Reduces the interface of a single hit
11
- #
12
- # @param [Hash] hash
13
- # @return [Hash]
14
- def alter_object(hash)
15
- new_hash = {}
16
- new_hash[:id] = hash[:id]
17
- hash[:source].each do |key, value|
18
- new_hash[key] = value
19
- end
20
-
21
- new_hash
22
- end
23
- end
24
- end
25
- end
@@ -1,27 +0,0 @@
1
- module ElasticAdapter
2
- module Decoration
3
- # Used to decorate responses from the elasticsearch search api
4
- #
5
- # @attr_reader [Integer] count the total amount of search results
6
- class SearchResponse < Decorator
7
- attr_reader :count
8
-
9
- # Reduces the interface and assigns the @count variable
10
- #
11
- # @param [Hash] hash
12
- # @return [Hash]
13
- def alter_object(hash)
14
- new_hash = {}
15
- new_hash[:count] = hash[:hits][:total]
16
- @count = new_hash[:count]
17
- new_hash[:hits] = []
18
-
19
- hash[:hits][:hits].each do |hit|
20
- new_hash[:hits] << HitDecorator.new(hit)
21
- end
22
-
23
- new_hash
24
- end
25
- end
26
- end
27
- end
@@ -1,24 +0,0 @@
1
- module ElasticAdapter
2
- module Decoration
3
- # Used to decorate responses from the elasticsearch suggestion api
4
- # @attr_reader [Integer] count the amount of suggestions
5
- class SuggestionResponse < Decorator
6
- attr_reader :count
7
-
8
- # Builds a Hash with a smaller interface from the
9
- # decorated response
10
- #
11
- # @param [Hash] hash
12
- # @return [Hash]
13
- def alter_object(hash)
14
- new_hash = {}
15
- new_hash[:options] = hash[hash.keys[1]].first[:options]
16
- new_hash
17
- end
18
-
19
- def count
20
- @count ||= self[:options].length
21
- end
22
- end
23
- end
24
- end
@@ -1,15 +0,0 @@
1
- module ElasticAdapter
2
- module Decoration
3
- # Used to decorate responses from the elasticseach suggest api.
4
- # Delegates to a Boolean
5
- class ValidationResponse < Decorator
6
- # Returns the validation status from the original hash
7
- #
8
- # @param [Hash] hash
9
- # @return [Hash]
10
- def alter_object(hash)
11
- hash[:valid]
12
- end
13
- end
14
- end
15
- end
@@ -1,51 +0,0 @@
1
- module ElasticAdapter
2
- # Serves to wrap the responses from elasticsearch
3
- class Response < ::ElasticAdapter::Decoration::Decorator
4
- # Checks if the operation was successfull
5
- #
6
- # @return [Boolean]
7
- def success?
8
- !failure?
9
- end
10
-
11
- # Checks if the operation failed
12
- #
13
- # @return [Boolean]
14
- def failure?
15
- key?(:exception)
16
- end
17
-
18
- private
19
-
20
- # Sanitizes a nested hash. It removes leading underscores
21
- # from keys and turns them into symbols. This methods gets
22
- # overridden by other response decorators.
23
- #
24
- # @param [Hash] hash
25
- # @return [Hash]
26
- def alter_object(object)
27
- return object unless [Hash, Array].include? object.class
28
-
29
- object.inject({}) do |result, (key, value)|
30
- new_value = nil
31
-
32
- case value
33
- when Hash
34
- new_value = alter_object(value)
35
- when Array
36
- new_value = value.map { |i| alter_object(i) }
37
- else
38
- new_value = value
39
- end
40
-
41
- result[remove_leading_underscore(key).to_sym] = new_value
42
-
43
- result
44
- end
45
- end
46
-
47
- def remove_leading_underscore(string)
48
- /^_?(.*)$/.match(string)[1]
49
- end
50
- end
51
- end
@@ -1,64 +0,0 @@
1
- require "spec_helper"
2
-
3
- module ElasticAdapter
4
- describe Response do
5
- describe "delegation" do
6
- let(:hash) { { foo: "bar" } }
7
- let(:response) { Response.new(hash) }
8
-
9
- describe "#original_object" do
10
- it "returns the original hash" do
11
- expect(response.original_object).to be hash
12
- end
13
- end
14
-
15
- describe "object" do
16
- it "returns the sanitized hash" do
17
- expect(response.object).to eq({ foo: "bar" })
18
- end
19
- end
20
- end
21
-
22
- describe "sanitization" do
23
- it "turns all strings in Hash keys to symbols" do
24
- hash = {"foo" => "bar"}
25
- response = Response.new(hash)
26
- expect(response.keys.first).to be_a Symbol
27
- end
28
-
29
- it "removes all leading underscores from keys" do
30
- hash = {"_foo" => {"_bar" => "baz" }}
31
- expected = {foo: {bar: "baz" }}
32
- response = Response.new(hash)
33
- expect(response.object).to eq expected
34
- end
35
-
36
- it "works with arrays" do
37
- hash = { "foo" => ["bar", "buz"] }
38
- expected = { foo: ["bar", "buz"] }
39
- response = Response.new(hash)
40
- expect(response.object).to eq expected
41
- end
42
- end
43
-
44
- describe "#failure?" do
45
- context "no exception" do
46
- let(:hash) { { foo: "bar" } }
47
- let(:response) { Response.new(hash) }
48
-
49
- it "returns false" do
50
- expect(response.failure?).to be false
51
- end
52
- end
53
-
54
- context "with exception" do
55
- let(:hash) { { foo: "bar", exception: ArgumentError.new("foo") } }
56
- let(:response) { Response.new(hash) }
57
-
58
- it "returns true" do
59
- expect(response.failure?).to be true
60
- end
61
- end
62
- end
63
- end
64
- end