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.



41441
41442
41443
41444
41445
41446
41447
41448
41449
41450
41451
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41441

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)
  @full_uri = @base_uri.to_s + @path
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Instance Attribute Details

#base_uriObject (readonly)

Returns the value of attribute base_uri.



41439
41440
41441
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41439

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



41439
41440
41441
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41439

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



41439
41440
41441
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41439

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



41499
41500
41501
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41499

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

#do_request(klass) ⇒ Object



41523
41524
41525
41526
41527
41528
41529
41530
41531
41532
41533
41534
41535
41536
41537
41538
41539
41540
41541
41542
41543
41544
41545
41546
41547
41548
41549
41550
41551
41552
41553
41554
41555
41556
41557
41558
41559
41560
41561
41562
41563
41564
41565
41566
41567
41568
41569
41570
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41523

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

  uri = @full_uri.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



41495
41496
41497
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41495

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

#options(&block) ⇒ Object



41503
41504
41505
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41503

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

#patch(&block) ⇒ Object



41519
41520
41521
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41519

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

#post(&block) ⇒ Object



41507
41508
41509
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41507

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

#put(&block) ⇒ Object



41511
41512
41513
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41511

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

#with_auth(auth) ⇒ Object



41463
41464
41465
41466
41467
41468
41469
41470
41471
41472
41473
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41463

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



41489
41490
41491
41492
41493
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41489

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

#with_header(name, value) ⇒ Object



41453
41454
41455
41456
41457
41458
41459
41460
41461
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41453

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



41484
41485
41486
41487
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41484

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

#with_query(params) ⇒ Object



41475
41476
41477
41478
41479
41480
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41475

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