class Soaspec::ExchangeHandler

Inherit this for a class describing how to implement a particular exchange. Has methods common to Soaspec framework for working with Exchange/Handler pair

Attributes

exception[RW]

@return [Exception] Exception if raised

request_option[RW]

@return [Symbol] Option used to generate Request Body. Either :hash or :template

template_name[R]

@return [String] Name of the template file to be used in the API request

Public Class Methods

new(name = self.class.to_s, _options = {}) click to toggle source

Set instance variable name @param [String, Symbol] name Name used when describing API test @param [Hash] _options Parameters defining handler. Used in descendants

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 36
def initialize(name = self.class.to_s, _options = {})
  use
  self.request_option = :hash
  raise ArgumentError, 'Cannot define both template_name and default_hash' if respond_to?(:template_name_value) && respond_to?(:default_hash_value)

  @template_name = respond_to?(:template_name_value) ? template_name_value : ''
  @default_hash = respond_to?(:default_hash_value) ? default_hash_value : {}
  @name = name
end
use() click to toggle source

Use an instance of this ExchangeHandler in any further Exchange's This is a convenience method as it creates an ExchangeHandler behind the scenes @return [ExchangeHandler] Exchange handler instance created

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 19
def self.use
  new.use
end

Public Instance Methods

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 Hash to send in request body by default

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 63
def default_hash=(hash)
  self.request_option = :hash
  @default_hash = Soaspec.always_use_keys? ? hash.transform_keys_to_symbols : hash
end
elements() click to toggle source

Explicitly defined elements for which a path has been predefined

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 29
def elements
  public_methods.select { |i| i[/__custom_path_.+/] }
end
set_remove_key(hash, key) click to toggle source

Set instance variable and remove it from Hash @param [Hash] hash Hash to remove/retrieve keys from @param [String,Symbol] key Key to remove and to set instance variable for

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 93
def set_remove_key(hash, key)
  return unless hash.key? key

  __send__("#{key}=", hash[key])
  hash.delete key
end
set_remove_keys(hash, keys) click to toggle source

Set instance variable for each key in hash remove it from Hash @param [Hash] hash with items to remove from @param [Array] keys List of keys to remove from hash, setting each one

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 86
def set_remove_keys(hash, keys)
  keys.each { |key| set_remove_key(hash, key) }
end
store(name, value) click to toggle source

Stores a value in a method that can be accessed by the provided name @param [Symbol] name Name of method to use to access this value within handler @param [String] value Value to store

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 79
def store(name, value)
  define_singleton_method('__stored_val__' + name.to_s) { value }
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/exchange_handler.rb, line 71
def template_name=(name)
  self.request_option = :template
  @template_name = name
end
to_s() click to toggle source

Sets api handler variable globally. This is used in 'Exchange' class @return [String] Name set upon initialisation

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 55
def to_s
  use
  @name.to_s
end
use() click to toggle source

Set Api handler used by Exchange class to this handler @return [Self]

# File lib/soaspec/exchange_handlers/exchange_handler.rb, line 48
def use
  Soaspec.api_handler = self
  self
end