Sha256: 93845655964a610bd4de6e5299b7f0d2abac90870c383fdb44a2674396c88f09

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
soaspec-0.2.14 lib/soaspec/exchange/exchange_extractor.rb
soaspec-0.2.13 lib/soaspec/exchange/exchange_extractor.rb
soaspec-0.2.12 lib/soaspec/exchange/exchange_extractor.rb
soaspec-0.2.11 lib/soaspec/exchange/exchange_extractor.rb