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.



29395
29396
29397
29398
29399
29400
29401
29402
29403
29404
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29395

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.



29393
29394
29395
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29393

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



29452
29453
29454
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29452

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

#do_request(klass) ⇒ Object



29476
29477
29478
29479
29480
29481
29482
29483
29484
29485
29486
29487
29488
29489
29490
29491
29492
29493
29494
29495
29496
29497
29498
29499
29500
29501
29502
29503
29504
29505
29506
29507
29508
29509
29510
29511
29512
29513
29514
29515
29516
29517
29518
29519
29520
29521
29522
29523
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29476

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



29448
29449
29450
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29448

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

#options(&block) ⇒ Object



29456
29457
29458
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29456

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

#patch(&block) ⇒ Object



29472
29473
29474
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29472

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

#post(&block) ⇒ Object



29460
29461
29462
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29460

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

#put(&block) ⇒ Object



29464
29465
29466
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29464

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

#with_auth(auth) ⇒ Object



29416
29417
29418
29419
29420
29421
29422
29423
29424
29425
29426
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29416

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



29442
29443
29444
29445
29446
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29442

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

#with_header(name, value) ⇒ Object



29406
29407
29408
29409
29410
29411
29412
29413
29414
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29406

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



29437
29438
29439
29440
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29437

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

#with_query(params) ⇒ Object



29428
29429
29430
29431
29432
29433
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29428

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