aws-sdk 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,7 +16,6 @@ require 'aws/inflection'
16
16
  require 'aws/naming'
17
17
  require 'aws/response'
18
18
  require 'aws/async_handle'
19
- require 'aws/configurable'
20
19
  require 'aws/http/handler'
21
20
  require 'aws/http/request'
22
21
  require 'aws/http/response'
@@ -32,7 +31,6 @@ module AWS
32
31
  # @private
33
32
  class BaseClient
34
33
 
35
- include Configurable
36
34
  include ClientLogging
37
35
 
38
36
  extend Naming
@@ -281,6 +279,7 @@ module AWS
281
279
  code = nil
282
280
  code = xml_error_grammar.parse(response.http_response.body).code if
283
281
  xml_error_response?(response)
282
+
284
283
 
285
284
  case
286
285
  when response.timeout?
@@ -306,7 +305,6 @@ module AWS
306
305
  response.http_response.status >= 300 and
307
306
  response.http_response.body and
308
307
  xml_error_grammar.parse(response.http_response.body).respond_to?(:code)
309
-
310
308
  end
311
309
 
312
310
  protected
@@ -433,15 +431,17 @@ module AWS
433
431
 
434
432
  end
435
433
 
436
- # defined using MetaUtils so it can be extended by
437
- # modules such as ConfiguredClientMethods
438
- MetaUtils.extend_method(self, :configure_client) do
434
+ protected
435
+ def self.configure_client
439
436
 
440
437
  module_eval('module Options; end')
441
438
  module_eval('module XML; end')
442
439
 
443
- make_configurable :"#{service_ruby_name}_client",
444
- :needs => [:signer, :http_handler]
440
+ name = :"#{service_ruby_name}_client"
441
+ needs = [:signer, :http_handler]
442
+ create_block = lambda {|config| new(:config => config) }
443
+
444
+ Configuration.add_option_with_needs(name, needs, &create_block)
445
445
 
446
446
  end
447
447
 
@@ -19,7 +19,7 @@ require 'aws/response_cache'
19
19
  module AWS
20
20
 
21
21
  # Current version of the AWS SDK for Ruby
22
- VERSION = "1.1.0"
22
+ VERSION = "1.1.1"
23
23
 
24
24
  class << self
25
25
 
@@ -51,72 +51,102 @@ module AWS
51
51
  #
52
52
  # @note Changing the global configuration does not affect objects
53
53
  # that have already been constructed.
54
+ #
54
55
  # @param [Hash] options
55
- # @option options [String] :access_key_id Your account access key
56
- # id credential.
57
- # @option options [String] :secret_access_key Your account secret
58
- # access key credential.
56
+ # @option options [String] :access_key_id (nil) AWS access key id
57
+ # credential.
58
+ # @option options [String] :ec2_endpoint ('ec2.amazonaws.com') The
59
+ # service endpoint for Amazon EC2.
60
+ # @option options [Object] :http_handler (AWS::HTTPartyHandler) The
61
+ # http handler that sends requests to AWS.
62
+ # @option options [String] :iam_endpoint ('iam.amazonaws.com') The
63
+ # service endpoint for AWS Idenity Access Management (IAM).
64
+ # @option options [Object,nil] :logger (nil) A logger instance that
65
+ # should receive log messages generated by service requets.
66
+ # A logger needs to respond to #log and must accept a
67
+ # severity (e.g. :info, :error, etc) and a string message.
59
68
  # @option options [Integer] :max_retries (3) The maximum number of times
60
69
  # service errors (500) should be retried. There is an exponential
61
70
  # backoff in between service request retries, so the more retries the
62
71
  # longer it can take to fail.
63
- # @option options [String] :ec2_endpoint ('ec2.amazonaws.com') The
64
- # service endpoint to use when communicating with Amazon EC2.
65
- # @option options :http_handler The request/response handler
66
- # for all service requests. The default handler uses HTTParty to
67
- # send requests.
68
- # @option options :logger (nil) A logger instance that should receive log
69
- # messages generated by service requets. A logger needs to respond to
70
- # #log and must accept a severity (e.g. :info, :error, etc) and
71
- # a string message.
72
72
  # @option options [String, URI, nil] :proxy_uri (nil) The URI of the proxy
73
73
  # to send service requests through. You can pass a URI object or a
74
74
  # URI string:
75
75
  #
76
76
  # AWS.config(:proxy_uri => 'https://user:password@my.proxy:443/path?query')
