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