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.



55136
55137
55138
55139
55140
55141
55142
55143
55144
55145
55146
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55136

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.



55134
55135
55136
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55134

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



55134
55135
55136
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55134

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



55134
55135
55136
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55134

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



55194
55195
55196
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55194

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

#do_request(klass) ⇒ Object



55218
55219
55220
55221
55222
55223
55224
55225
55226
55227
55228
55229
55230
55231
55232
55233
55234
55235
55236
55237
55238
55239
55240
55241
55242
55243
55244
55245
55246
55247
55248
55249
55250
55251
55252
55253
55254
55255
55256
55257
55258
55259
55260
55261
55262
55263
55264
55265
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55218

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



55190
55191
55192
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55190

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

#options(&block) ⇒ Object



55198
55199
55200
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55198

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

#patch(&block) ⇒ Object



55214
55215
55216
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55214

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

#post(&block) ⇒ Object



55202
55203
55204
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55202

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

#put(&block) ⇒ Object



55206
55207
55208
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55206

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

#with_auth(auth) ⇒ Object



55158
55159
55160
55161
55162
55163
55164
55165
55166
55167
55168
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55158

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



55184
55185
55186
55187
55188
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55184

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

#with_header(name, value) ⇒ Object



55148
55149
55150
55151
55152
55153
55154
55155
55156
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55148

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



55179
55180
55181
55182
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55179

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

#with_query(params) ⇒ Object



55170
55171
55172
55173
55174
55175
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55170

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