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