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.



49858
49859
49860
49861
49862
49863
49864
49865
49866
49867
49868
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49858

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.



49856
49857
49858
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49856

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



49856
49857
49858
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49856

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



49856
49857
49858
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49856

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



49916
49917
49918
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49916

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

#do_request(klass) ⇒ Object



49940
49941
49942
49943
49944
49945
49946
49947
49948
49949
49950
49951
49952
49953
49954
49955
49956
49957
49958
49959
49960
49961
49962
49963
49964
49965
49966
49967
49968
49969
49970
49971
49972
49973
49974
49975
49976
49977
49978
49979
49980
49981
49982
49983
49984
49985
49986
49987
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49940

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



49912
49913
49914
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49912

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

#options(&block) ⇒ Object



49920
49921
49922
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49920

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

#patch(&block) ⇒ Object



49936
49937
49938
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49936

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

#post(&block) ⇒ Object



49924
49925
49926
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49924

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

#put(&block) ⇒ Object



49928
49929
49930
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49928

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

#with_auth(auth) ⇒ Object



49880
49881
49882
49883
49884
49885
49886
49887
49888
49889
49890
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49880

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



49906
49907
49908
49909
49910
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49906

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

#with_header(name, value) ⇒ Object



49870
49871
49872
49873
49874
49875
49876
49877
49878
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49870

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



49901
49902
49903
49904
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49901

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

#with_query(params) ⇒ Object



49892
49893
49894
49895
49896
49897
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 49892

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