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.



54266
54267
54268
54269
54270
54271
54272
54273
54274
54275
54276
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54266

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.



54264
54265
54266
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54264

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



54264
54265
54266
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54264

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



54264
54265
54266
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54264

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



54324
54325
54326
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54324

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

#do_request(klass) ⇒ Object



54348
54349
54350
54351
54352
54353
54354
54355
54356
54357
54358
54359
54360
54361
54362
54363
54364
54365
54366
54367
54368
54369
54370
54371
54372
54373
54374
54375
54376
54377
54378
54379
54380
54381
54382
54383
54384
54385
54386
54387
54388
54389
54390
54391
54392
54393
54394
54395
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54348

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



54320
54321
54322
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54320

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

#options(&block) ⇒ Object



54328
54329
54330
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54328

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

#patch(&block) ⇒ Object



54344
54345
54346
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54344

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

#post(&block) ⇒ Object



54332
54333
54334
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54332

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

#put(&block) ⇒ Object



54336
54337
54338
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54336

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

#with_auth(auth) ⇒ Object



54288
54289
54290
54291
54292
54293
54294
54295
54296
54297
54298
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54288

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



54314
54315
54316
54317
54318
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54314

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

#with_header(name, value) ⇒ Object



54278
54279
54280
54281
54282
54283
54284
54285
54286
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54278

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



54309
54310
54311
54312
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54309

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

#with_query(params) ⇒ Object



54300
54301
54302
54303
54304
54305
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54300

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