class QuestBack::Response

Public: Simple proxy object decorating Savon's response.

Main motication for class is to have result and results as a common interface to get to respons' result(s), with all outer response nesting removed.

At the moment you are still getting back simple hashes from both methods.

Attributes

operation_name[R]
result_key_nestings[R]
savon_response[R]

Public Class Methods

new(savon_response, options = {}) click to toggle source
# File lib/quest_back/response.rb, line 14
def initialize(savon_response, options = {})
  @savon_response = savon_response
  @operation_name = options[:operation_name] or fail ArgumentError.new('Missing operation_name')
  @result_key_nestings = options[:result_key_nestings] or fail ArgumentError.new('Missing result key nestings')
end

Public Instance Methods

result() click to toggle source
# File lib/quest_back/response.rb, line 20
def result
  extract_result.tap do |result|
    fail QuestBack::Error::MultipleResultsFound if result.is_a? Array
  end
end
results() click to toggle source
# File lib/quest_back/response.rb, line 26
def results
  Array.wrap extract_result
end

Private Instance Methods

extract_result() click to toggle source
# File lib/quest_back/response.rb, line 35
def extract_result
  result_container = savon_response.body["#{operation_name}_response".to_sym]["#{operation_name}_result".to_sym]

  result = result_key_nestings.inject(result_container) do |result, key|
    result.fetch key do
      fail KeyError, "Expected #{result.inspect} to contain #{key_in_body}. Respons' result_key_nestings is wrong, or unexpected result from QuestBack."
    end
  end
end