77
- #
78
- # @option options [String] :s3_endpoint ('s3.amazonaws.com') The
79
- # service endpoint to use when communicating with Amazon S3.
80
- # @option [Integer] :s3_multipart_threshold (16777216) When uploading
81
- # data to S3, if the number of bytes to send exceedes
77
+ #
78
+ # @option options [String] :s3_endpoint ('s3.amazonaws.com') The
79
+ # service endpoint for Amazon S3.
80
+ #
81
+ # @option options [Integer] :s3_multipart_max_parts (1000) The maximum
82
+ # number of parts to split a file into when uploading in parts to S3.
83
+ #
84
+ # @option options [Integer] :s3_multipart_threshold (16777216) When
85
+ # uploading data to S3, if the number of bytes to send exceedes
82
86
  # +:s3_multipart_threshold+ then a multi part session is automatically
83
87
  # started and the data is sent up in chunks. The size of each part
84
- # is specified by +:s3_multipart_min_part_size+.
85
- # @option [Integer] :s3_multipart_min_part_size (5242880)
86
- # @option [Integer] :s3_multipart_max_parts (1000)
87
- # @option options [Boolean] :simple_db_consistent_reads (false) When true
88
- # all read operations against SimpleDB will be consistent reads (slower).
88
+ # is specified by +:s3_multipart_min_part_size+. Defaults to
89
+ # 16777216 (16MB).
90
+ #
91
+ # @option options [Integer] :s3_multipart_min_part_size (5242880) The
92
+ # absolute minimum size (in bytes) each S3 multipart segment should be.
93
+ # Defaults to 5242880 (5MB).
94
+ #
95
+ # @option options [String] :secret_access_key (nil) AWS secret access
96
+ # key credential.
97
+ #
98
+ # @option options [String,nil] :session_token (nil) AWS secret token
99
+ # credential.
100
+ #
89
101
  # @option options [String] :simple_db_endpoint ('sdb.amazonaws.com') The
90
- # service endpoint to use when communicating with Amazon SimpleDB.
91
- # @option options [String] :simple_email_service_endpoint ('email.us-east-1.amazonaws.com')
92
- # The service endpoint to use when communicating with Amazon
93
- # SimpleEmailService.
94
- # @option options :signer The request signer. Defaults to a
95
- # {DefaultSigner}.
96
- # @option options [String] :sns_endpoint ('sns.us-east-1.amazonaws.com')
97
- # The service endpoint to use when communicating with Amazon SNS.
98
- # @option options [String] :sqs_endpoint ('sqs.us-east-1.amazonaws.com')
99
- # The service endpoint to use when communicating with Amazon SQS.
100
- # @option options :stub_requests (false) When true no requests will be
101
- # made against the live service. Responses returned will have empty
102
- # values. This is primarily used for writing tests.
103
- # @option options [Boolean] :use_ssl (true) When true, all requests are
104
- # sent over SSL.
105
- # @option options [Boolean] :ssl_verify_peer (true) True if the HTTPS
106
- # client should validate the server certificate. *Note:* This
107
- # option should only be used for diagnostic purposes; leaving
108
- # this option set to +false+ exposes your application to
102
+ # service endpoint for Amazon SimpleDB.
103
+ #
104
+ # @option options [Boolean] :simple_db_consistent_reads (false) Determines
105
+ # if all SimpleDB read requests should be done consistently.
106
+ # Consistent reads are slower, but reflect all changes to SDB.
107
+ #
108
+ # @option options [String] :simple_email_service_endpoint ('email.us-east-1.amazonaws.com')
109
+ # The service endpoint for Amazon Simple Email Service.
110
+ #
111
+ # @option options [Object] :signer (AWS::DefaultSigner) The request signer. Defaults to
112
+ # a default request signer implementation.
113
+ #
114
+ # @option options [String] :ssl_ca_file The path to a CA cert bundle in
115
+ # PEM format.
116
+ #
117
+ # If +:ssl_verify_peer+ is +true+ (the default) this bundle will be
118
+ # used to validate the server certificate in each HTTPS request.
119
+ # The AWS SDK for Ruby ships with a CA cert bundle, which is the
120
+ # default value for this option.
121
+ #
122
+ # @option options [Boolean] :ssl_verify_peer (true) When +true+
123
+ # the HTTP handler validate server certificates for HTTPS requests.
124
+ #
125
+ # This option should only be disabled for diagnostic purposes;
126
+ # leaving this option set to +false+ exposes your application to
109
127
  # man-in-the-middle attacks and can pose a serious security
110
128
  # risk.
