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.



26247
26248
26249
26250
26251
26252
26253
26254
26255
26256
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26247

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)
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



26245
26246
26247
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26245

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



26304
26305
26306
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26304

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

#do_request(klass) ⇒ Object



26328
26329
26330
26331
26332
26333
26334
26335
26336
26337
26338
26339
26340
26341
26342
26343
26344
26345
26346
26347
26348
26349
26350
26351
26352
26353
26354
26355
26356
26357
26358
26359
26360
26361
26362
26363
26364
26365
26366
26367
26368
26369
26370
26371
26372
26373
26374
26375
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26328

def do_request(klass)
  Preconditions.assert_class('klass', klass, Class)

  uri = path.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



26300
26301
26302
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26300

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

#options(&block) ⇒ Object



26308
26309
26310
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26308

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

#patch(&block) ⇒ Object



26324
26325
26326
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26324

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

#post(&block) ⇒ Object



26312
26313
26314
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26312

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

#put(&block) ⇒ Object



26316
26317
26318
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26316

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

#with_auth(auth) ⇒ Object



26268
26269
26270
26271
26272
26273
26274
26275
26276
26277
26278
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26268

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



26294
26295
26296
26297
26298
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26294

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

#with_header(name, value) ⇒ Object



26258
26259
26260
26261
26262
26263
26264
26265
26266
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26258

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



26289
26290
26291
26292
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26289

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

#with_query(params) ⇒ Object



26280
26281
26282
26283
26284
26285
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26280

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