Class: Vacuum::Request::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/vacuum/request/base.rb

Overview

An Amazon Web Services (AWS) API request.

Direct Known Subclasses

MWS, ProductAdvertising

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&blk) ⇒ Base

Creates a new request for given locale and credentials.

Yields the AWS API endpoint if a block is given.



11
12
13
14
15
16
# File 'lib/vacuum/request/base.rb', line 11

def initialize(&blk)
  @parameters = {}
  @endpoint = Endpoint.const_get(class_basename).new

  configure &blk if block_given?
end

Instance Attribute Details

#endpointObject (readonly)

Returns the AWS API Endpoint.



6
7
8
# File 'lib/vacuum/request/base.rb', line 6

def endpoint
  @endpoint
end

Instance Method Details

#build(hsh) ⇒ Object

Adds given parameters to the request.

hsh - A Hash of parameter key and value pairs.

Returns self.



23
24
25
26
27
28
29
30
# File 'lib/vacuum/request/base.rb', line 23

def build(hsh)
  hsh.each do |k, v|
    k = Utils.camelize k.to_s if k.is_a? Symbol
    @parameters[k] = v.is_a?(Array) ? v.join(',') : v.to_s
  end

  self
end

#build!(hsh = {}) ⇒ Object

Resets the request to the given parameters.

hsh - A Hash of parameter key and value pairs.

Returns self.



37
38
39
40
# File 'lib/vacuum/request/base.rb', line 37

def build!(hsh = {})
  @parameters = {}
  build hsh
end

#configure {|@endpoint| ... } ⇒ Object

Yields the AWS API Endpoint.

Returns nothing.

Yields:



45
46
47
# File 'lib/vacuum/request/base.rb', line 45

def configure(&blk)
  yield @endpoint
end

#connectionObject

Returns a Faraday::Connection.

Yields a Faraday::Builder to configure the connection if a block is given.



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/vacuum/request/base.rb', line 53

def connection
  @connection ||= Faraday.new do |builder|
    builder.use Signature::Authentication, endpoint.secret

    yield builder if block_given?

    unless builder.handlers.any? { |h| h.name.include? ':Adapter:' }
      builder.adapter Faraday.default_adapter
    end
  end
end

#getObject

Performs the AWS API request.

Returns a Vacuum::Response::Base or a subclass thereof.



68
69
70
71
# File 'lib/vacuum/request/base.rb', line 68

def get
  res = connection.get url
  Response.const_get(class_basename).new res.body, res.status
end

#get!Object

Performs the AWS API request.

Raises a Bad Response if the response is not valid.

Returns a Vacuum::Response::Base or a subclass thereof.



78
79
80
81
82
83
84
# File 'lib/vacuum/request/base.rb', line 78

def get!
  unless (res = get).valid?
    raise BadResponse, "#{res.code} #{res['Code'].first}"
  end

  res
end

#parametersObject

Returns the Hash parameters of the AWS API request.



87
88
89
# File 'lib/vacuum/request/base.rb', line 87

def parameters
  default_parameters.merge @parameters
end

#urlObject

Raises a Not Implemented Error.

When implemented, this should return an Addressable::URI.

Raises:

  • (NotImplementedError)


94
95
96
# File 'lib/vacuum/request/base.rb', line 94

def url
  raise NotImplementedError
end