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.



29401
29402
29403
29404
29405
29406
29407
29408
29409
29410
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29401

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.



29399
29400
29401
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29399

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



29458
29459
29460
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29458

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

#do_request(klass) ⇒ Object



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
29524
29525
29526
29527
29528
29529
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29482

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



29454
29455
29456
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29454

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

#options(&block) ⇒ Object



29462
29463
29464
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29462

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

#patch(&block) ⇒ Object



29478
29479
29480
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29478

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

#post(&block) ⇒ Object



29466
29467
29468
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29466

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

#put(&block) ⇒ Object



29470
29471
29472
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29470

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

#with_auth(auth) ⇒ Object



29422
29423
29424
29425
29426
29427
29428
29429
29430
29431
29432
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29422

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



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

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

#with_header(name, value) ⇒ Object



29412
29413
29414
29415
29416
29417
29418
29419
29420
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29412

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



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

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

#with_query(params) ⇒ Object



29434
29435
29436
29437
29438
29439
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29434

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