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.



55235
55236
55237
55238
55239
55240
55241
55242
55243
55244
55245
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55235

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.



55233
55234
55235
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55233

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



55233
55234
55235
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55233

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



55233
55234
55235
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55233

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



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

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

#do_request(klass) ⇒ Object



55317
55318
55319
55320
55321
55322
55323
55324
55325
55326
55327
55328
55329
55330
55331
55332
55333
55334
55335
55336
55337
55338
55339
55340
55341
55342
55343
55344
55345
55346
55347
55348
55349
55350
55351
55352
55353
55354
55355
55356
55357
55358
55359
55360
55361
55362
55363
55364
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55317

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



55289
55290
55291
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55289

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

#options(&block) ⇒ Object



55297
55298
55299
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55297

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

#patch(&block) ⇒ Object



55313
55314
55315
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55313

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

#post(&block) ⇒ Object



55301
55302
55303
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55301

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

#put(&block) ⇒ Object



55305
55306
55307
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55305

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

#with_auth(auth) ⇒ Object



55257
55258
55259
55260
55261
55262
55263
55264
55265
55266
55267
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55257

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



55283
55284
55285
55286
55287
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55283

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

#with_header(name, value) ⇒ Object



55247
55248
55249
55250
55251
55252
55253
55254
55255
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55247

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



55278
55279
55280
55281
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55278

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

#with_query(params) ⇒ Object



55269
55270
55271
55272
55273
55274
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55269

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