lib/soaspec/exchange/exchange.rb in soaspec-0.2.23 vs lib/soaspec/exchange/exchange.rb in soaspec-0.2.24
- old
+ new
@@ -1,111 +1,111 @@
-require_relative '../../soaspec'
-require_relative 'exchange_properties'
-require_relative 'exchange_extractor'
-require_relative 'request_builder'
-require_relative 'exchange_repeater'
-require_relative 'variable_storer'
-
-# 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
-class Exchange
- extend Soaspec::ExchangeProperties
- include Soaspec::ExchangeExtractor
- include Soaspec::RequestBuilder
- include Soaspec::ExchangeRepeater
- include Soaspec::VariableStorer
-
- # Instance of ExchangeHandler for which this exchange is made
- attr_accessor :exchange_handler
- # How many times to retry for a success
- attr_accessor :retry_count
- # Name used for displaying class
- attr_accessor :test_name
- # Expect Factory to fail upon trying to create
- attr_writer :fail_factory
- # Parameters to override for default params
- attr_accessor :override_parameters
-
- # Set retry for success variable to true so that request will be retried
- # for retry_count until it's true
- def retry_for_success
- @retry_for_success = true
- self
- end
-
- # @return [Bool] Whether to keep making request until success code reached
- def retry_for_success?
- @retry_for_success
- end
-
- # @return [Boolean] Soaspec::ExchangeHandler used by this exchange
- def default_handler_used
- nil
- end
-
- # 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'
- # @param [Symbol, String] name Name shown in RSpec run
- # @param [Hash] override_parameters Parameters to override for default params
- 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
-
- # Make request to handler with parameters defined
- # Will retry until success code reached if retry_for_success? is set
- # @return [Response] Response from Api handler
- 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
-
- # Name describing this class when used with `RSpec.describe`
- # This will make the request and store the response
- # @return [String] Name given when initializing
- def to_s
- test_name
- end
-
- # @return [RestClient::Response,Savon::Response] Returns response object from Api.
- # Will make the request if not made and then cache it for later on
- # @example For SOAP it will be a Savon response
- # response.body (body of response as Hash)
- # response.header (head of response as Hash)
- # @example For REST it will be a RestClient::Response
- 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
-
- # @return [ResponseObject] Currently returning response object. This will change (in 0.3) to be itself to
- # allow easy method chaining
- 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
-end
+require_relative '../../soaspec'
+require_relative 'exchange_properties'
+require_relative 'exchange_extractor'
+require_relative 'request_builder'
+require_relative 'exchange_repeater'
+require_relative 'variable_storer'
+
+# 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
+class Exchange
+ extend Soaspec::ExchangeProperties
+ include Soaspec::ExchangeExtractor
+ include Soaspec::RequestBuilder
+ include Soaspec::ExchangeRepeater
+ include Soaspec::VariableStorer
+
+ # Instance of ExchangeHandler for which this exchange is made
+ attr_accessor :exchange_handler
+ # How many times to retry for a success
+ attr_accessor :retry_count
+ # Name used for displaying class
+ attr_accessor :test_name
+ # Expect Factory to fail upon trying to create
+ attr_writer :fail_factory
+ # Parameters to override for default params
+ attr_accessor :override_parameters
+
+ # Set retry for success variable to true so that request will be retried
+ # for retry_count until it's true
+ def retry_for_success
+ @retry_for_success = true
+ self
+ end
+
+ # @return [Bool] Whether to keep making request until success code reached
+ def retry_for_success?
+ @retry_for_success
+ end
+
+ # @return [Boolean] Soaspec::ExchangeHandler used by this exchange
+ def default_handler_used
+ nil
+ end
+
+ # 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'
+ # @param [Symbol, String] name Name shown in RSpec run
+ # @param [Hash] override_parameters Parameters to override for default params
+ 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
+
+ # Make request to handler with parameters defined
+ # Will retry until success code reached if retry_for_success? is set
+ # @return [Response] Response from Api handler
+ 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
+
+ # Name describing this class when used with `RSpec.describe`
+ # This will make the request and store the response
+ # @return [String] Name given when initializing
+ def to_s
+ test_name
+ end
+
+ # @return [RestClient::Response,Savon::Response] Returns response object from Api.
+ # Will make the request if not made and then cache it for later on
+ # @example For SOAP it will be a Savon response
+ # response.body (body of response as Hash)
+ # response.header (head of response as Hash)
+ # @example For REST it will be a RestClient::Response
+ 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
+
+ # @return [ResponseObject] Currently returning response object. This will change (in 0.3) to be itself to
+ # allow easy method chaining
+ 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
+end