lib/soaspec/exchange.rb in soaspec-0.0.63 vs lib/soaspec/exchange.rb in soaspec-0.0.64

- old
+ new

@@ -31,19 +31,29 @@ @api_class ||= Soaspec.api_handler # This uses the global parameter. The handler should be set straight before an exchange is made @override_parameters = override_parameters @retry_for_success = false self.retry_count = 3 @api_class.elements.each do |element| - define_singleton_method(element.to_s.split('__custom_path_').last) do + element_name = element.to_s.split('__custom_path_').last + define_singleton_method(element_name) do @api_class.__send__(element, response) # Forward the call onto handler to retrieve the element for the response end + define_singleton_method("#{element_name}?") do + begin + __send__ element_name + true + rescue NoElementAtPath + false + end + end end end # Merge exchange initialized request params with ones set later on def merge_request_body - if @override_parameters[:body] + if @override_parameters[:body] || default_params[:body] + @override_parameters[:body] ||= {} @override_parameters[:body].merge!(default_params[:body]) @override_parameters else @override_parameters.merge(default_params[:body]) end @@ -109,9 +119,17 @@ true rescue Savon::HTTPError puts 'Resolver error' # This seems to occur first time IP address asks for WSDL true + end + + # @return [Boolean] Whether an element exists at the path + def element?(path) + [path] + true + rescue NoElementAtPath + false end # Extract value from path api class # @param [Object] path Path to return element for api class E.g - for SOAP this is XPath string. For JSON, this is Hash dig Array # @return [String] Value at path \ No newline at end of file