Sha256: a0bb9f0129e5eac46edceca919f2aa62a097ba59243032c1dbd76c162ce1403d
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
require 'savon' require 'observer' module DpdApi module Client class Response include Observable attr_reader :client def initialize(url) @url = url @client = Savon.client(wsdl: @url) end def response(method, params = {}, options = {}) changed builder = ResourceBuilder.new(@client, method, params, options) result = begin builder.resources rescue Savon::SOAPFault => error { errors: error.to_s } end notify_observers(@url, builder.request_params, builder.response_body, result) result end private class ResourceBuilder attr_reader :merged_params, :response_body, :request_params def initialize(client, method, params = {}, options = {}) @client = client @method = method @params = params @namespace = options.delete(:namespace) @merged_params = merge_auth_params end def resources namespace = "#{@method}_response".to_sym @response_body = response.body resources = @response_body[namespace][:return] resources.is_a?(Array) ? resources : [] << resources end private def merge_auth_params auth_params = DpdApi.configuration.auth_params.clone auth_params.deep_merge!(@params) end def response @client.call(@method, message: request) end def request namespace = @namespace || :request @request_params ||= @params.blank? ? @merged_params : { namespace => @merged_params } end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dpd_api-0.1.10 | lib/dpd_api/client/response.rb |