111
- # @option options [String] :ssl_ca_file The path to a CA cert
112
- # bundle in PEM format. If +:ssl_verify_peer+ is true (the
113
- # default) this bundle will be used to validate the server
114
- # certificate in each HTTPS request. The AWS SDK for Ruby ships
115
- # with a CA cert bundle, which is the default value for this
116
- # option.
129
+ #
130
+ # @option options[Boolean] :stub_requests (false) When +true+ requests
131
+ # are not sent to AWS, instead empty reponses are generated and
132
+ # returned to each service request.
133
+ #
134
+ # @option options [String] :sns_endpoint ('sns.us-east-1.amazonaws.com') The
135
+ # service endpoint for Amazon SNS.
136
+ #
137
+ # @option options [String] :sqs_endpoint ('sqs.us-east-1.amazonaws.com') The
138
+ # service endpoint for Amazon SQS.
139
+ #
140
+ # @option options [String] :sts_endpoint ('sts.amazonaws.com') The
141
+ # service endpoint for AWS Security Token Service.
142
+ #
143
+ # @option options [Boolean] :use_ssl (true) When +true+, all requests
144
+ # to AWS are sent using HTTPS instead vanilla HTTP.
145
+ #
117
146
  # @option options [String] :user_agent_prefix (nil) A string prefix to
118
147
  # append to all requets against AWS services. This should be set
119
148
  # for clients and applications built ontop of the aws-sdk gem.
149
+ #
120
150
  # @return [Configuration] Returns the new configuration.
121
151
  def config options = {}
122
152
  @@config ||= Configuration.new
@@ -56,6 +56,114 @@ module AWS
56
56
  #
57
57
  # The global default configuration can be found at {AWS.config}
58
58
  #
59
+ # @attr_reader [String,nil] access_key_id AWS access key id credential.
60
+ # Defaults to +nil+.
61
+ #
62
+ # @attr_reader [String] ec2_endpoint The service endpoint for Amazon EC2.
63
+ # Defaults to 'ec2.amazonaws.com'.
64
+ #
65
+ # @attr_reader [Object] http_handler The http handler that sends requests
66
+ # to AWS. Defaults to an {AWS::HTTPartyHandler}.
67
+ #
68
+ # @attr_reader [String] iam_endpoint The service endpoint for AWS Idenity
69
+ # Access Management (IAM). Defaults to 'iam.amazonaws.com'.
70
+ #
71
+ # @attr_reader [Object,nil] logger A logger instance that
72
+ # should receive log messages generated by service requets.
73
+ # A logger needs to respond to #log and must accept a
74
+ # severity (e.g. :info, :error, etc) and a string message.
75
+ # Defaults to +nil+.
76
+ #
77
+ # @attr_reader [Integer] max_retries The maximum number of times
78
+ # service errors (500) should be retried. There is an exponential
79
+ # backoff in between service request retries, so the more retries the
80
+ # longer it can take to fail. Defautls to 3.
81
+ #
82
+ # @attr_reader [String, URI, nil] proxy_uri The URI of the proxy
83
+ # to send service requests through. You can pass a URI object or a
84
+ # URI string. Defautls to +nil+.
85
+ #
86
+ # AWS.config(:proxy_uri => 'https://user:password@my.proxy:443/path?query')
87
+ #
88
+ #
89
+ # @attr_reader [String] s3_endpoint The service endpoint for Amazon S3.
90
+ # Defaults to 's3.amazonaws.com'.
91
+ #
92
+ # @attr_reader [Integer] s3_multipart_max_parts The maximum number of
93
+ # parts to split a file into when uploading in parts to S3.
94
+ # Defaults to 1000.
95
+ #
96
+ # @attr_reader [Integer] s3_multipart_threshold (16777216) When uploading
97
+ # data to S3, if the number of bytes to send exceedes
98
+ # +:s3_multipart_threshold+ then a multi part session is automatically
99
+ # started and the data is sent up in chunks. The size of each part
100
+ # is specified by +:s3_multipart_min_part_size+. Defaults to
101
+ # 16777216 (16MB).
102
+ #
103
+ # @attr_reader [Integer] s3_multipart_min_part_size The absolute minimum
104
+ # size (in bytes) each S3 multipart segment should be.
105
+ # Defaults to 5242880 (5MB).
106
+ #
107
+ # @attr_reader [String,nil] secret_access_key AWS secret access key
108
+ # credential. Defaults to +nil+.
109
+ #
110
+ # @attr_reader [String,nil] session_token AWS secret token credential.
111
+ # Defaults to +nil+.
112
+ #
113
+ # @attr_reader [String] simple_db_endpoint The service endpoint for Amazon
114
+ # SimpleDB. Defaults to 'sdb.amazonaws.com'.
115
+ #
116
+ # @attr_reader [Boolean] simple_db_consistent_reads Determines
117
+ # if all SimpleDB read requests should be done consistently.
118
+ # Consistent reads are slower, but reflect all changes to SDB.
119
+ # Defaults to +false+.
120
+ #
121
+ # @attr_reader [String] simple_email_service_endpoint The service endpoint
122
+ # for Amazon Simple Email Service. Defaults to
123
+ # 'email.us-east-1.amazonaws.com'.
124
+ #
125
+ # @attr_reader [Object] signer The request signer. Defaults to
126
+ # a default request signer implementation.
127
+ #
128
+ # @attr_reader [String] ssl_ca_file The path to a CA cert bundle in
129
+ # PEM format.
130
+ #
131
+ # If +ssl_verify_peer+ is true (the default) this bundle will be
132
+ # used to validate the server certificate in each HTTPS request.
133
+ # The AWS SDK for Ruby ships with a CA cert bundle, which is the
134
+ # default value for this option.
135
+ #
136
+ # @attr_reader [Boolean] ssl_verify_peer When +true+
137
+ # the HTTP handler validate server certificates for HTTPS requests.
138
+ # Defaults to +true+.
139
+ #
140
+ # This option should only be disabled for diagnostic purposes;
141
+ # leaving this option set to +false+ exposes your application to
142
+ # man-in-the-middle attacks and can pose a serious security
143
+ # risk.
144
+ #
145
+ # @attr_reader [Boolean] stub_requests When +true+ requests are not
146
+ # sent to AWS, instead empty reponses are generated and returned to
147
+ # each service request.
148
+ #
149
+ # @attr_reader [String] sns_endpoint The service endpoint for Amazon SNS.
150
+ # Defaults to 'sns.us-east-1.amazonaws.com'.
151
+ #
152
+ # @attr_reader [String] sqs_endpoint The service endpoint for Amazon SQS.
153
+ # Defaults to 'sqs.us-east-1.amazonaws.com'.
154
+ #
155
+ # @attr_reader [String] sts_endpoint The service endpoint for AWS
156
+ # Security Token Service. Defaults to 'sts.amazonaws.com'.
157
+ #
158
+ # @attr_reader [Boolean] use_ssl When +true+, all requests
159
+ # to AWS are sent using HTTPS instead vanilla HTTP.
160
+ # Defaults to +true+.
161
+ #
162
+ # @attr_reader [String] user_agent_prefix A string prefix to
163
+ # append to all requets against AWS services. This should be set
164
+ # for clients and applications built ontop of the aws-sdk gem.
165
+ # Defaults to +nil+.
166
+ #
59
167
  class Configuration
