module Soaspec # Methods for extracting aspects of the traffic for a request / response # in an exchange from the ExchangeHandler that it's tied to module ExchangeExtractor # @param [String] path XPath, JSONPath to extract value # @param [String] attribute Attribute to obtain from XML element # @return [Array] List of values found at path def values_from_path(path, attribute: nil) exchange_handler.values_from_path(response, path, attribute: attribute) end # Request of API call. Either intended request or actual request def request exchange_handler.request(@response) end # Get status code from api class. This is http response for Web Api # @return [Integer] Status code from api class def status_code exchange_handler.status_code_for(response) end # @return [Boolean] Whether an element exists at the path def element?(path) self[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 def [](path) exchange_handler.value_from_path(response, path.to_s) end # @param [String] element Element to define methods for def methods_for_element(element) element_name = element.to_s.split('__custom_path_').last define_singleton_method(element_name) do exchange_handler.__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 # @return [Hash] Hash representing the response of the API def to_hash exchange_handler.to_hash(response) end end end