class TShield::RequestVCR
Module to write and read saved responses
Attributes
vcr_response[R]
Public Class Methods
new(path, options = {})
click to toggle source
Calls superclass method
TShield::Request::new
# File lib/tshield/request_vcr.rb, line 19 def initialize(path, options = {}) super() @path = path @options = options request_configuration = configuration.request @options[:timeout] = request_configuration['timeout'] @options[:verify] = request_configuration['verify_ssl'] request end
Public Instance Methods
request()
click to toggle source
# File lib/tshield/request_vcr.rb, line 30 def request raw_query = @options[:raw_query] @path = "#{@path}?#{raw_query}" unless !raw_query || raw_query.empty? @url = "#{domain}#{@path}" configuration.get_before_filters(domain).each do |filter| _method, @url, @options = filter.new.filter(method, @url, @options) end in_session = find_in_sessions if in_session # TODO: create concept of global session in vcr in_session = nil if in_session == 'global' @vcr_response = response(in_session) @vcr_response.original = false else TShield.logger.info("calling original service for request with options #{@options}") raw = HTTParty.send(method.to_s, @url, @options) original_response = save(raw) original_response.original = true @vcr_response = original_response end configuration.get_after_filters(domain).each do |filter| @vcr_response = filter.new.filter(@vcr_response) end end
response(session)
click to toggle source
# File lib/tshield/request_vcr.rb, line 60 def response(session) response_content = saved_content(session) TShield::Response.new(response_content['body'], response_content['headers'] || [], response_content['status'] || 200) end
Private Instance Methods
domain()
click to toggle source
# File lib/tshield/request_vcr.rb, line 69 def domain @domain ||= configuration.get_domain_for(@path) end
encode_for_windows_dir(directory)
click to toggle source
# File lib/tshield/request_vcr.rb, line 158 def encode_for_windows_dir(directory) replace = [['<','%3c'],['>','%3e'],[':','%3a'],['"','%22'],['?','%3f'],[' ','%20'],['*','%2a'],['/','%2f']] replace.each do |value| directory = directory.gsub(value.first,value.last) end directory end
file_exists(session)
click to toggle source
# File lib/tshield/request_vcr.rb, line 123 def file_exists(session) File.exist?(content_destiny(session)) end
find_in_sessions()
click to toggle source
# File lib/tshield/request_vcr.rb, line 127 def find_in_sessions in_session = nil ([@options[:session]] + (@options[:secondary_sessions] || [])).each do |session| if file_exists(session) && configuration.cache_request?(domain) in_session = (session || 'global') break end TShield.logger.info("saved response not found in #{session}") end in_session end
key()
click to toggle source
# File lib/tshield/request_vcr.rb, line 140 def key @key ||= Digest::SHA1.hexdigest "#{@url}|#{method}" end
method()
click to toggle source
# File lib/tshield/request_vcr.rb, line 77 def method @method ||= @options[:method].downcase end
name()
click to toggle source
# File lib/tshield/request_vcr.rb, line 73 def name @name ||= configuration.get_name(domain) end
safe_dir(url)
click to toggle source
# File lib/tshield/request_vcr.rb, line 166 def safe_dir(url) if url.size > 225 path = url.gsub(/(\?.*)/, '') params = Digest::SHA1.hexdigest Regexp.last_match(1) directory = "#{path.gsub(%r{/}, '-').gsub(/^-/, '')}?#{params}" else directory = url.gsub(%r{/}, '-').gsub(/^-/, '') end configuration.windows_compatibility? ? encode_for_windows_dir(directory) : directory end
save(raw_response)
click to toggle source
# File lib/tshield/request_vcr.rb, line 96 def save(raw_response) headers = {} raw_response.headers.each do |k, v| next if k == 'set-cookie' headers[k] = v unless configuration.not_save_headers(domain).include? k end headers = apply_set_cookie_header_values(raw_response, headers) content = { body: raw_response.body, status: raw_response.code, headers: headers } write(content) TShield::Response.new(raw_response.body, headers, raw_response.code) end
saved_content(session)
click to toggle source
# File lib/tshield/request_vcr.rb, line 117 def saved_content(session) content = JSON.parse(File.open(headers_destiny(session)).read) content['body'] = File.open(content_destiny(session)).read unless content['body'] content end
write(content)
click to toggle source
# File lib/tshield/request_vcr.rb, line 144 def write(content) content_file = File.open(content_destiny, 'w') content_file.write(content[:body]) content_file.close body = content.delete :body headers_file = File.open(headers_destiny, 'w') headers_file.write(JSON.pretty_generate(content)) headers_file.close content[:body] = body end