Class: Exchange
- Inherits:
-
Object
- Object
- Exchange
- Extended by:
- Soaspec::ExchangeProperties
- Includes:
- Soaspec::ExchangeExtractor, Soaspec::ExchangeRepeater, Soaspec::RequestBuilder, Soaspec::VariableStorer
- Defined in:
- lib/soaspec/exchange/exchange.rb
Overview
This represents a request / response pair Essentially, params in the exchange that are set are related to the request What is returned is related to the response
It is tied to an ExchangeHandler that needs to be defined either globally before it’s created or in ‘default_handler_used’
Instance Attribute Summary collapse
-
#exchange_handler ⇒ Object
Instance of ExchangeHandler for which this exchange is made.
-
#fail_factory ⇒ Object
writeonly
Expect Factory to fail upon trying to create.
-
#override_parameters ⇒ Object
Parameters to override for default params.
-
#retry_count ⇒ Integer
How many times to retry for a success.
-
#test_name ⇒ Object
@@return [String] Name used for displaying class.
-
#times_retried ⇒ Integer
Times request was retried before being returned.
Instance Method Summary collapse
-
#call ⇒ ResponseObject
Currently returning response object.
-
#default_handler_used ⇒ Soaspec::ExchangeHandler
Override this in subclass to tie that subclass to an ExchangeHandler.
-
#initialize(name = self.class.to_s, override_parameters = {}) ⇒ Exchange
constructor
Create new Exchange according to parameters set.
-
#invalid_exception? ⇒ Boolean
Defined as general rule from ExchangeHandler.
-
#make_request ⇒ Response
Make request to handler with parameters defined Will retry until success code reached if retry_for_success? is set.
-
#request_parameters ⇒ Hash
Hash representing what will be sent.
-
#response ⇒ RestClient::Response, Savon::Response
Returns response object from Api.
-
#retry_for_success ⇒ Object
Set retry for success variable to true so that request will be retried for retry_count until it’s true.
-
#retry_for_success? ⇒ Bool
This is set on an individual Exchange marking it as one that should be retried.
-
#to_s ⇒ String
Name describing this class when used with ‘RSpec.describe` This will make the request and store the response.
Methods included from Soaspec::ExchangeProperties
default_handler, expect_positive_status
Methods included from Soaspec::VariableStorer
Methods included from Soaspec::ExchangeRepeater
Methods included from Soaspec::RequestBuilder
#[]=, #method=, #method_missing, #respond_to_missing?, #save!, #suburl=
Methods included from Soaspec::ExchangeExtractor
#[], #element?, #request, #status_code, #successful_status_code?, #to_hash, #values_from_path
Constructor Details
#initialize(name = self.class.to_s, override_parameters = {}) ⇒ Exchange
Create new Exchange according to parameters set. A response will be made if called explicitly with ‘response’ method or through other methods that use it like ‘status_code’
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/soaspec/exchange/exchange.rb', line 62 def initialize(name = self.class.to_s, override_parameters = {}) self.test_name ||= name.to_s # As a last resort this uses the global parameter. The handler should be set straight before an exchange is made to use this @exchange_handler ||= default_handler_used || Soaspec.api_handler raise '@exchange_handler not set. Set either with `Soaspec.api_handler = Handler.new` or within the exchange' unless @exchange_handler @fail_factory = nil @override_parameters = override_parameters @retry_for_success = false self.retry_count = exchange_handler.retry_exception_limit exchange_handler.elements.each { |element| methods_for_element(element) } end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Soaspec::RequestBuilder
Instance Attribute Details
#exchange_handler ⇒ Object
Instance of ExchangeHandler for which this exchange is made
23 24 25 |
# File 'lib/soaspec/exchange/exchange.rb', line 23 def exchange_handler @exchange_handler end |
#fail_factory=(value) ⇒ Object (writeonly)
Expect Factory to fail upon trying to create
31 32 33 |
# File 'lib/soaspec/exchange/exchange.rb', line 31 def fail_factory=(value) @fail_factory = value end |
#override_parameters ⇒ Object
Parameters to override for default params
33 34 35 |
# File 'lib/soaspec/exchange/exchange.rb', line 33 def override_parameters @override_parameters end |
#retry_count ⇒ Integer
Returns How many times to retry for a success.
25 26 27 |
# File 'lib/soaspec/exchange/exchange.rb', line 25 def retry_count @retry_count end |
#test_name ⇒ Object
@@return [String] Name used for displaying class
29 30 31 |
# File 'lib/soaspec/exchange/exchange.rb', line 29 def test_name @test_name end |
#times_retried ⇒ Integer
Returns Times request was retried before being returned.
27 28 29 |
# File 'lib/soaspec/exchange/exchange.rb', line 27 def times_retried @times_retried end |
Instance Method Details
#call ⇒ ResponseObject
Returns Currently returning response object. This will change (in 0.3) to be itself to allow easy method chaining.
122 123 124 125 126 127 128 |
# File 'lib/soaspec/exchange/exchange.rb', line 122 def call if Soaspec.log_warnings warn 'This "call" method will be changed to return "Exchange" object in 0.3. ' \ 'Use "response" method if you want the "response" object' end response end |
#default_handler_used ⇒ Soaspec::ExchangeHandler
Override this in subclass to tie that subclass to an ExchangeHandler
56 |
# File 'lib/soaspec/exchange/exchange.rb', line 56 def default_handler_used; end |
#invalid_exception? ⇒ Boolean
Defined as general rule from ExchangeHandler
50 51 52 |
# File 'lib/soaspec/exchange/exchange.rb', line 50 def invalid_exception? !exchange_handler.retry_on_exceptions.find { |e| e == exchange_handler.exception.class }.nil? end |
#make_request ⇒ Response
Make request to handler with parameters defined Will retry until success code reached if retry_for_success? is set
83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/soaspec/exchange/exchange.rb', line 83 def make_request Soaspec::SpecLogger.info 'Example ' + test_name request_params = @override_parameters (0..retry_count).each do |count| response = exchange_handler.make_request(request_params) return response if !retry_for_success? && !invalid_exception? return response if (200..299).cover? exchange_handler.status_code_for(response) sleep exchange_handler.retry_pause_time # Time before retrying self.times_retried = count break response if count == retry_count end end |
#request_parameters ⇒ Hash
Returns Hash representing what will be sent.
76 77 78 |
# File 'lib/soaspec/exchange/exchange.rb', line 76 def request_parameters exchange_handler.request_parameters(@override_parameters) end |
#response ⇒ RestClient::Response, Savon::Response
Returns response object from Api. Will make the request if not made and then cache it for later on
110 111 112 113 114 115 116 117 118 |
# File 'lib/soaspec/exchange/exchange.rb', line 110 def response require 'forwardable' Soaspec.last_exchange = self @response ||= make_request @response.define_singleton_method(:exchange) { Soaspec.last_exchange } unless @response.respond_to?(:exchange) @response.extend Forwardable @response.delegate i[value_from_path values_from_path] => :exchange @response end |
#retry_for_success ⇒ Object
Set retry for success variable to true so that request will be retried for retry_count until it’s true
37 38 39 40 |
# File 'lib/soaspec/exchange/exchange.rb', line 37 def retry_for_success @retry_for_success = true self end |
#retry_for_success? ⇒ Bool
This is set on an individual Exchange marking it as one that should be retried
44 45 46 |
# File 'lib/soaspec/exchange/exchange.rb', line 44 def retry_for_success? @retry_for_success end |
#to_s ⇒ String
Name describing this class when used with ‘RSpec.describe` This will make the request and store the response
100 101 102 |
# File 'lib/soaspec/exchange/exchange.rb', line 100 def to_s test_name end |