60
168
 
61
169
  # Creates a new Configuration object.
@@ -63,75 +171,17 @@ module AWS
63
171
  # @option options (see AWS.config)
64
172
  def initialize options = {}
65
173
 
66
- @create_options = options.delete(:__create_options__) || {}
67
-
68
- @overridden = options.delete(:__overridden__) ||
69
- Set.new(options.keys.map { |k| k.to_sym })
70
-
71
- @options = {
72
- :ec2_endpoint => 'ec2.amazonaws.com',
73
- :http_handler => Http::HTTPartyHandler.new,
74
- :max_retries => 3,
75
- :iam_endpoint => 'iam.amazonaws.com',
76
- :s3_endpoint => 's3.amazonaws.com',
77
- :s3_multipart_threshold => 16 * 1024 * 1024,
78
- :s3_multipart_min_part_size => 5 * 1024 * 1024,
79
- :s3_multipart_max_parts => 10000,
80
- :simple_db_endpoint => 'sdb.amazonaws.com',
81
- :simple_db_consistent_reads => false,
82
- :simple_email_service_endpoint => 'email.us-east-1.amazonaws.com',
83
- :sns_endpoint => 'sns.us-east-1.amazonaws.com',
84
- :sqs_endpoint => 'sqs.us-east-1.amazonaws.com',
85
- :sts_endpoint => 'sts.amazonaws.com',
86
- :stub_requests => false,
87
- :proxy_uri => nil,
88
- :use_ssl => true,
89
- :user_agent_prefix => nil,
90
- :ssl_verify_peer => true,
91
- :ssl_ca_file => File.expand_path(File.dirname(__FILE__)+
92
- "/../../ca-bundle.crt")
93
- }
94
-
95
- {
96
- 'AWS_ACCESS_KEY_ID' => :access_key_id,
97
- 'AWS_SECRET_ACCESS_KEY' => :secret_access_key,
98
- 'AMAZON_ACCESS_KEY_ID' => :access_key_id,
99
- 'AMAZON_SECRET_ACCESS_KEY' => :secret_access_key,
100
- }.each_pair do |env_key, opt_key|
101
- if ENV[env_key]
102
- @options[opt_key] = ENV[env_key]
103
- end
104
- end
174
+ @created = options.delete(:__created__) || {}
105
175
 
