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.



28120
28121
28122
28123
28124
28125
28126
28127
28128
28129
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28120

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.



28118
28119
28120
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28118

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



28177
28178
28179
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28177

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

#do_request(klass) ⇒ Object



28201
28202
28203
28204
28205
28206
28207
28208
28209
28210
28211
28212
28213
28214
28215
28216
28217
28218
28219
28220
28221
28222
28223
28224
28225
28226
28227
28228
28229
28230
28231
28232
28233
28234
28235
28236
28237
28238
28239
28240
28241
28242
28243
28244
28245
28246
28247
28248
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28201

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



28173
28174
28175
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28173

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

#options(&block) ⇒ Object



28181
28182
28183
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28181

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

#patch(&block) ⇒ Object



28197
28198
28199
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28197

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

#post(&block) ⇒ Object



28185
28186
28187
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28185

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

#put(&block) ⇒ Object



28189
28190
28191
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28189

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

#with_auth(auth) ⇒ Object



28141
28142
28143
28144
28145
28146
28147
28148
28149
28150
28151
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28141

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



28167
28168
28169
28170
28171
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28167

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

#with_header(name, value) ⇒ Object



28131
28132
28133
28134
28135
28136
28137
28138
28139
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28131

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



28162
28163
28164
28165
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28162

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

#with_query(params) ⇒ Object



28153
28154
28155
28156
28157
28158
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28153

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