class Rack::VCR::Transaction
Public Class Methods
new(req)
click to toggle source
# File lib/rack/vcr/transaction.rb, line 4 def initialize(req) @req = req end
Public Instance Methods
can_replay?()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 13 def can_replay? ::VCR.http_interactions.has_interaction_matching?(vcr_request) end
capture(res)
click to toggle source
# File lib/rack/vcr/transaction.rb, line 8 def capture(res) @res = res ::VCR.record_http_interaction(::VCR::HTTPInteraction.new(vcr_request, vcr_response)) end
replay()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 17 def replay to_rack_response(::VCR.http_interactions.response_for(vcr_request)) end
Private Instance Methods
content_field_hash()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 56 def content_field_hash { "Content-Type" => @req.env["CONTENT_TYPE"], "Content-Length" => @req.env["CONTENT_LENGTH"] }.reject {|k, v| v.nil? or v == "0" } end
headers_hash_from_env()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 48 def headers_hash_from_env fields = @req.env .map { |k, v| [k.to_s, v] } .select {|k, v| k.start_with?('HTTP_') } .collect { |k, v| [normalize_header_field(k), v] } Hash[fields] end
normalize_header_field(k)
click to toggle source
# File lib/rack/vcr/transaction.rb, line 61 def normalize_header_field(k) k.sub(/^HTTP_/, '') .split('_').map(&:capitalize).join('-') end
request_headers()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 44 def request_headers headers_hash_from_env.merge(content_field_hash) end
to_rack_response(res)
click to toggle source
# File lib/rack/vcr/transaction.rb, line 36 def to_rack_response(res) [ res.status.code, Hash[res.headers.map {|k, v| [k, v.join("\n")] }], [res.body], ] end
try_read(body)
click to toggle source
# File lib/rack/vcr/transaction.rb, line 66 def try_read(body) if body b = body.read body.rewind b end end
vcr_request()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 23 def vcr_request @vcr_request ||= ::VCR::Request.new(@req.request_method, @req.url, try_read(@req.body), request_headers) end
vcr_response()
click to toggle source
# File lib/rack/vcr/transaction.rb, line 28 def vcr_response ::VCR::Response.new( ::VCR::ResponseStatus.new(@res.status, nil), @res.headers, @res.body.to_enum.to_a.join(''), ) end