class Seiso::Connector::RestConnector

Author

Willie Wheeler (wwheeler@expedia.com)

Copyright

Copyright © 2014-2015 Expedia, Inc.

License

Apache 2.0

Constants

HN_ACCEPT
HN_CONTENT_TYPE
MT_TEXT_URI_LIST

Public Class Methods

new(host, port, use_ssl, ignore_cert, username, password, media_type) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 17
def initialize(host, port, use_ssl, ignore_cert, username, password, media_type)
  @host = host
  @port = port
  @use_ssl = use_ssl
  @ignore_cert = ignore_cert
  @username = username
  @password = password
  @media_type = media_type

  # FIXME Not secure
  @verify_mode = OpenSSL::SSL::VERIFY_NONE if @use_ssl
end

Public Instance Methods

delete(uri) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 88
def delete(uri)
  puts "DELETE #{uri}"
  request = Net::HTTP::Delete.new uri.request_uri
  request.basic_auth(@username, @password)
  do_request(http, request)
end
get(uri) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 30
def get(uri)
  request = Net::HTTP::Get.new uri.request_uri
  request[HN_ACCEPT] = @media_type
  request.basic_auth(@username, @password)
  do_request(http, request)
end
post(uri, resource) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 37
def post(uri, resource)
  request = Net::HTTP::Post.new uri.request_uri
  request[HN_CONTENT_TYPE] = @media_type
  request.basic_auth(@username, @password)
  request.body = resource.to_json
  do_request(http, request)
end
post_uri_list(uri, uri_list) click to toggle source
  • uri: collection resource we’re posting the URI list to

  • uri_list: list of strings, not URI objects

# File lib/seiso/connector/rest_connector.rb, line 47
def post_uri_list(uri, uri_list)
  request_body = ""
  uri_list.each do |uri|
    request_body << "#{uri}\n"
  end

  request = Net::HTTP::Post.new uri.request_uri
  request[HN_CONTENT_TYPE] = MT_TEXT_URI_LIST
  request.basic_auth(@username, @password)
  request.body = request_body
  do_request(http, request)
end
put(uri, resource) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 80
def put(uri, resource)
  request = Net::HTTP::Put.new uri.request_uri
  request[HN_CONTENT_TYPE] = @media_type
  request.basic_auth(@username, @password)
  request.body = resource.to_json
  do_request(http, request)
end
put_all(uri_resource_pairs) click to toggle source

Puts all resources using a keepalive connection

# File lib/seiso/connector/rest_connector.rb, line 61
def put_all(uri_resource_pairs)
  Net::HTTP.start(
      @host,
      @port,
      :use_ssl => @use_ssl,
      :verify_mode => @verify_mode) do |http|

    uri_resource_pairs.each do |pair|
      pair_uri = pair['uri']
      pair_resource = pair['resource']
      request = Net::HTTP::Put.new pair_uri.request_uri
      request[HN_CONTENT_TYPE] = @media_type
      request.basic_auth(@username, @password)
      request.body = pair_resource.to_json
      do_request(http, request)
    end
  end
end

Private Instance Methods

do_request(http, request) click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 105
def do_request(http, request)
  response = http.request request

  if response.code.start_with?("4") || response.code.start_with?("5")
    details = "(#{JSON.parse response.body})"
  end
  puts "#{request.method} #{request.path} => #{response.code} #{response.message} #{details}"
  response
end
http() click to toggle source
# File lib/seiso/connector/rest_connector.rb, line 97
def http
  # Not sure if I can reuse this, so for now I'm just creating a new one every time.
  http = Net::HTTP.new(@host, @port)
  http.use_ssl = @use_ssl
  http.verify_mode = @verify_mode
  http
end