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.



42296
42297
42298
42299
42300
42301
42302
42303
42304
42305
42306
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42296

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.



42294
42295
42296
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42294

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



42294
42295
42296
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42294

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



42294
42295
42296
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42294

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



42354
42355
42356
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42354

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

#do_request(klass) ⇒ Object



42378
42379
42380
42381
42382
42383
42384
42385
42386
42387
42388
42389
42390
42391
42392
42393
42394
42395
42396
42397
42398
42399
42400
42401
42402
42403
42404
42405
42406
42407
42408
42409
42410
42411
42412
42413
42414
42415
42416
42417
42418
42419
42420
42421
42422
42423
42424
42425
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42378

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)

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

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

  if @auth
    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|
    curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  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



42350
42351
42352
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42350

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

#options(&block) ⇒ Object



42358
42359
42360
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42358

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

#patch(&block) ⇒ Object



42374
42375
42376
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42374

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

#post(&block) ⇒ Object



42362
42363
42364
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42362

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

#put(&block) ⇒ Object



42366
42367
42368
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42366

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

#with_auth(auth) ⇒ Object



42318
42319
42320
42321
42322
42323
42324
42325
42326
42327
42328
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42318

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



42344
42345
42346
42347
42348
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42344

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

#with_header(name, value) ⇒ Object



42308
42309
42310
42311
42312
42313
42314
42315
42316
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42308

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



42339
42340
42341
42342
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42339

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

#with_query(params) ⇒ Object



42330
42331
42332
42333
42334
42335
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42330

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