module Soaspec::HandlerAccessors

Describes methods test handlers use to easily set attributes Some are included in 'success scenarios' and to configure the request sent

Public Instance Methods

attribute(name, attribute = nil) click to toggle source

Links an attribute to a meaningful method that can be accessed from Exchange class. This will use the 'value_from_path' method which should be implemented by each ExchangeHandler @param [String, Symbol] name Method name used to access attribute @param [String, nil, Hash] attribute Attribute name to extract from xml. If not set, this will default to @name

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 84
def attribute(name, attribute = nil)
  attribute_used = attribute || name.to_s
  define_method("__custom_path_#{name}") do |response|
    value_from_path(response, 'implicit', attribute: attribute_used)
  end
end
convert_to_lower(set) click to toggle source

All xpath will be done with XML that is converted to lower case You must then use lower case in the xpath's to obtain the desired values @param [Boolean] set Whether to convert all xml in response to lower case before performing XPath

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 94
def convert_to_lower(set)
  return unless set

  define_method('convert_to_lower?') { true }
end
default_hash(hash) click to toggle source

Set the default hash representing data to be used in making a request This will set the @request_option instance variable too @param [Hash] hash Default hash of request

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 115
def default_hash(hash)
  define_method('default_hash_value') do
    @request_option = :hash
    Soaspec.always_use_keys? ? hash.transform_keys_to_symbols : hash
  end
end
element(name, path) click to toggle source

Links a particular path to a meaningful method that can be accessed from Exchange class. This will use the 'value_from_path' method which should be implemented by each ExchangeHandler @param [String, Symbol] name Method name used to access element @param [String, Symbol] path Path to find object (e.g, XPath, JSONPath).

For JSONPath a ',' can be put to get an element either path
# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 73
def element(name, path)
  define_method("__custom_path_#{name}") do |response|
    value_from_path(response, path.to_s)
  end
end
mandatory_elements(elements) click to toggle source

Defines expected_mandatory_elements method used in 'success_scenario' shared examples to indicate certain elements must be present @param [Array] elements Array of symbols specifying expected element names for 'success scenario' in snakecase

@example Inside class

mandatory_elements :GetWeatherResult

Or for a list

@example Inside class

mandatory_elements [:GetWeatherResult, :GetResultStatus]

In test describe Exchange(:name) do

it_behaves_like 'success scenario' # Includes checks for mandatory elements

end

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 23
def mandatory_elements(elements)
  define_method('expected_mandatory_elements') do
    return [elements] if elements.is_a?(String) || elements.is_a?(Symbol)

    elements
  end
end
mandatory_json_values(json_value_pairs) click to toggle source

Defines mandatory json path value pairs to be included in 'success scenario' shared example

@example Inside class

mandatory_json_values '$..GetWeatherResult' => 'Found'

@example In test

describe Exchange(:name) do
  it_behaves_like 'success scenario' # Includes json pair validation
end

@param [Hash] json_value_pairs Hash of element => expected value that must appear

in a successful response body
# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 61
def mandatory_json_values(json_value_pairs)
  raise ArgumentError("Hash of {'jsonpath' => expected values} expected") unless json_value_pairs.is_a? Hash

  define_method('expected_mandatory_json_values') { json_value_pairs }
end
mandatory_xpath_values(xpath_value_pairs) click to toggle source

Defines mandatory xpaths value pairs to be included in 'success scenario' shared example

@example Inside class

mandatory_xpath_values '//xmlns:GetWeatherResult' => 'Data Not Found'

@example In test

describe Exchange(:name) do
  it_behaves_like 'success scenario' # Includes xpath pair validation
end

@param [Hash] xpath_value_pairs Hash of element => expected value that must appear

in a successful response body
# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 43
def mandatory_xpath_values(xpath_value_pairs)
  raise ArgumentError('Hash of {xpath => expected values} expected ') unless xpath_value_pairs.is_a? Hash

  define_method('expected_mandatory_xpath_values') { xpath_value_pairs }
end
strip_namespaces(set) click to toggle source

Whether to remove namespaces from response in Xpath assertion automatically For why this may not be a good thing in general see tenderlovemaking.com/2009/04/23/namespaces-in-xml.html This will be overridden if xpath has a ':' in it @param [Boolean] set Whether to strip namespaces form XML response

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 105
def strip_namespaces(set)
  return unless set

  # Whether to remove namespaces in xpath assertion automatically
  define_method('strip_namespaces?') { true }
end
template_name(name) click to toggle source

Set the request option type and the template name Erb is used to parse the template file, executing Ruby code in `<%= %>` blocks to work out the final request @param [String] name Name of file inside 'template' folder excluding extension

# File lib/soaspec/exchange_handlers/handler_accessors.rb, line 125
def template_name(name)
  define_method('template_name_value') do
    @request_option = :template
    name
  end
end