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.



55141
55142
55143
55144
55145
55146
55147
55148
55149
55150
55151
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55141

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.



55139
55140
55141
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55139

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



55139
55140
55141
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55139

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



55139
55140
55141
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55139

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



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

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

#do_request(klass) ⇒ Object



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
55266
55267
55268
55269
55270
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55223

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



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

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

#options(&block) ⇒ Object



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

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

#patch(&block) ⇒ Object



55219
55220
55221
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55219

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

#post(&block) ⇒ Object



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

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

#put(&block) ⇒ Object



55211
55212
55213
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55211

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

#with_auth(auth) ⇒ Object



55163
55164
55165
55166
55167
55168
55169
55170
55171
55172
55173
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55163

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



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

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

#with_header(name, value) ⇒ Object



55153
55154
55155
55156
55157
55158
55159
55160
55161
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55153

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



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

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

#with_query(params) ⇒ Object



55175
55176
55177
55178
55179
55180
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 55175

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