106
- options.each do |(k,v)|
107
- @options[k.to_sym] = v
176
+ options.each_pair do |opt_name, value|
177
+ opt_name = opt_name.to_sym
178
+ if self.class.accepted_options.include?(opt_name)
179
+ supplied[opt_name] = value
180
+ end
108
181
  end
109
182
 
110
183
  end
111
184
 
112
- # @return [Boolean] Returns true if web service requets should be
113
- # made with HTTPS.
114
- def use_ssl?
115
- @options[:use_ssl]
116
- end
117
- alias_method :use_ssl, :use_ssl?
118
-
119
- # @return [String] Your AWS account access key id credential.
120
- def access_key_id
121
- @options[:access_key_id]
122
- end
123
-
124
- # @return [String] Your AWS secret access key credential.
125
- def secret_access_key
126
- @options[:secret_access_key]
127
- end
128
-
129
- # @return [String] Your AWS session token credential.
130
- # @see STS
131
- def session_token
132
- @options[:session_token]
133
- end
134
-
135
185
  # Used to create a new Configuration object with the given modifications.
136
186
  # The current configuration object is not modified.
137
187
  #
@@ -153,172 +203,155 @@ module AWS
153
203
  # @return [Configuration] Copies the current configuration and returns
154
204
  # a new one with modifications as provided in +:options+.
155
205
  def with options = {}
156
- overridden = @overridden + options.keys.map { |k| k.to_sym }
157
- self.class.new(@options.merge(options).
158
- merge(:__create_options__ => @create_options,
159
- :__overridden__ => overridden))
160
- end
161
206
 
162
- # @return [Integer] Maximum number of times to retry server errors.
163
- def max_retries
164
- @options[:max_retries]
165
- end
207
+ # symbolize option keys
208
+ options = options.inject({}) {|h,kv| h[kv.first.to_sym] = kv.last; h }
166
209
 
167
- # @return [String] The service endpoint for AWS Idenity Access
168
- # Management (IAM).
169
- def iam_endpoint
170
- @options[:iam_endpoint]
171
- end
210
+ values = supplied.merge(options)
172
211
 
173
- # @return [String] The service endpoint for Amazon S3.
174
- def s3_endpoint
175
- @options[:s3_endpoint]
176
- end
212
+ if supplied == values
213
+ self # nothing changed
214
+ else
215
+ self.class.new(values.merge(:__created__ => @created))
216
+ end
177
217
 
178
- # @return [String] The default service endpoint for Amazon EC2.
179
- def ec2_endpoint
180
- @options[:ec2_endpoint]
181
218
  end
182
219
 
183
- # @return [String] The service endpoint for Amazon SimpleDB.
184
- def simple_db_endpoint
185
- @options[:simple_db_endpoint]
220
+ # @return [Hash] Returns a hash of all configuration values.
221
+ def to_h
222
+ self.class.accepted_options.inject({}) do |h,k|
223
+ h[k] = send(k)
224
+ h
225
+ end
186
226
  end
187
227
 
188
- # @return [String] The service endpoint for Amazon SimpleEmailService.
189
- def simple_email_service_endpoint
190
- @options[:simple_email_service_endpoint]
228
+ # @return [Boolean] Returns true if the two configuration objects have
229
+ # the same values.
230
+ def == other
231
+ other.is_a?(self.class) and self.supplied == other.supplied
191
232
  end
192
233
 
193
- # @return [String] The service endpoint for Amazon SNS.
194
- def sns_endpoint
195
- @options[:sns_endpoint]
196
- end
234
+ alias_method :eql, :==
197
235
 
198
- # @return [String] The service endpoint for Amazon SQS.
199
- def sqs_endpoint
200
- @options[:sqs_endpoint]
236
+ # @private
237
+ def inspect
238
+ "<#{self.class.name}>"
201
239
  end
202
240
 
203
- # @return [String] The service endpoint for AWS Security Token Service.
204
- def sts_endpoint
205
- @options[:sts_endpoint]
241
+ protected
242
+ def supplied
243
+ @supplied ||= {}
206
244
  end
207
245
 
208
- # @return [Boolean] Returns true if all reads to SimpleDB default to
209
- # consistent reads.
210
- def simple_db_consistent_reads?
211
- @options[:simple_db_consistent_reads]
212
- end
246
+ class << self
213
247
 
214
- # @return [String,nil] Returns the prefix that is appended to the
215
- # user agent string that is sent with all requests to AWS.
216
- def user_agent_prefix
217
- @options[:user_agent_prefix]
218
- end
248
+ # @private
249
+ def accepted_options
250
+ @options ||= Set.new
251
+ end
219
252
 
