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.



23178
23179
23180
23181
23182
23183
23184
23185
23186
23187
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23178

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.



23176
23177
23178
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23176

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



23235
23236
23237
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23235

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

#do_request(klass) ⇒ Object



23259
23260
23261
23262
23263
23264
23265
23266
23267
23268
23269
23270
23271
23272
23273
23274
23275
23276
23277
23278
23279
23280
23281
23282
23283
23284
23285
23286
23287
23288
23289
23290
23291
23292
23293
23294
23295
23296
23297
23298
23299
23300
23301
23302
23303
23304
23305
23306
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23259

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



23231
23232
23233
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23231

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

#options(&block) ⇒ Object



23239
23240
23241
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23239

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

#patch(&block) ⇒ Object



23255
23256
23257
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23255

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

#post(&block) ⇒ Object



23243
23244
23245
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23243

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

#put(&block) ⇒ Object



23247
23248
23249
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23247

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

#with_auth(auth) ⇒ Object



23199
23200
23201
23202
23203
23204
23205
23206
23207
23208
23209
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23199

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



23225
23226
23227
23228
23229
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23225

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

#with_header(name, value) ⇒ Object



23189
23190
23191
23192
23193
23194
23195
23196
23197
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23189

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



23220
23221
23222
23223
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23220

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

#with_query(params) ⇒ Object



23211
23212
23213
23214
23215
23216
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 23211

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