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.



35123
35124
35125
35126
35127
35128
35129
35130
35131
35132
35133
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35123

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.



35121
35122
35123
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35121

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



35121
35122
35123
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35121

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



35121
35122
35123
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35121

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



35181
35182
35183
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35181

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

#do_request(klass) ⇒ Object



35205
35206
35207
35208
35209
35210
35211
35212
35213
35214
35215
35216
35217
35218
35219
35220
35221
35222
35223
35224
35225
35226
35227
35228
35229
35230
35231
35232
35233
35234
35235
35236
35237
35238
35239
35240
35241
35242
35243
35244
35245
35246
35247
35248
35249
35250
35251
35252
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35205

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



35177
35178
35179
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35177

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

#options(&block) ⇒ Object



35185
35186
35187
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35185

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

#patch(&block) ⇒ Object



35201
35202
35203
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35201

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

#post(&block) ⇒ Object



35189
35190
35191
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35189

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

#put(&block) ⇒ Object



35193
35194
35195
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35193

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

#with_auth(auth) ⇒ Object



35145
35146
35147
35148
35149
35150
35151
35152
35153
35154
35155
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35145

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



35171
35172
35173
35174
35175
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35171

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

#with_header(name, value) ⇒ Object



35135
35136
35137
35138
35139
35140
35141
35142
35143
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35135

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



35166
35167
35168
35169
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35166

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

#with_query(params) ⇒ Object



35157
35158
35159
35160
35161
35162
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 35157

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