220
- # @return [Object] Returns the current http handler.
221
- def http_handler
222
- @options[:http_handler]
223
- end
253
+ # @private
254
+ def add_option name, default_value = nil, options = {}, &transform
224
255
 
225
- # @return [Object] Returns the current request signer.
226
- def signer
227
- return @options[:signer] if @options[:signer]
228
- raise "Missing credentials" unless access_key_id and secret_access_key
229
- @options[:signer] ||=
230
- DefaultSigner.new(access_key_id, secret_access_key, session_token)
231
- end
256
+ accepted_options << name
232
257
 
233
- # @return [Object,nil] Returns the current logger.
234
- def logger
235
- @options[:logger]
236
- end
258
+ define_method(name) do
259
+ value = supplied.has_key?(name) ? supplied[name] : default_value
260
+ transform ? transform.call(value) : value
261
+ end
237
262
 
238
- # @return [Boolean] Returns true if this configuration causes
239
- # all AWS requests to return stubbed (empty) responses without making a
240
- # request to the actual service.
241
- def stub_requests?
242
- @options[:stub_requests]
243
- end
263
+ alias_method("#{name}?", name) if options[:boolean]
244
264
 
245
- # @return [Integer] Returns the number of bytes where files larger
246
- # are uploaded to S3 in multiple parts.
247
- def s3_multipart_threshold
248
- @options[:s3_multipart_threshold]
249
- end
265
+ end
250
266
 
251
- # @return [Integer] The absolute minimum size (in bytes) each S3 multipart
252
- # segment should be.
253
- def s3_multipart_min_part_size
254
- @options[:s3_multipart_min_part_size]
255
- end
267
+ # Configuration options that have dependencies are re-recreated
268
+ # anytime one of their dependendent configuration values are
269
+ # changed.
270
+ # @private
271
+ def add_option_with_needs name, needs, &create_block
272
+
273
+ accepted_options << name
256
274
 
257
- # @return [Integer] The maximum number of parts to split a file into
258
- # when uploading to S3.
259
- def s3_multipart_max_parts
260
- @options[:s3_multipart_max_parts]
261
- end
275
+ define_method(name) do
262
276
 
263
- # @return [Boolean] True if the HTTPS client should validate the
264
- # server certificate.
265
- #
266
- # @note This option should only be used for diagnostic purposes;
267
- # leaving this option set to +false+ exposes your application to
268
- # man-in-the-middle attacks and can pose a serious security
269
- # risk.
270
- def ssl_verify_peer?
271
- @options[:ssl_verify_peer]
272
- end
277
+ return supplied[name] if supplied.has_key?(name)
273
278
 
274
- # @return [String] The path to a CA cert bundle in PEM format.
275
- #
276
- # If {#ssl_verify_peer?} is true (the default) this bundle will be
277
- # used to validate the server certificate in each HTTPS request.
278
- # The AWS SDK for Ruby ships with a CA cert bundle, which is the
279
- # default value for this option.
280
- def ssl_ca_file
281
- @options[:ssl_ca_file]
282
- end
279
+ needed = needs.collect{|need| send(need) }
283
280
 
284
- # @return [URI::HTTP, URI::HTTPS, nil] Returns the URI for the configured
285
- # proxy if there is one. Defaults to nil.
286
- def proxy_uri
287
- @options[:proxy_uri] ? URI.parse(@options[:proxy_uri].to_s) : nil
288
- end
281
+ unless @created.key?(name) and @created[name][:needed] == needed
282
+ @created[name] ||= {}
283
+ @created[name][:object] = create_block.call(self)
284
+ @created[name][:needed] = needed
285
+ end
286
+
287
+ @created[name][:object]
288
+
289
+ end
290
+
291
+ end
289
292
 
290
- # @private
291
- def inspect
292
- "<#{self.class}>"
293
293
  end
294
294
 
295
- class << self
295
+ add_option :access_key_id,
296
+ ENV['AWS_ACCESS_KEY_ID'] || ENV['AMAZON_ACCESS_KEY_ID']
296
297
 
