class Hoick::Command
Private Class Methods
declare_url_parameter()
click to toggle source
# File lib/hoick/command.rb, line 21 def declare_url_parameter parameter "URL", "address", &method(:parse_url) end
parse_url(url)
click to toggle source
# File lib/hoick/command.rb, line 13 def parse_url(url) URI(url) rescue ArgumentError => e raise e rescue URI::InvalidURIError => e raise ArgumentError, e.message end
Public Instance Methods
execute()
click to toggle source
# File lib/hoick/command.rb, line 46 def execute get(full_url, &method(:display_response)) end
follow_redirects?()
click to toggle source
# File lib/hoick/command.rb, line 36 def follow_redirects? false end
get(uri, &callback)
click to toggle source
# File lib/hoick/command.rb, line 52 def get(uri, &callback) http_request("GET", uri) do |response| if follow_redirects? && response.kind_of?(Net::HTTPRedirection) raise Redirected, response['location'] end callback.call(response) end rescue Redirected => e uri = URI(e.location) retry end
Private Instance Methods
build_request(method, uri, content, content_type)
click to toggle source
# File lib/hoick/command.rb, line 183 def build_request(method, uri, content, content_type) request_class = Net::HTTP.const_get(method.to_s.capitalize) request = request_class.new(uri.request_uri) if content request["Content-Type"] = content_type request.body = content end request end
display_response(response)
click to toggle source
# File lib/hoick/command.rb, line 212 def display_response(response) if headers? puts "HTTP/#{response.http_version} #{response.code} #{response.message}" response.each_capitalized do |header, value| puts("#{header}: #{value}") end puts "" end if body? response.read_body do |chunk| print chunk end end unless response.kind_of?(Net::HTTPSuccess) exit(response.code.to_i / 100) end end
full_url()
click to toggle source
# File lib/hoick/command.rb, line 157 def full_url if base_url base_url + url else url end end
http_request(method, uri, content = nil, content_type = nil, &callback)
click to toggle source
# File lib/hoick/command.rb, line 165 def http_request(method, uri, content = nil, content_type = nil, &callback) request = build_request(method, uri, content, content_type) with_http_connection(uri) do |http| http.request(request) do |response| if follow_redirects? && response.kind_of?(Net::HTTPRedirection) raise Redirected, response['location'] end callback.call(response) end end rescue Redirected => e uri = URI(e.location) retry rescue SocketError, TimedOut => e $stderr.puts "ERROR: #{e}" exit(1) end
with_http_connection(uri) { |http| ... }
click to toggle source
# File lib/hoick/command.rb, line 193 def with_http_connection(uri) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if (uri.scheme == "https") http.set_debug_output($stderr) if debug? if timeout http.open_timeout = timeout http.read_timeout = timeout end http.start do begin yield http rescue Timeout::Error raise TimedOut, "request timed out" end end rescue Timeout::Error raise TimedOut, "connection timed out" end