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 ⇒ Object
How many times to retry for a success.
-
#test_name ⇒ Object
Name used for displaying class.
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.
-
#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
Whether to keep making request until success code reached.
-
#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, #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’
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/soaspec/exchange/exchange.rb', line 51 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 = 3 @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
21 22 23 |
# File 'lib/soaspec/exchange/exchange.rb', line 21 def exchange_handler @exchange_handler end |
#fail_factory=(value) ⇒ Object (writeonly)
Expect Factory to fail upon trying to create
27 28 29 |
# File 'lib/soaspec/exchange/exchange.rb', line 27 def fail_factory=(value) @fail_factory = value end |
#override_parameters ⇒ Object
Parameters to override for default params
29 30 31 |
# File 'lib/soaspec/exchange/exchange.rb', line 29 def override_parameters @override_parameters end |
#retry_count ⇒ Object
How many times to retry for a success
23 24 25 |
# File 'lib/soaspec/exchange/exchange.rb', line 23 def retry_count @retry_count end |
#test_name ⇒ Object
Name used for displaying class
25 26 27 |
# File 'lib/soaspec/exchange/exchange.rb', line 25 def test_name @test_name 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.
110 111 112 113 114 115 116 |
# File 'lib/soaspec/exchange/exchange.rb', line 110 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
45 |
# File 'lib/soaspec/exchange/exchange.rb', line 45 def default_handler_used; end |
#make_request ⇒ Response
Make request to handler with parameters defined Will retry until success code reached if retry_for_success? is set
72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/soaspec/exchange/exchange.rb', line 72 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 unless retry_for_success? return response if (200..299).cover? exchange_handler.status_code_for(response) sleep 0.5 # Time before retrying break response if count == retry_count end end |
#request_parameters ⇒ Hash
Returns Hash representing what will be sent.
65 66 67 |
# File 'lib/soaspec/exchange/exchange.rb', line 65 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
98 99 100 101 102 103 104 105 106 |
# File 'lib/soaspec/exchange/exchange.rb', line 98 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
33 34 35 36 |
# File 'lib/soaspec/exchange/exchange.rb', line 33 def retry_for_success @retry_for_success = true self end |
#retry_for_success? ⇒ Bool
Returns Whether to keep making request until success code reached.
39 40 41 |
# File 'lib/soaspec/exchange/exchange.rb', line 39 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
88 89 90 |
# File 'lib/soaspec/exchange/exchange.rb', line 88 def to_s test_name end |