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