class Io::Flow::V0::HttpClient::Request

Attributes

base_uri[R]
full_uri[R]
path[R]

Public Class Methods

new(http_handler, base_uri, path) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73137
def initialize(http_handler, base_uri, path)
  @http_handler = http_handler
  @base_uri = Preconditions.assert_class('base_uri', base_uri, URI)
  @path = Preconditions.assert_class('path', path, String)
  @full_uri = @base_uri.to_s + @path
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Public Instance Methods

delete(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73195
def delete(&block)
  do_request(Net::HTTP::Delete, &block)
end
do_request(klass) { |response| ... } click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73219
def do_request(klass)
  Preconditions.assert_class('klass', klass, Class)

  uri = @full_uri.dup
  if q = to_query(@params)
    uri += "?%s" % q
  end

  request = klass.send(:new, uri)

  # DEBUG curl = ['curl']
  # DEBUG if klass != Net::HTTP::Get
  # DEBUG  curl << "-X%s" % klass.name.split("::").last.upcase
  # DEBUG end

  if @body
    # DEBUG tmpfile = "/tmp/rest_client.tmp"
    # DEBUG File.open(tmpfile, "w") { |os| os << @body.to_s }
    # DEBUG curl << "-d@%s" % tmpfile
    request.body = @body
  end

  if @auth
    # DEBUG curl << "-u \"%s:%s\"" % [@auth.username, @auth.password]
    Preconditions.check_state(!@header_keys_lower_case.include?("authorization"),
                              "Cannot specify both an Authorization header and an auth instance")
    user_pass = "%s:%s" % [@auth.username, @auth.password]
    encoded = Base64.encode64(user_pass).to_s.split("\n").map(&:strip).join
    request.add_field("Authorization", "Basic %s" % encoded)
  end

  @headers.each { |key, value|
    # DEBUG curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  # DEBUG curl << "'%s%s'" % [@base_uri, path]
  # DEBUG puts curl.join(" ")

  raw_response = @http_handler.instance(@base_uri, request.path).execute(request)
  response = raw_response.to_s == "" ? nil : JSON.parse(raw_response)

  if block_given?
    yield response
  else
    response
  end
end
get(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73191
def get(&block)
  do_request(Net::HTTP::Get, &block)
end
options(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73199
def options(&block)
  do_request(Net::HTTP::Options, &block)
end
patch(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73215
def patch(&block)
  do_request(PATCH, &block)
end
post(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73203
def post(&block)
  do_request(Net::HTTP::Post, &block)
end
put(&block) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73207
def put(&block)
  do_request(Net::HTTP::Put, &block)
end
with_auth(auth) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73159
def with_auth(auth)
  Preconditions.assert_class('auth', auth, HttpClient::Authorization)
  Preconditions.check_state(@auth.nil?, "auth previously set")

  if auth.scheme.name == AuthScheme::BASIC.name
    @auth = auth
  else
    raise "Auth Scheme[#{auth.scheme.name}] not supported"
  end
  self
end
with_body(body) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73185
def with_body(body)
  Preconditions.check_not_blank('body', body)
  @body = body
  self
end
with_header(name, value) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73149
def with_header(name, value)
  Preconditions.check_not_blank('name', name, "Header name is required")
  Preconditions.check_not_blank('value', value, "Header value is required")
  Preconditions.check_state(!@headers.has_key?(name),
                            "Duplicate header named[%s]" % name)
  @headers[name] = value
  @header_keys_lower_case << name.downcase
  self
end
with_json(json) click to toggle source

Wrapper to set Content-Type header to application/json and set the provided json document as the body

# File lib/flow_commerce/flow_api_v0_client.rb, line 73180
def with_json(json)
  @headers['Content-Type'] ||= 'application/json; charset=UTF-8'
  with_body(json)
end
with_query(params) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73171
def with_query(params)
  Preconditions.assert_class('params', params, Hash)
  Preconditions.check_state(@params.nil?, "Already have query parameters")
  @params = params
  self
end

Private Instance Methods

to_query(params={}) click to toggle source
# File lib/flow_commerce/flow_api_v0_client.rb, line 73269
def to_query(params={})
  parts = (params || {}).map { |k,v|
    if v.is_a?(Enumerable)
      v.map { |el| "%s=%s" % [k, CGI.escape(el.to_s)] }
    else
      "%s=%s" % [k, CGI.escape(v.to_s)]
    end
  }
  parts.empty? ? nil : parts.join("&")
end