aws-sdk 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/aws/api_config/{IAM-2010-07-15.yml → IAM-2010-05-08.yml} +56 -4
- data/lib/aws/api_config/SNS-2010-03-31.yml +90 -81
- data/lib/aws/core.rb +26 -11
- data/lib/aws/core/client.rb +12 -4
- data/lib/aws/core/collection.rb +5 -12
- data/lib/aws/core/collection/limitable.rb +10 -3
- data/lib/aws/core/collection/simple.rb +1 -0
- data/lib/aws/core/configuration.rb +2 -0
- data/lib/aws/core/configured_json_client_methods.rb +5 -2
- data/lib/aws/core/http/httparty_handler.rb +1 -1
- data/lib/aws/core/http/net_http_handler.rb +2 -1
- data/lib/aws/core/http/request.rb +27 -0
- data/lib/aws/core/json_client.rb +41 -0
- data/lib/aws/core/lazy_error_classes.rb +2 -0
- data/lib/aws/core/option_grammar.rb +1 -1
- data/lib/aws/core/resource.rb +12 -14
- data/lib/aws/core/session_signer.rb +0 -5
- data/lib/aws/core/xml_grammar.rb +12 -2
- data/lib/aws/dynamo_db.rb +4 -1
- data/lib/aws/dynamo_db/client.rb +4 -17
- data/lib/aws/dynamo_db/item_collection.rb +15 -0
- data/lib/aws/ec2/security_group.rb +2 -1
- data/lib/aws/ec2/security_group/ip_permission.rb +2 -3
- data/lib/aws/elb/listener.rb +2 -2
- data/lib/aws/iam.rb +17 -0
- data/lib/aws/iam/client.rb +9 -6
- data/lib/aws/iam/mfa_device.rb +4 -2
- data/lib/aws/iam/mfa_device_collection.rb +14 -3
- data/lib/aws/iam/user.rb +10 -0
- data/lib/aws/iam/virtual_mfa_device.rb +139 -0
- data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
- data/lib/aws/record/abstract_base.rb +1 -0
- data/lib/aws/record/hash_model/attributes.rb +8 -8
- data/lib/aws/record/hash_model/finder_methods.rb +10 -15
- data/lib/aws/record/model.rb +1 -3
- data/lib/aws/record/model/finder_methods.rb +3 -3
- data/lib/aws/s3.rb +1 -0
- data/lib/aws/s3/bucket.rb +83 -16
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +360 -0
- data/lib/aws/s3/client.rb +50 -0
- data/lib/aws/s3/client/xml.rb +10 -0
- data/lib/aws/s3/object_version.rb +5 -0
- data/lib/aws/s3/object_version_collection.rb +15 -1
- data/lib/aws/s3/request.rb +1 -1
- data/lib/aws/s3/s3_object.rb +56 -1
- data/lib/aws/sns.rb +1 -0
- data/lib/aws/sns/has_delivery_policy.rb +68 -0
- data/lib/aws/sns/subscription.rb +62 -14
- data/lib/aws/sns/subscription_collection.rb +1 -1
- data/lib/aws/sns/topic.rb +22 -4
- data/lib/aws/sts.rb +3 -2
- data/lib/net/http/connection_pool.rb +1 -1
- metadata +27 -25
- data/lib/aws/core/collection/batchable.rb +0 -133
data/lib/aws/core/collection.rb
CHANGED
@@ -44,23 +44,16 @@ module AWS
|
|
44
44
|
# collection.each {|item| ... }
|
45
45
|
#
|
46
46
|
# @note If you want fewer than all items, it is generally better
|
47
|
-
# to call #
|
47
|
+
# to call {#page} than {#each} with a +:limit+.
|
48
48
|
#
|
49
49
|
# @param [Hash] options
|
50
50
|
#
|
51
51
|
# @option options [Integer] :limit (nil) The maximum number of
|
52
52
|
# items to enumerate from this collection.
|
53
53
|
#
|
54
|
-
# @option options [next_token] :next_token (nil)
|
55
|
-
#
|
56
|
-
#
|
57
|
-
# an opaque string, a hash of values, etc).
|
58
|
-
#
|
59
|
-
# {#each} and {#each_batch} return a +:next_token+ when called
|
60
|
-
# with +:limit+ and there were more items matching the request.
|
61
|
-
#
|
62
|
-
# *NOTE* It is generally better to call {#page} if you only
|
63
|
-
# want a few items with the ability to request more later.
|
54
|
+
# @option options [next_token] :next_token (nil)
|
55
|
+
# Acts as an offset. +:next_token+ may be returned by {#each} and
|
56
|
+
# {#each_batch} when a +:limit+ is provided.
|
64
57
|
#
|
65
58
|
# @return [nil_or_next_token] Returns nil if all items were enumerated.
|
66
59
|
# If some items were excluded because of a +:limit+ option then
|
@@ -205,7 +198,7 @@ module AWS
|
|
205
198
|
# the next page of results. You can not choose an offset
|
206
199
|
# or know how many pages of results there will be.
|
207
200
|
#
|
208
|
-
# @
|
201
|
+
# @param [Hash] options A hash of options that modifies the
|
209
202
|
# items returned in the page of results.
|
210
203
|
#
|
211
204
|
# @option options [Integer] :per_page (10) The number of results
|
@@ -30,11 +30,18 @@ module AWS
|
|
30
30
|
def each_batch options = {}, &block
|
31
31
|
|
32
32
|
each_opts = options.dup
|
33
|
-
|
34
|
-
|
33
|
+
|
34
|
+
## limit and batch size should accept string values like '10'
|
35
|
+
|
36
|
+
limit = each_opts.delete(:limit) || _limit
|
37
|
+
limit = limit.to_i if limit
|
38
|
+
|
35
39
|
batch_size = each_opts.delete(:batch_size)
|
40
|
+
batch_size = batch_size.to_i if batch_size
|
41
|
+
|
42
|
+
next_token = each_opts.delete(:next_token)
|
36
43
|
|
37
|
-
total = 0 # count of items
|
44
|
+
total = 0 # count of items yeilded across all batches
|
38
45
|
|
39
46
|
begin
|
40
47
|
|
@@ -39,13 +39,16 @@ module AWS
|
|
39
39
|
option_grammar = self::Options.operation_grammar(name)
|
40
40
|
target_prefix = self::TARGET_PREFIX
|
41
41
|
add_client_request_method(Inflection.ruby_name(name).to_sym) do
|
42
|
+
|
42
43
|
configure_request do |request, options|
|
43
44
|
request.headers["x-amz-target"] = target_prefix + name
|
44
45
|
request.body = option_grammar.to_json(options)
|
45
46
|
end
|
46
47
|
|
47
48
|
process_response do |response|
|
48
|
-
|
49
|
+
response_body = response.http_response.body
|
50
|
+
response_body = "{}" if response_body == ""
|
51
|
+
data = JSON.load(response_body)
|
49
52
|
MetaUtils.extend_method(response, :data) { data }
|
50
53
|
end
|
51
54
|
|
@@ -53,6 +56,7 @@ module AWS
|
|
53
56
|
data = {}
|
54
57
|
MetaUtils.extend_method(response, :data) { data }
|
55
58
|
end
|
59
|
+
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
@@ -68,4 +72,3 @@ module AWS
|
|
68
72
|
|
69
73
|
end
|
70
74
|
end
|
71
|
-
|
@@ -44,7 +44,7 @@ module AWS
|
|
44
44
|
# that +:body+, +:headers+, +:parser+, and +:ssl_ca_file+ are
|
45
45
|
# ignored. If you need to set the CA file, you should use the
|
46
46
|
# +:ssl_ca_file+ option to {AWS.config} or
|
47
|
-
# {
|
47
|
+
# {Configuration} instead.
|
48
48
|
def initialize options = {}
|
49
49
|
@default_request_options = options
|
50
50
|
end
|
@@ -34,7 +34,8 @@ module AWS
|
|
34
34
|
options[:ssl] = request.use_ssl?
|
35
35
|
options[:proxy_uri] = request.proxy_uri
|
36
36
|
options[:ssl_verify_peer] = request.ssl_verify_peer?
|
37
|
-
options[:ssl_ca_file] = request.ssl_ca_file
|
37
|
+
options[:ssl_ca_file] = request.ssl_ca_file if request.ssl_ca_file
|
38
|
+
options[:ssl_ca_path] = request.ssl_ca_path if request.ssl_ca_path
|
38
39
|
|
39
40
|
connection = self.class.pool.connection_for(request.host, options)
|
40
41
|
|
@@ -26,7 +26,13 @@ module AWS
|
|
26
26
|
@headers = CaseInsensitiveHash.new
|
27
27
|
@params = []
|
28
28
|
@use_ssl = true
|
29
|
+
@read_timeout = 60
|
29
30
|
end
|
31
|
+
|
32
|
+
# @return [Integer] The number of seconds the service has to respond
|
33
|
+
# before a timeout error is raised on the request. Defaults to
|
34
|
+
# 60 seconds.
|
35
|
+
attr_accessor :read_timeout
|
30
36
|
|
31
37
|
# @return [String] hostname of the request
|
32
38
|
attr_accessor :host
|
@@ -88,6 +94,20 @@ module AWS
|
|
88
94
|
@ssl_ca_file
|
89
95
|
end
|
90
96
|
|
97
|
+
# @param [String] ca_path Path to a bundle of CA certs in PEM
|
98
|
+
# format; the HTTP handler should use this to verify all HTTPS
|
99
|
+
# requests if {#ssl_verify_peer?} is true.
|
100
|
+
def ssl_ca_path=(ca_path)
|
101
|
+
@ssl_ca_path = ca_path
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [String] Path to a bundle of CA certs in PEM format;
|
105
|
+
# the HTTP handler should use this to verify all HTTPS
|
106
|
+
# requests if {#ssl_verify_peer?} is true.
|
107
|
+
def ssl_ca_path
|
108
|
+
@ssl_ca_path
|
109
|
+
end
|
110
|
+
|
91
111
|
# Adds a request param.
|
92
112
|
#
|
93
113
|
# @overload add_param(param_name, param_value = nil)
|
@@ -106,12 +126,19 @@ module AWS
|
|
106
126
|
@params << Param.new(name_or_param, value)
|
107
127
|
end
|
108
128
|
end
|
129
|
+
alias_method :[]=, :add_param
|
109
130
|
|
110
131
|
# @private
|
111
132
|
def get_param param_name
|
112
133
|
@params.detect{|p| p.name == param_name } ||
|
113
134
|
raise("undefined param #{param_name}")
|
114
135
|
end
|
136
|
+
|
137
|
+
# @private
|
138
|
+
def param_value_for param_name
|
139
|
+
param = @params.detect{|p| p.name == param_name }
|
140
|
+
param ? param.value : nil
|
141
|
+
end
|
115
142
|
|
116
143
|
# @return [String] the request uri
|
117
144
|
def uri
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# Copyright 2011-2012 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
|
+
module AWS
|
15
|
+
module Core
|
16
|
+
|
17
|
+
class JsonClient < Client
|
18
|
+
|
19
|
+
include Core::ConfiguredJsonClientMethods
|
20
|
+
|
21
|
+
protected
|
22
|
+
def new_request
|
23
|
+
req = super
|
24
|
+
req.headers["content-type"] = "application/x-amz-json-1.0"
|
25
|
+
req
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def extract_error_code response
|
30
|
+
if response.http_response.status >= 300 and
|
31
|
+
body = response.http_response.body and
|
32
|
+
json = (JSON.load(body) rescue nil) and
|
33
|
+
type = json["__type"] and
|
34
|
+
type =~ /\#(.*)$/
|
35
|
+
$1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/aws/core/resource.rb
CHANGED
@@ -60,12 +60,11 @@ module AWS
|
|
60
60
|
|
61
61
|
# @return [Boolean] Returns true if the objects references the same
|
62
62
|
# AWS resource.
|
63
|
-
def
|
63
|
+
def eql? other
|
64
64
|
other.kind_of?(self.class) and
|
65
65
|
resource_identifiers == other.resource_identifiers
|
66
66
|
end
|
67
|
-
|
68
|
-
alias_method :eql?, :==
|
67
|
+
alias_method :==, :eql?
|
69
68
|
|
70
69
|
# @private
|
71
70
|
protected
|
@@ -152,7 +151,6 @@ module AWS
|
|
152
151
|
end
|
153
152
|
end
|
154
153
|
|
155
|
-
|
156
154
|
class << self
|
157
155
|
|
158
156
|
# @private
|
@@ -299,9 +297,9 @@ module AWS
|
|
299
297
|
return nil if value.nil? and @translates_nil != true
|
300
298
|
|
301
299
|
case
|
302
|
-
when @options[:to_sym]
|
300
|
+
when @options[:to_sym] then value.tr('-','_').downcase.to_sym
|
303
301
|
when @options[:timestamp] then Time.at(value.to_i)
|
304
|
-
when @output_translator
|
302
|
+
when @output_translator then @output_translator.call(value)
|
305
303
|
else value
|
306
304
|
end
|
307
305
|
|
@@ -326,7 +324,7 @@ module AWS
|
|
326
324
|
end
|
327
325
|
|
328
326
|
def finder_method
|
329
|
-
"
|
327
|
+
"_find_in_#{request_types.join('_or_')}_response_#{@id}"
|
330
328
|
end
|
331
329
|
|
332
330
|
# Indicates that all of the the named attributes can be retrieved
|
@@ -366,13 +364,13 @@ module AWS
|
|
366
364
|
method = options[:get_as] || attr.get_as
|
367
365
|
|
368
366
|
v = case
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
367
|
+
when resp_obj.respond_to?(:key?) && resp_obj.key?(method.to_s)
|
368
|
+
resp_obj[method.to_s]
|
369
|
+
when resp_obj.respond_to?(method)
|
370
|
+
resp_obj.send(method)
|
371
|
+
else
|
372
|
+
nil
|
373
|
+
end
|
376
374
|
v = v.value if v and options[:value_wrapped]
|
377
375
|
v = attr.translate_output_value(v)
|
378
376
|
|
data/lib/aws/core/xml_grammar.rb
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
require 'rexml/document'
|
15
15
|
require 'rexml/streamlistener'
|
16
16
|
require 'base64'
|
17
|
+
require 'time'
|
17
18
|
|
18
19
|
begin
|
19
20
|
require 'nokogiri'
|
@@ -254,14 +255,22 @@ module AWS
|
|
254
255
|
end
|
255
256
|
|
256
257
|
alias_method :float, :float_value
|
257
|
-
|
258
|
+
|
258
259
|
def symbol_value
|
259
260
|
format_value do |value|
|
260
261
|
value = super(value)
|
261
262
|
['', nil].include?(value) ? nil : Inflection.ruby_name(value).to_sym
|
262
263
|
end
|
263
264
|
end
|
264
|
-
|
265
|
+
|
266
|
+
def blob_value
|
267
|
+
format_value do |value|
|
268
|
+
value = super(value)
|
269
|
+
Base64.decode64(value) if value
|
270
|
+
end
|
271
|
+
end
|
272
|
+
alias_method :blob, :blob_value
|
273
|
+
|
265
274
|
def format_value &block
|
266
275
|
@current[:value_formatter] ||= ValueFormatter.new
|
267
276
|
@current[:value_formatter].extend_format_value(&block)
|
@@ -405,6 +414,7 @@ module AWS
|
|
405
414
|
allow_methods = %w(
|
406
415
|
rename attribute_name boolean integer long float list force
|
407
416
|
ignore collect_values symbol_value timestamp map_entry map
|
417
|
+
blob
|
408
418
|
)
|
409
419
|
unless allow_methods.include?(method.to_s)
|
410
420
|
raise "#{method} cannot be used in configuration"
|
data/lib/aws/dynamo_db.rb
CHANGED
@@ -11,6 +11,9 @@
|
|
11
11
|
# ANY KIND, either express or implied. See the License for the specific
|
12
12
|
# language governing permissions and limitations under the License.
|
13
13
|
|
14
|
+
require 'aws/core'
|
15
|
+
require 'aws/dynamo_db/config'
|
16
|
+
|
14
17
|
module AWS
|
15
18
|
|
16
19
|
# Provides a high-level interface for using DynamoDB.
|
@@ -43,7 +46,7 @@ module AWS
|
|
43
46
|
# "MyTable",
|
44
47
|
# :hash_key => { :id => :string }
|
45
48
|
# )
|
46
|
-
# sleep 1 while
|
49
|
+
# sleep 1 while table.status == :creating
|
47
50
|
#
|
48
51
|
# See {Table} and {TableCollection} for more information on creating
|
49
52
|
# and managing tables.
|
data/lib/aws/dynamo_db/client.rb
CHANGED
@@ -15,7 +15,7 @@ module AWS
|
|
15
15
|
class DynamoDB
|
16
16
|
|
17
17
|
# @private
|
18
|
-
class Client < Core::
|
18
|
+
class Client < Core::JsonClient
|
19
19
|
|
20
20
|
API_VERSION = '2011-06-01'
|
21
21
|
|
@@ -27,8 +27,6 @@ module AWS
|
|
27
27
|
|
28
28
|
CACHEABLE_REQUESTS = Set[:list_tables, :describe_table]
|
29
29
|
|
30
|
-
include Core::ConfiguredJsonClientMethods
|
31
|
-
|
32
30
|
configure_client
|
33
31
|
|
34
32
|
def initialize *args
|
@@ -45,23 +43,12 @@ module AWS
|
|
45
43
|
|
46
44
|
end
|
47
45
|
|
48
|
-
protected
|
49
|
-
def new_request
|
50
|
-
req = super
|
51
|
-
req.headers["content-type"] = "application/x-amz-json-1.0"
|
52
|
-
req
|
53
|
-
end
|
54
|
-
|
55
46
|
protected
|
56
47
|
def extract_error_code response
|
57
48
|
if response.http_response.status == 413
|
58
49
|
'RequestEntityTooLarge'
|
59
|
-
|
60
|
-
|
61
|
-
json = (JSON.load(body) rescue nil) and
|
62
|
-
type = json["__type"] and
|
63
|
-
type =~ /\#(.*)$/
|
64
|
-
$1
|
50
|
+
else
|
51
|
+
super(response)
|
65
52
|
end
|
66
53
|
end
|
67
54
|
|
@@ -111,7 +98,7 @@ module AWS
|
|
111
98
|
# our signer is capible of getting new short-term credentials
|
112
99
|
def possible_expired_credentials? response
|
113
100
|
signer.respond_to?(:refresh_session) and
|
114
|
-
response.error.is_a?(Errors::
|
101
|
+
response.error.is_a?(Errors::ExpiredTokenException)
|
115
102
|
end
|
116
103
|
|
117
104
|
end
|
@@ -645,6 +645,20 @@ module AWS
|
|
645
645
|
# * +:range_lte+
|
646
646
|
# * +:range_begins_with+
|
647
647
|
#
|
648
|
+
# @option [Boolean] :scan_index_forward (true) Specifies which
|
649
|
+
# order records will be returned. Defaults to returning them
|
650
|
+
# in ascending range key order. Pass false to reverse this.
|
651
|
+
#
|
652
|
+
# @option :select (nil) By default {#query} yields {Item}
|
653
|
+
# objects without any attribute data. If you want to select
|
654
|
+
# specific attributes, pass a list of them to :select.
|
655
|
+
#
|
656
|
+
# :select => [:id, :category, :size]
|
657
|
+
#
|
658
|
+
# If you want to select ALL attributes, pass the symbol +:all+
|
659
|
+
#
|
660
|
+
# :select => :all
|
661
|
+
#
|
648
662
|
# @option options [String, Numeric] :hash_value Attribute value
|
649
663
|
# of the hash component of the composite primary key.
|
650
664
|
#
|
@@ -679,6 +693,7 @@ module AWS
|
|
679
693
|
# @option options [String, Numeric] :range_begins_with Matches
|
680
694
|
# items where the range key value begins with this value.
|
681
695
|
# This option is only valid if the range key is a string.
|
696
|
+
#
|
682
697
|
def query(options = {}, &block)
|
683
698
|
|
684
699
|
options = options.merge(:query => true)
|