/usr/lib/ruby/vendor_ruby/typhoeus/easy_factory.rb is in ruby-typhoeus 0.6.8-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | module Typhoeus
# This is a Factory for easies to be used in the hydra.
# Before an easy is ready to be added to a multi the
# on_complete callback to be set.
# This is done by this class.
#
# @api private
class EasyFactory
# Returns the request provided.
#
# @return [ Typhoeus::Request ]
attr_reader :request
# Returns the hydra provided.
#
# @return [ Typhoeus::Hydra ]
attr_reader :hydra
# Create an easy factory.
#
# @example Create easy factory.
# Typhoeus::Hydra::EasyFactory.new(request, hydra)
#
# @param [ Request ] request The request to build an easy for.
# @param [ Hydra ] hydra The hydra to build an easy for.
def initialize(request, hydra = nil)
@request = request
@hydra = hydra
end
# Return the easy in question.
#
# @example Return easy.
# easy_factory.easy
#
# @return [ Ethon::Easy ] The easy.
def easy
@easy ||= Typhoeus::Pool.get
end
# Fabricated easy.
#
# @example Prepared easy.
# easy_factory.get
#
# @return [ Ethon::Easy ] The easy.
def get
begin
easy.http_request(
request.base_url,
request.options.fetch(:method, :get),
sanitize(request.options)
)
rescue Ethon::Errors::InvalidOption => e
help = provide_help(e.message.match(/:\s(\w+)/)[1])
raise $!, "#{$!}#{help}", $!.backtrace
end
set_callback
easy
end
private
def sanitize(options)
sanitized = {}
request.options.each do |k,v|
next if [:method, :cache_ttl].include?(k.to_sym)
if new_option = renamed_options[k.to_sym]
warn("Deprecated option #{k}. Please use #{new_option} instead.")
sanitized[new_option] = v
else
sanitized[k] = v
end
end
sanitized
end
# Sets on_complete callback on easy in order to be able to
# track progress.
#
# @example Set callback.
# easy_factory.set_callback
#
# @return [ Ethon::Easy ] The easy.
def set_callback
if request.streaming?
response = nil
easy.on_headers do |easy|
response = Response.new(Ethon::Easy::Mirror.from_easy(easy).options)
request.execute_headers_callbacks(response)
end
easy.on_body do |chunk, easy|
request.on_body.each do |callback|
callback.call(chunk, response)
end
end
else
easy.on_headers do |easy|
request.execute_headers_callbacks(Response.new(Ethon::Easy::Mirror.from_easy(easy).options))
end
end
easy.on_complete do |easy|
request.finish(Response.new(easy.mirror.options))
Typhoeus::Pool.release(easy)
if hydra && !hydra.queued_requests.empty?
hydra.dequeue
end
end
end
def renamed_options
{
:auth_method => :httpauth,
:connect_timeout => :connecttimeout,
:encoding => :accept_encoding,
:follow_location => :followlocation,
:max_redirects => :maxredirs,
:proxy_type => :proxytype,
:ssl_cacert => :cainfo,
:ssl_capath => :capath,
:ssl_cert => :sslcert,
:ssl_cert_type => :sslcerttype,
:ssl_key => :sslkey,
:ssl_key_password => :keypasswd,
:ssl_key_type => :sslkeytype,
:ssl_version => :sslversion,
}
end
def changed_options
{
:disable_ssl_host_verification => :ssl_verifyhost,
:disable_ssl_peer_verification => :ssl_verifypeer,
:proxy_auth_method => :proxyauth,
}
end
def removed_options
[:cache_key_basis, :cache_timeout, :user_agent]
end
def provide_help(option)
if new_option = changed_options[option.to_sym]
"\nPlease try #{new_option} instead of #{option}." if new_option
elsif removed_options.include?(option.to_sym)
"\nThe option #{option} was removed."
end
end
end
end
|