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.



26511
26512
26513
26514
26515
26516
26517
26518
26519
26520
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26511

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.



26509
26510
26511
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26509

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



26568
26569
26570
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26568

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

#do_request(klass) ⇒ Object



26592
26593
26594
26595
26596
26597
26598
26599
26600
26601
26602
26603
26604
26605
26606
26607
26608
26609
26610
26611
26612
26613
26614
26615
26616
26617
26618
26619
26620
26621
26622
26623
26624
26625
26626
26627
26628
26629
26630
26631
26632
26633
26634
26635
26636
26637
26638
26639
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26592

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



26564
26565
26566
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26564

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

#options(&block) ⇒ Object



26572
26573
26574
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26572

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

#patch(&block) ⇒ Object



26588
26589
26590
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26588

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

#post(&block) ⇒ Object



26576
26577
26578
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26576

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

#put(&block) ⇒ Object



26580
26581
26582
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26580

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

#with_auth(auth) ⇒ Object



26532
26533
26534
26535
26536
26537
26538
26539
26540
26541
26542
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26532

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



26558
26559
26560
26561
26562
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26558

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

#with_header(name, value) ⇒ Object



26522
26523
26524
26525
26526
26527
26528
26529
26530
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26522

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



26553
26554
26555
26556
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26553

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

#with_query(params) ⇒ Object



26544
26545
26546
26547
26548
26549
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26544

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