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.



55996
55997
55998
55999
56000
56001
56002
56003
56004
56005
56006
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55996

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.



55994
55995
55996
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55994

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



55994
55995
55996
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55994

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



55994
55995
55996
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55994

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



56054
56055
56056
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56054

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

#do_request(klass) ⇒ Object



56078
56079
56080
56081
56082
56083
56084
56085
56086
56087
56088
56089
56090
56091
56092
56093
56094
56095
56096
56097
56098
56099
56100
56101
56102
56103
56104
56105
56106
56107
56108
56109
56110
56111
56112
56113
56114
56115
56116
56117
56118
56119
56120
56121
56122
56123
56124
56125
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56078

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



56050
56051
56052
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56050

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

#options(&block) ⇒ Object



56058
56059
56060
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56058

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

#patch(&block) ⇒ Object



56074
56075
56076
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56074

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

#post(&block) ⇒ Object



56062
56063
56064
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56062

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

#put(&block) ⇒ Object



56066
56067
56068
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56066

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

#with_auth(auth) ⇒ Object



56018
56019
56020
56021
56022
56023
56024
56025
56026
56027
56028
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56018

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



56044
56045
56046
56047
56048
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56044

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

#with_header(name, value) ⇒ Object



56008
56009
56010
56011
56012
56013
56014
56015
56016
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56008

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



56039
56040
56041
56042
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56039

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

#with_query(params) ⇒ Object



56030
56031
56032
56033
56034
56035
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56030

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