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



28271
28272
28273
28274
28275
28276
28277
28278
28279
28280
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28271

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.



28269
28270
28271
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28269

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



28328
28329
28330
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28328

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

#do_request(klass) ⇒ Object



28352
28353
28354
28355
28356
28357
28358
28359
28360
28361
28362
28363
28364
28365
28366
28367
28368
28369
28370
28371
28372
28373
28374
28375
28376
28377
28378
28379
28380
28381
28382
28383
28384
28385
28386
28387
28388
28389
28390
28391
28392
28393
28394
28395
28396
28397
28398
28399
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28352

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



28324
28325
28326
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28324

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

#options(&block) ⇒ Object



28332
28333
28334
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28332

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

#patch(&block) ⇒ Object



28348
28349
28350
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28348

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

#post(&block) ⇒ Object



28336
28337
28338
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28336

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

#put(&block) ⇒ Object



28340
28341
28342
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28340

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

#with_auth(auth) ⇒ Object



28292
28293
28294
28295
28296
28297
28298
28299
28300
28301
28302
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28292

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



28318
28319
28320
28321
28322
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28318

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

#with_header(name, value) ⇒ Object



28282
28283
28284
28285
28286
28287
28288
28289
28290
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28282

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



28313
28314
28315
28316
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28313

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

#with_query(params) ⇒ Object



28304
28305
28306
28307
28308
28309
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28304

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