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.



45702
45703
45704
45705
45706
45707
45708
45709
45710
45711
45712
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45702

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.



45700
45701
45702
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45700

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



45700
45701
45702
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45700

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



45700
45701
45702
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45700

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



45760
45761
45762
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45760

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

#do_request(klass) ⇒ Object



45784
45785
45786
45787
45788
45789
45790
45791
45792
45793
45794
45795
45796
45797
45798
45799
45800
45801
45802
45803
45804
45805
45806
45807
45808
45809
45810
45811
45812
45813
45814
45815
45816
45817
45818
45819
45820
45821
45822
45823
45824
45825
45826
45827
45828
45829
45830
45831
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45784

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

  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



45756
45757
45758
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45756

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

#options(&block) ⇒ Object



45764
45765
45766
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45764

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

#patch(&block) ⇒ Object



45780
45781
45782
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45780

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

#post(&block) ⇒ Object



45768
45769
45770
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45768

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

#put(&block) ⇒ Object



45772
45773
45774
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45772

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

#with_auth(auth) ⇒ Object



45724
45725
45726
45727
45728
45729
45730
45731
45732
45733
45734
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45724

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



45750
45751
45752
45753
45754
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45750

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

#with_header(name, value) ⇒ Object



45714
45715
45716
45717
45718
45719
45720
45721
45722
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45714

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



45745
45746
45747
45748
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45745

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

#with_query(params) ⇒ Object



45736
45737
45738
45739
45740
45741
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 45736

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