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.



25937
25938
25939
25940
25941
25942
25943
25944
25945
25946
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25937

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.



25935
25936
25937
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25935

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



25994
25995
25996
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25994

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

#do_request(klass) ⇒ Object



26018
26019
26020
26021
26022
26023
26024
26025
26026
26027
26028
26029
26030
26031
26032
26033
26034
26035
26036
26037
26038
26039
26040
26041
26042
26043
26044
26045
26046
26047
26048
26049
26050
26051
26052
26053
26054
26055
26056
26057
26058
26059
26060
26061
26062
26063
26064
26065
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26018

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



25990
25991
25992
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25990

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

#options(&block) ⇒ Object



25998
25999
26000
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25998

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

#patch(&block) ⇒ Object



26014
26015
26016
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26014

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

#post(&block) ⇒ Object



26002
26003
26004
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26002

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

#put(&block) ⇒ Object



26006
26007
26008
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26006

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

#with_auth(auth) ⇒ Object



25958
25959
25960
25961
25962
25963
25964
25965
25966
25967
25968
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25958

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



25984
25985
25986
25987
25988
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25984

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

#with_header(name, value) ⇒ Object



25948
25949
25950
25951
25952
25953
25954
25955
25956
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25948

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



25979
25980
25981
25982
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25979

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

#with_query(params) ⇒ Object



25970
25971
25972
25973
25974
25975
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25970

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