297
- # @private
298
- def add_parameter_type(klass, name, options = {})
299
- if options[:needs]
300
- define_method(name) do
301
- unless @overridden.include?(name)
302
- create_options = { :config => self }
303
- options[:needs].each do |need|
304
- create_options[need] = send(need)
305
- end
306
- end
307
-
308
- return @options[name] if @options[name] and
309
- (@overridden.include?(name) or
310
- @create_options[name] == create_options)
311
-
312
- @create_options[name] = create_options
313
- @options[name] = klass.new(create_options)
314
- end
315
- else
316
- define_method(name) do
317
- @options[name] ||= klass.new(:config => self)
318
- end
319
- end
320
- end
298
+ add_option :ec2_endpoint, 'ec2.amazonaws.com'
299
+
300
+ add_option :s3_endpoint, 's3.amazonaws.com'
301
+
302
+ add_option :http_handler, Http::HTTPartyHandler.new
303
+
304
+ add_option :iam_endpoint, 'iam.amazonaws.com'
305
+
306
+ add_option :logger
307
+
308
+ add_option :max_retries, 3
309
+
310
+ add_option :proxy_uri do |uri| uri ? URI.parse(uri.to_s) : nil end
311
+
312
+ add_option :s3_multipart_threshold, 16 * 1024 * 1024
313
+
314
+ add_option :s3_multipart_min_part_size, 5 * 1024 * 1024
315
+
316
+ add_option :s3_multipart_max_parts, 10000
317
+
318
+ add_option :secret_access_key,
319
+ ENV['AWS_SECRET_ACCESS_KEY'] || ENV['AMAZON_SECRET_ACCESS_KEY']
320
+
321
+ add_option :session_token
322
+
323
+ add_option_with_needs :signer,
324
+ [:access_key_id, :secret_access_key, :session_token] do |config|
325
+
326
+ DefaultSigner.new(
327
+ config.access_key_id,
328
+ config.secret_access_key,
329
+ config.session_token)
321
330
 
322
331
  end
332
+
333
+ add_option :simple_db_endpoint, 'sdb.amazonaws.com'
334
+
335
+ add_option :simple_db_consistent_reads, false, :boolean => true
336
+
337
+ add_option :simple_email_service_endpoint, 'email.us-east-1.amazonaws.com'
338
+
339
+ add_option :sns_endpoint, 'sns.us-east-1.amazonaws.com'
340
+
341
+ add_option :sqs_endpoint, 'sqs.us-east-1.amazonaws.com'
342
+
343
+ add_option :ssl_verify_peer, true, :boolean => true
344
+
345
+ add_option :ssl_ca_file,
346
+ File.expand_path(File.dirname(__FILE__) + "/../../ca-bundle.crt")
347
+
348
+ add_option :sts_endpoint, 'sts.amazonaws.com'
349
+
350
+ add_option :stub_requests, false, :boolean => true
351
+
352
+ add_option :use_ssl, true, :boolean => true
353
+
354
+ add_option :user_agent_prefix
355
+
323
356
  end
324
357
  end
@@ -37,12 +37,14 @@ module AWS
37
37
  # @param [String] session_token The Session Token used to sign
38
38
  # requests. You can get credentials that include a session
39
39
  # token using the {STS} class.
40
- def initialize(access_key_id,
41
- secret_access_key,
42
- session_token = nil)
40
+ def initialize(access_key_id, secret_access_key, session_token = nil)
41
+
43
42
  @access_key_id = access_key_id
44
43
  @secret_access_key = secret_access_key
45
44
  @session_token = session_token
45
+
46
+ raise "Missing credentials" unless access_key_id and secret_access_key
47
+
46
48
  end
47
49
 
48
50
  # Signs a string using the credentials stored in memory.
@@ -108,7 +108,7 @@ module AWS
108
108
  # See {AccessKeyCollection} and {AccessKey} for more information about
109
109
  # working with access keys.
110
110
  #
111
- # = Users & Gropus
111
+ # = Users & Groups
112
112
  #
113
113
  # Each AWS account can have multiple users. Users can be used to easily
114
114
  # manage permissions. Users can also be organized into groups.
@@ -357,7 +357,8 @@ module AWS
357
357
  :key => key,
358
358
  :metadata => metadata,
359
359
  :secure => secure?,
360
- :content_length => content_length
360
+ :content_length => content_length,
361
+ :expires => expires
361
362
  }.merge(@fields).
362
363
  merge(opts))
363
364
  end
@@ -33,7 +33,11 @@ module AWS
33
33
  # @private
34
34
  protected
35
35
  def escape_path value
36
- value.split("/").map { |part| escape(part) }.join("/")
36
+ escaped = ""
37
+ value.scan(%r{(/?)([^/]+)(/?)}) do |(leading, part, trailing)|
38
+ escaped << leading + escape(part) + trailing
39
+ end
40
+ escaped
37
41
  end
38
42
 
39
43
  end
