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



41109
41110
41111
41112
41113
41114
41115
41116
41117
41118
41119
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41109

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.



41107
41108
41109
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41107

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



41107
41108
41109
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41107

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



41107
41108
41109
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41107

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



41167
41168
41169
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41167

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

#do_request(klass) ⇒ Object



41191
41192
41193
41194
41195
41196
41197
41198
41199
41200
41201
41202
41203
41204
41205
41206
41207
41208
41209
41210
41211
41212
41213
41214
41215
41216
41217
41218
41219
41220
41221
41222
41223
41224
41225
41226
41227
41228
41229
41230
41231
41232
41233
41234
41235
41236
41237
41238
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41191

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)

  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



41163
41164
41165
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41163

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

#options(&block) ⇒ Object



41171
41172
41173
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41171

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

#patch(&block) ⇒ Object



41187
41188
41189
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41187

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

#post(&block) ⇒ Object



41175
41176
41177
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41175

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

#put(&block) ⇒ Object



41179
41180
41181
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41179

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

#with_auth(auth) ⇒ Object



41131
41132
41133
41134
41135
41136
41137
41138
41139
41140
41141
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41131

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



41157
41158
41159
41160
41161
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41157

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

#with_header(name, value) ⇒ Object



41121
41122
41123
41124
41125
41126
41127
41128
41129
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41121

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



41152
41153
41154
41155
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41152

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

#with_query(params) ⇒ Object



41143
41144
41145
41146
41147
41148
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41143

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