Class: Io::Flow::V0::HttpClient::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/flow_commerce/flow_api_v0_client.rb

Defined Under Namespace

Classes: PATCH

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(http_handler, base_uri, path) ⇒ Request

Returns a new instance of Request.



55294
55295
55296
55297
55298
55299
55300
55301
55302
55303
55304
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55294

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

Instance Attribute Details

#base_uriObject (readonly)

Returns the value of attribute base_uri.



55292
55293
55294
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55292

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



55292
55293
55294
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55292

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



55292
55293
55294
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55292

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



55352
55353
55354
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55352

def delete(&block)
  do_request(Net::HTTP::Delete, &block)
end

#do_request(klass) ⇒ Object



55376
55377
55378
55379
55380
55381
55382
55383
55384
55385
55386
55387
55388
55389
55390
55391
55392
55393
55394
55395
55396
55397
55398
55399
55400
55401
55402
55403
55404
55405
55406
55407
55408
55409
55410
55411
55412
55413
55414
55415
55416
55417
55418
55419
55420
55421
55422
55423
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55376

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) ⇒ Object



55348
55349
55350
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55348

def get(&block)
  do_request(Net::HTTP::Get, &block)
end

#options(&block) ⇒ Object



55356
55357
55358
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55356

def options(&block)
  do_request(Net::HTTP::Options, &block)
end

#patch(&block) ⇒ Object



55372
55373
55374
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55372

def patch(&block)
  do_request(PATCH, &block)
end

#post(&block) ⇒ Object



55360
55361
55362
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55360

def post(&block)
  do_request(Net::HTTP::Post, &block)
end

#put(&block) ⇒ Object



55364
55365
55366
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55364

def put(&block)
  do_request(Net::HTTP::Put, &block)
end

#with_auth(auth) ⇒ Object



55316
55317
55318
55319
55320
55321
55322
55323
55324
55325
55326
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55316

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) ⇒ Object



55342
55343
55344
55345
55346
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55342

def with_body(body)
  Preconditions.check_not_blank('body', body)
  @body = body
  self
end

#with_header(name, value) ⇒ Object



55306
55307
55308
55309
55310
55311
55312
55313
55314
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55306

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) ⇒ Object

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



55337
55338
55339
55340
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55337

def with_json(json)
  @headers['Content-Type'] ||= 'application/json; charset=UTF-8'
  with_body(json)
end

#with_query(params) ⇒ Object



55328
55329
55330
55331
55332
55333
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55328

def with_query(params)
  Preconditions.assert_class('params', params, Hash)
  Preconditions.check_state(@params.nil?, "Already have query parameters")
  @params = params
  self
end