metadata CHANGED
@@ -1,93 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.1
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 1
9
- - 0
10
- version: 1.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Amazon Web Services
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-08-16 00:00:00 -07:00
12
+ date: 2011-08-18 00:00:00.000000000 -07:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: uuidtools
23
- prerelease: false
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &2163583560 !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
19
+ requirements:
27
20
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 1
30
- segments:
31
- - 2
32
- - 1
33
- version: "2.1"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.1'
34
23
  type: :runtime
35
- requirement: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: httparty
38
24
  prerelease: false
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *2163583560
26
+ - !ruby/object:Gem::Dependency
27
+ name: httparty
28
+ requirement: &2163582960 !ruby/object:Gem::Requirement
40
29
  none: false
41
- requirements:
30
+ requirements:
42
31
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 5
45
- segments:
46
- - 0
47
- - 7
48
- version: "0.7"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.7'
49
34
  type: :runtime
50
- requirement: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: nokogiri
53
35
  prerelease: false
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
36
+ version_requirements: *2163582960
37
+ - !ruby/object:Gem::Dependency
38
+ name: nokogiri
39
+ requirement: &2163582380 !ruby/object:Gem::Requirement
55
40
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 15
60
- segments:
61
- - 1
62
- - 4
63
- - 4
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
64
44
  version: 1.4.4
65
45
  type: :runtime
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: json
69
46
  prerelease: false
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
47
+ version_requirements: *2163582380
48
+ - !ruby/object:Gem::Dependency
49
+ name: json
50
+ requirement: &2163581800 !ruby/object:Gem::Requirement
71
51
  none: false
72
- requirements:
52
+ requirements:
73
53
  - - ~>
74
- - !ruby/object:Gem::Version
75
- hash: 7
76
- segments:
77
- - 1
78
- - 4
79
- version: "1.4"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.4'
80
56
  type: :runtime
81
- requirement: *id004
57
+ prerelease: false
58
+ version_requirements: *2163581800
82
59
  description: AWS SDK for Ruby
83
60
  email:
84
61
  executables: []
85
-
86
62
  extensions: []
87
-
88
63
  extra_rdoc_files: []
89
-
90
- files:
64
+ files:
91
65
  - ca-bundle.crt
92
66
  - rails/init.rb
93
67
  - lib/aws/api_config.rb
@@ -101,7 +75,6 @@ files:
101
75
  - lib/aws/client_logging.rb
102
76
  - lib/aws/collections.rb
103
77
  - lib/aws/common.rb
104
- - lib/aws/configurable.rb
105
78
  - lib/aws/configuration.rb
106
79
  - lib/aws/configured_client_methods.rb
107
80
  - lib/aws/configured_grammars.rb
@@ -339,37 +312,31 @@ files:
339
312
  - LICENSE.txt
340
313
  has_rdoc: true
341
314
  homepage: http://aws.amazon.com/sdkforruby
342
- licenses:
315
+ licenses:
343
316
  - Apache 2.0
344
317
  post_install_message:
345
318
  rdoc_options: []
346
-
347
- require_paths:
319
+ require_paths:
348
320
  - lib
349
- required_ruby_version: !ruby/object:Gem::Requirement
321
+ required_ruby_version: !ruby/object:Gem::Requirement
350
322
  none: false
351
- requirements:
352
- - - ">="
353
- - !ruby/object:Gem::Version
354
- hash: 3
355
- segments:
323
+ requirements:
324
+ - - ! '>='
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ segments:
356
328
  - 0
357
- version: "0"
358
- required_rubygems_version: !ruby/object:Gem::Requirement
329
+ hash: -2676721713860142099
330
+ required_rubygems_version: !ruby/object:Gem::Requirement
359
331
  none: false
360
- requirements:
361
- - - ">="
362
- - !ruby/object:Gem::Version
363
- hash: 3
364
- segments:
365
- - 0
366
- version: "0"
332
+ requirements:
333
+ - - ! '>='
334
+ - !ruby/object:Gem::Version
335
+ version: '0'
367
336
  requirements: []
368
-
369
337
  rubyforge_project:
370
- rubygems_version: 1.4.1
338
+ rubygems_version: 1.6.1
371
339
  signing_key:
372
340
  specification_version: 3
373
341
  summary: AWS SDK for Ruby
374
342
  test_files: []
375
-
@@ -1,36 +0,0 @@
1
- # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'aws/configuration'
15
-
16
- module AWS
17
-
18
- # @private
19
- module Configurable
20
-
21
- module ClassMethods
22
-
23
- def make_configurable(name, opts = {})
24
- Configuration.add_parameter_type(self, name, opts)
25
- end
26
-
27
- end
28
-
29
- def self.included(m)
30
- m.extend ClassMethods
31
- super
32
- end
33
-
34
- end
35
-
36
- end