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.



73137
73138
73139
73140
73141
73142
73143
73144
73145
73146
73147
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73137

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.



73135
73136
73137
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73135

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



73135
73136
73137
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73135

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



73135
73136
73137
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73135

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



73195
73196
73197
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73195

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

#do_request(klass) ⇒ Object



73219
73220
73221
73222
73223
73224
73225
73226
73227
73228
73229
73230
73231
73232
73233
73234
73235
73236
73237
73238
73239
73240
73241
73242
73243
73244
73245
73246
73247
73248
73249
73250
73251
73252
73253
73254
73255
73256
73257
73258
73259
73260
73261
73262
73263
73264
73265
73266
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73219

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



73191
73192
73193
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73191

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

#options(&block) ⇒ Object



73199
73200
73201
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73199

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

#patch(&block) ⇒ Object



73215
73216
73217
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73215

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

#post(&block) ⇒ Object



73203
73204
73205
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73203

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

#put(&block) ⇒ Object



73207
73208
73209
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73207

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

#with_auth(auth) ⇒ Object



73159
73160
73161
73162
73163
73164
73165
73166
73167
73168
73169
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73159

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



73185
73186
73187
73188
73189
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73185

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

#with_header(name, value) ⇒ Object



73149
73150
73151
73152
73153
73154
73155
73156
73157
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73149

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



73180
73181
73182
73183
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73180

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

#with_query(params) ⇒ Object



73171
73172
73173
73174
73175
73176
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 73171

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