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.



54370
54371
54372
54373
54374
54375
54376
54377
54378
54379
54380
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54370

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.



54368
54369
54370
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54368

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



54368
54369
54370
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54368

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



54368
54369
54370
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54368

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



54428
54429
54430
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54428

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

#do_request(klass) ⇒ Object



54452
54453
54454
54455
54456
54457
54458
54459
54460
54461
54462
54463
54464
54465
54466
54467
54468
54469
54470
54471
54472
54473
54474
54475
54476
54477
54478
54479
54480
54481
54482
54483
54484
54485
54486
54487
54488
54489
54490
54491
54492
54493
54494
54495
54496
54497
54498
54499
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54452

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)

  # DEBUG curl = ['curl']
  # DEBUG if klass != Net::HTTP::Get
  # DEBUG  curl << "-X%s" % klass.name.split("::").last.upcase
  # DEBUG end

  if @body
    # DEBUG tmpfile = "/tmp/rest_client.tmp"
    # DEBUG File.open(tmpfile, "w") { |os| os << @body.to_s }
    # DEBUG curl << "-d@%s" % tmpfile
    request.body = @body
  end

  if @auth
    # DEBUG 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|
    # DEBUG curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  # DEBUG 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



54424
54425
54426
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54424

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

#options(&block) ⇒ Object



54432
54433
54434
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54432

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

#patch(&block) ⇒ Object



54448
54449
54450
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54448

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

#post(&block) ⇒ Object



54436
54437
54438
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54436

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

#put(&block) ⇒ Object



54440
54441
54442
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54440

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

#with_auth(auth) ⇒ Object



54392
54393
54394
54395
54396
54397
54398
54399
54400
54401
54402
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54392

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



54418
54419
54420
54421
54422
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54418

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

#with_header(name, value) ⇒ Object



54382
54383
54384
54385
54386
54387
54388
54389
54390
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54382

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



54413
54414
54415
54416
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54413

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

#with_query(params) ⇒ Object



54404
54405
54406
54407
54408
54409
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 54404

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