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.



28253
28254
28255
28256
28257
28258
28259
28260
28261
28262
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28253

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.



28251
28252
28253
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28251

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



28310
28311
28312
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28310

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

#do_request(klass) ⇒ Object



28334
28335
28336
28337
28338
28339
28340
28341
28342
28343
28344
28345
28346
28347
28348
28349
28350
28351
28352
28353
28354
28355
28356
28357
28358
28359
28360
28361
28362
28363
28364
28365
28366
28367
28368
28369
28370
28371
28372
28373
28374
28375
28376
28377
28378
28379
28380
28381
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28334

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



28306
28307
28308
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28306

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

#options(&block) ⇒ Object



28314
28315
28316
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28314

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

#patch(&block) ⇒ Object



28330
28331
28332
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28330

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

#post(&block) ⇒ Object



28318
28319
28320
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28318

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

#put(&block) ⇒ Object



28322
28323
28324
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28322

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

#with_auth(auth) ⇒ Object



28274
28275
28276
28277
28278
28279
28280
28281
28282
28283
28284
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28274

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



28300
28301
28302
28303
28304
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28300

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

#with_header(name, value) ⇒ Object



28264
28265
28266
28267
28268
28269
28270
28271
28272
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28264

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



28295
28296
28297
28298
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28295

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

#with_query(params) ⇒ Object



28286
28287
28288
28289
28290
28291
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28286

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