Module: Soaspec::HandlerAccessors

Included in:
ExchangeHandler
Defined in:
lib/soaspec/exchange_handlers/handler_accessors.rb

Overview

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

Instance Method Summary collapse

Instance Method Details

#attribute(name, attribute = nil) ⇒ Object

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

Parameters:

  • name (String, Symbol)

    Method name used to access attribute

  • attribute (String, nil, Hash) (defaults to: nil)

    Attribute name to extract from xml. If not set, this will default to @name



77
78
79
80
81
82
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 77

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) ⇒ Object

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



86
87
88
89
90
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 86

def convert_to_lower(set)
  return unless set

  define_method('convert_to_lower?') { true }
end

#default_hash(hash) ⇒ Object

Set the default hash representing data to be used in making a request This will set the @request_option instance variable too

Parameters:

  • hash (Hash)

    Default hash of request



106
107
108
109
110
111
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 106

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) ⇒ Object

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

Parameters:

  • name (String, Symbol)

    Method name used to access element

  • path (String, Symbol)

    Path to find object (e.g, XPath, JSONPath)



66
67
68
69
70
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 66

def element(name, path)
  define_method("__custom_path_#{name}") do |response|
    value_from_path(response, path.to_s)
  end
end

#mandatory_elements(elements) ⇒ Object

Defines expected_mandatory_elements method used in ‘success_scenario’ shared examples to indicate certain elements must be present Or for a list

In test describe Exchange(:name) do

it_behaves_like 'success scenario' # Includes checks for mandatory elements

end

Examples:

Inside class

mandatory_elements :GetWeatherResult

Inside class

mandatory_elements [:GetWeatherResult, :GetResultStatus]

Parameters:

  • elements (Array)

    Array of symbols specifying expected element names for ‘success scenario’ in snakecase



21
22
23
24
25
26
27
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 21

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) ⇒ Object

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

In test describe Exchange(:name) do

it_behaves_like 'success scenario' # Includes json pair validation

end

Examples:

Inside class

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


55
56
57
58
59
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 55

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) ⇒ Object

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

In test describe Exchange(:name) do

it_behaves_like 'success scenario' # Includes xpath pair validation

end

Examples:

Inside class

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


39
40
41
42
43
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 39

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) ⇒ Object

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



96
97
98
99
100
101
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 96

def strip_namespaces(set)
  return unless set

  # Whether to remove namespaces in xpath assertion automatically
  define_method('strip_namespaces?') { true }
end

#template_name(name) ⇒ Object

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

Parameters:

  • name (String)

    Name of file inside ‘template’ folder excluding extension



116
117
118
119
120
121
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 116

def template_name(name)
  define_method('template_name_value') do
    @request_option = :template
    name
  end
end