Class: VCR::Cassette::HTTPInteractionList
- Inherits:
-
Object
- Object
- VCR::Cassette::HTTPInteractionList
- Includes:
- Logger::Mixin
- Defined in:
- lib/vcr/cassette/http_interaction_list.rb
Defined Under Namespace
Modules: NullList
Instance Attribute Summary collapse
-
#allow_playback_repeats ⇒ Object
readonly
Returns the value of attribute allow_playback_repeats.
-
#interactions ⇒ Object
readonly
Returns the value of attribute interactions.
-
#parent_list ⇒ Object
readonly
Returns the value of attribute parent_list.
-
#request_matchers ⇒ Object
readonly
Returns the value of attribute request_matchers.
Instance Method Summary collapse
-
#assert_no_unused_interactions! ⇒ Object
Checks if there are no unused interactions left.
- #has_interaction_matching?(request) ⇒ Boolean
- #has_used_interaction_matching?(request) ⇒ Boolean
-
#initialize(interactions, request_matchers, allow_playback_repeats = false, parent_list = NullList, log_prefix = '') ⇒ HTTPInteractionList
constructor
A new instance of HTTPInteractionList.
- #remaining_unused_interaction_count ⇒ Object
- #response_for(request) ⇒ Object
Methods included from Logger::Mixin
Constructor Details
#initialize(interactions, request_matchers, allow_playback_repeats = false, parent_list = NullList, log_prefix = '') ⇒ HTTPInteractionList
Returns a new instance of HTTPInteractionList.
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 18 def initialize(interactions, request_matchers, allow_playback_repeats = false, parent_list = NullList, log_prefix = '') @interactions = interactions.dup @request_matchers = request_matchers @allow_playback_repeats = allow_playback_repeats @parent_list = parent_list @used_interactions = [] @log_prefix = log_prefix @mutex = Mutex.new interaction_summaries = interactions.map { |i| "#{request_summary(i.request)} => #{response_summary(i.response)}" } log "Initialized HTTPInteractionList with request matchers #{request_matchers.inspect} and #{interactions.size} interaction(s): { #{interaction_summaries.join(', ')} }", 1 end |
Instance Attribute Details
#allow_playback_repeats ⇒ Object (readonly)
Returns the value of attribute allow_playback_repeats.
16 17 18 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 16 def allow_playback_repeats @allow_playback_repeats end |
#interactions ⇒ Object (readonly)
Returns the value of attribute interactions.
16 17 18 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 16 def interactions @interactions end |
#parent_list ⇒ Object (readonly)
Returns the value of attribute parent_list.
16 17 18 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 16 def parent_list @parent_list end |
#request_matchers ⇒ Object (readonly)
Returns the value of attribute request_matchers.
16 17 18 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 16 def request_matchers @request_matchers end |
Instance Method Details
#assert_no_unused_interactions! ⇒ Object
Checks if there are no unused interactions left.
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 65 def assert_no_unused_interactions! return unless has_unused_interactions? logger = Logger.new(nil) descriptions = @interactions.map do |i| " - #{logger.request_summary(i.request, @request_matchers)} => #{logger.response_summary(i.response)}" end.join("\n") raise Errors::UnusedHTTPInteractionError, "There are unused HTTP interactions left in the cassette:\n#{descriptions}" end |
#has_interaction_matching?(request) ⇒ Boolean
48 49 50 51 52 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 48 def has_interaction_matching?(request) !!matching_interaction_index_for(request) || !!matching_used_interaction_for(request) || @parent_list.has_interaction_matching?(request) end |
#has_used_interaction_matching?(request) ⇒ Boolean
54 55 56 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 54 def has_used_interaction_matching?(request) @used_interactions.any? { |i| interaction_matches_request?(request, i) } end |
#remaining_unused_interaction_count ⇒ Object
58 59 60 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 58 def remaining_unused_interaction_count @interactions.size end |
#response_for(request) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/vcr/cassette/http_interaction_list.rb', line 31 def response_for(request) # Without this mutex, under threaded access, the wrong response may be removed # out of the (remaining) interactions list (and other problems). @mutex.synchronize do if index = matching_interaction_index_for(request) interaction = @interactions.delete_at(index) @used_interactions.unshift interaction log "Found matching interaction for #{request_summary(request)} at index #{index}: #{response_summary(interaction.response)}", 1 interaction.response elsif interaction = matching_used_interaction_for(request) interaction.response else @parent_list.response_for(request) end end end |