Class: Noiseless::Response::Base

Inherits:
Object
  • Object
show all
Includes:
Enumerable, Pagination::ResponsePagination
Defined in:
lib/noiseless/response.rb

Direct Known Subclasses

MultiSearchResponse, Empty, Records, Results

Instance Method Summary collapse

Methods included from Pagination::ResponsePagination

#current_page, #first_page?, #last_page?, #limit_value, #next_page, #offset_value, #out_of_range?, #pagination_metadata, #prev_page, #total_pages

Constructor Details

#initialize(raw_response, model_class = nil) ⇒ Base

Returns a new instance of Base.



9
10
11
12
# File 'lib/noiseless/response.rb', line 9

def initialize(raw_response, model_class = nil)
  @raw_response = raw_response
  @model_class = model_class
end

Instance Method Details

#aggregationsObject



33
34
35
# File 'lib/noiseless/response.rb', line 33

def aggregations
  @aggregations ||= Aggregations.new(@raw_response["aggregations"] || {})
end

#countObject



79
80
81
# File 'lib/noiseless/response.rb', line 79

def count
  size
end

#eachObject

Raises:

  • (NotImplementedError)


41
42
43
# File 'lib/noiseless/response.rb', line 41

def each(&)
  raise NotImplementedError, "Subclasses must implement #each"
end

#each_with_indexObject



87
88
89
90
91
# File 'lib/noiseless/response.rb', line 87

def each_with_index(&)
  return enum_for(__method__) unless block_given?

  each.with_index(&)
end

#empty?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/noiseless/response.rb', line 45

def empty?
  total.zero?
end

#hitsObject



25
26
27
# File 'lib/noiseless/response.rb', line 25

def hits
  @hits ||= @raw_response.dig("hits", "hits") || []
end

#include_pagination_info(query_hash) ⇒ Object



55
56
57
58
# File 'lib/noiseless/response.rb', line 55

def include_pagination_info(query_hash)
  @from = query_hash[:from] || 0
  @per_page = query_hash[:size] || 20
end

#lengthObject



51
52
53
# File 'lib/noiseless/response.rb', line 51

def length
  size
end

#responseObject

Compatibility methods for CommonShare



61
62
63
# File 'lib/noiseless/response.rb', line 61

def response
  @raw_response
end

#resultObject



65
66
67
68
# File 'lib/noiseless/response.rb', line 65

def result
  # Alias for results - controllers expect .result
  results
end

#resultsObject



70
71
72
73
74
75
76
77
# File 'lib/noiseless/response.rb', line 70

def results
  # For Results class, return self. For Records, return a Results view
  if is_a?(Results)
    self
  else
    Results.new(@raw_response, @model_class)
  end
end

#suggestionsObject



37
38
39
# File 'lib/noiseless/response.rb', line 37

def suggestions
  @suggestions ||= Suggestions.new(@raw_response["suggest"] || {})
end

#tookObject



29
30
31
# File 'lib/noiseless/response.rb', line 29

def took
  @raw_response["took"]
end

#totalObject



14
15
16
17
18
19
20
21
22
23
# File 'lib/noiseless/response.rb', line 14

def total
  case @raw_response.dig("hits", "total")
  when Hash
    @raw_response.dig("hits", "total", "value") || 0
  when Integer
    @raw_response.dig("hits", "total") || 0
  else
    0
  end
end

#total_countObject



83
84
85
# File 'lib/noiseless/response.rb', line 83

def total_count
  total
end