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.



39483
39484
39485
39486
39487
39488
39489
39490
39491
39492
39493
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39483

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.



39481
39482
39483
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39481

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



39481
39482
39483
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39481

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



39481
39482
39483
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39481

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



39541
39542
39543
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39541

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

#do_request(klass) ⇒ Object



39565
39566
39567
39568
39569
39570
39571
39572
39573
39574
39575
39576
39577
39578
39579
39580
39581
39582
39583
39584
39585
39586
39587
39588
39589
39590
39591
39592
39593
39594
39595
39596
39597
39598
39599
39600
39601
39602
39603
39604
39605
39606
39607
39608
39609
39610
39611
39612
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39565

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



39537
39538
39539
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39537

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

#options(&block) ⇒ Object



39545
39546
39547
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39545

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

#patch(&block) ⇒ Object



39561
39562
39563
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39561

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

#post(&block) ⇒ Object



39549
39550
39551
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39549

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

#put(&block) ⇒ Object



39553
39554
39555
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39553

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

#with_auth(auth) ⇒ Object



39505
39506
39507
39508
39509
39510
39511
39512
39513
39514
39515
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39505

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



39531
39532
39533
39534
39535
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39531

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

#with_header(name, value) ⇒ Object



39495
39496
39497
39498
39499
39500
39501
39502
39503
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39495

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



39526
39527
39528
39529
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39526

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

#with_query(params) ⇒ Object



39517
39518
39519
39520
39521
39522
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 39517

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