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.



29444
29445
29446
29447
29448
29449
29450
29451
29452
29453
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29444

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.



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

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



29501
29502
29503
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29501

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

#do_request(klass) ⇒ Object



29525
29526
29527
29528
29529
29530
29531
29532
29533
29534
29535
29536
29537
29538
29539
29540
29541
29542
29543
29544
29545
29546
29547
29548
29549
29550
29551
29552
29553
29554
29555
29556
29557
29558
29559
29560
29561
29562
29563
29564
29565
29566
29567
29568
29569
29570
29571
29572
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29525

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



29497
29498
29499
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29497

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

#options(&block) ⇒ Object



29505
29506
29507
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29505

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

#patch(&block) ⇒ Object



29521
29522
29523
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29521

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

#post(&block) ⇒ Object



29509
29510
29511
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29509

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

#put(&block) ⇒ Object



29513
29514
29515
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29513

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

#with_auth(auth) ⇒ Object



29465
29466
29467
29468
29469
29470
29471
29472
29473
29474
29475
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29465

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



29491
29492
29493
29494
29495
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29491

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

#with_header(name, value) ⇒ Object



29455
29456
29457
29458
29459
29460
29461
29462
29463
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29455

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



29486
29487
29488
29489
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29486

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

#with_query(params) ⇒ Object



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

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