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.



64625
64626
64627
64628
64629
64630
64631
64632
64633
64634
64635
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64625

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.



64623
64624
64625
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64623

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



64623
64624
64625
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64623

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



64623
64624
64625
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64623

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



64683
64684
64685
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64683

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

#do_request(klass) ⇒ Object



64707
64708
64709
64710
64711
64712
64713
64714
64715
64716
64717
64718
64719
64720
64721
64722
64723
64724
64725
64726
64727
64728
64729
64730
64731
64732
64733
64734
64735
64736
64737
64738
64739
64740
64741
64742
64743
64744
64745
64746
64747
64748
64749
64750
64751
64752
64753
64754
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64707

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



64679
64680
64681
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64679

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

#options(&block) ⇒ Object



64687
64688
64689
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64687

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

#patch(&block) ⇒ Object



64703
64704
64705
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64703

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

#post(&block) ⇒ Object



64691
64692
64693
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64691

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

#put(&block) ⇒ Object



64695
64696
64697
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64695

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

#with_auth(auth) ⇒ Object



64647
64648
64649
64650
64651
64652
64653
64654
64655
64656
64657
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64647

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



64673
64674
64675
64676
64677
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64673

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

#with_header(name, value) ⇒ Object



64637
64638
64639
64640
64641
64642
64643
64644
64645
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64637

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



64668
64669
64670
64671
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64668

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

#with_query(params) ⇒ Object



64659
64660
64661
64662
64663
64664
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 64659

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