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