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.



27252
27253
27254
27255
27256
27257
27258
27259
27260
27261
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27252

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.



27250
27251
27252
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27250

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



27309
27310
27311
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27309

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

#do_request(klass) ⇒ Object



27333
27334
27335
27336
27337
27338
27339
27340
27341
27342
27343
27344
27345
27346
27347
27348
27349
27350
27351
27352
27353
27354
27355
27356
27357
27358
27359
27360
27361
27362
27363
27364
27365
27366
27367
27368
27369
27370
27371
27372
27373
27374
27375
27376
27377
27378
27379
27380
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27333

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



27305
27306
27307
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27305

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

#options(&block) ⇒ Object



27313
27314
27315
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27313

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

#patch(&block) ⇒ Object



27329
27330
27331
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27329

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

#post(&block) ⇒ Object



27317
27318
27319
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27317

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

#put(&block) ⇒ Object



27321
27322
27323
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27321

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

#with_auth(auth) ⇒ Object



27273
27274
27275
27276
27277
27278
27279
27280
27281
27282
27283
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27273

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



27299
27300
27301
27302
27303
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27299

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

#with_header(name, value) ⇒ Object



27263
27264
27265
27266
27267
27268
27269
27270
27271
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27263

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



27294
27295
27296
27297
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27294

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

#with_query(params) ⇒ Object



27285
27286
27287
27288
27289
27290
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27285

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