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



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

def attribute(name, attribute = nil)
  attribute_used = attribute ? 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



84
85
86
87
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 84

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



102
103
104
105
106
107
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 102

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)



64
65
66
67
68
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 64

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



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

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'


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

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
# 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



93
94
95
96
97
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 93

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



112
113
114
115
116
117
# File 'lib/soaspec/exchange_handlers/handler_accessors.rb', line 112

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