Sha256: 67cf74425f46601cc59050887d835f42af5e83aad078c99a64a0698025d5acd4
Contents?: true
Size: 1.69 KB
Versions: 4
Compression:
Stored size: 1.69 KB
Contents
module Rack class VCR class Transaction def initialize(req) @req = req end def capture(res) @res = res ::VCR.record_http_interaction(::VCR::HTTPInteraction.new(vcr_request, vcr_response)) end def can_replay? ::VCR.http_interactions.has_interaction_matching?(vcr_request) end def replay to_rack_response(::VCR.http_interactions.response_for(vcr_request)) end private def vcr_request @vcr_request ||= ::VCR::Request.new(@req.request_method, @req.url, try_read(@req.body), request_headers) end def vcr_response ::VCR::Response.new( ::VCR::ResponseStatus.new(@res.status, nil), @res.headers, @res.body.join(''), ) end def to_rack_response(res) [ res.status.code, Hash[res.headers.map {|k, v| [k, v.join("\n")] }], [res.body], ] end def request_headers headers_hash_from_env.merge(content_field_hash) end def headers_hash_from_env fields = @req.env.select {|k, v| k.start_with? 'HTTP_' } .collect { |k, v| [normalize_header_field(k), v] } Hash[fields] end 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 def normalize_header_field(k) k.sub(/^HTTP_/, '') .split('_').map(&:capitalize).join('-') end def try_read(body) if body b = body.read body.rewind b end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
rack-vcr-0.1.5 | lib/rack/vcr/transaction.rb |
rack-vcr-0.1.4 | lib/rack/vcr/transaction.rb |
rack-vcr-0.1.3 | lib/rack/vcr/transaction.rb |
rack-vcr-0.1.2 | lib/rack/vcr/transaction.rb |