aws 2.2.6 → 2.3.0
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/awsbase/right_awsbase.rb +112 -17
- data/lib/sdb/right_sdb_interface.rb +2 -1
- data/test/sdb/test_active_sdb.rb +4 -4
- data/test/sdb/test_right_sdb.rb +31 -40
- metadata +30 -17
@@ -86,24 +86,116 @@ module Aws
|
|
86
86
|
string_to_sign = "#{http_verb.to_s.upcase}\n#{host.downcase}\n#{uri}\n#{canonical_string}"
|
87
87
|
# sign the string
|
88
88
|
signature = escape_sig(Base64.encode64(OpenSSL::HMAC.digest(digest, aws_secret_access_key, string_to_sign)).strip)
|
89
|
-
"#{canonical_string}&Signature=#{signature}"
|
89
|
+
ret = "#{canonical_string}&Signature=#{signature}"
|
90
|
+
# puts 'full=' + ret.inspect
|
91
|
+
ret
|
92
|
+
end
|
93
|
+
|
94
|
+
HEX = [
|
95
|
+
"%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
|
96
|
+
"%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F",
|
97
|
+
"%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
|
98
|
+
"%18", "%19", "%1A", "%1B", "%1C", "%1D", "%1E", "%1F",
|
99
|
+
"%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
|
100
|
+
"%28", "%29", "%2A", "%2B", "%2C", "%2D", "%2E", "%2F",
|
101
|
+
"%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
|
102
|
+
"%38", "%39", "%3A", "%3B", "%3C", "%3D", "%3E", "%3F",
|
103
|
+
"%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
|
104
|
+
"%48", "%49", "%4A", "%4B", "%4C", "%4D", "%4E", "%4F",
|
105
|
+
"%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
|
106
|
+
"%58", "%59", "%5A", "%5B", "%5C", "%5D", "%5E", "%5F",
|
107
|
+
"%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
|
108
|
+
"%68", "%69", "%6A", "%6B", "%6C", "%6D", "%6E", "%6F",
|
109
|
+
"%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
|
110
|
+
"%78", "%79", "%7A", "%7B", "%7C", "%7D", "%7E", "%7F",
|
111
|
+
"%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
|
112
|
+
"%88", "%89", "%8A", "%8B", "%8C", "%8D", "%8E", "%8F",
|
113
|
+
"%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
|
114
|
+
"%98", "%99", "%9A", "%9B", "%9C", "%9D", "%9E", "%9F",
|
115
|
+
"%A0", "%A1", "%A2", "%A3", "%A4", "%A5", "%A6", "%A7",
|
116
|
+
"%A8", "%A9", "%AA", "%AB", "%AC", "%AD", "%AE", "%AF",
|
117
|
+
"%B0", "%B1", "%B2", "%B3", "%B4", "%B5", "%B6", "%B7",
|
118
|
+
"%B8", "%B9", "%BA", "%BB", "%BC", "%BD", "%BE", "%BF",
|
119
|
+
"%C0", "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7",
|
120
|
+
"%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF",
|
121
|
+
"%D0", "%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7",
|
122
|
+
"%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF",
|
123
|
+
"%E0", "%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7",
|
124
|
+
"%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF",
|
125
|
+
"%F0", "%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7",
|
126
|
+
"%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"
|
127
|
+
]
|
128
|
+
TO_REMEMBER = 'AZaz09 -_.!~*\'()'
|
129
|
+
ASCII = {} # {'A'=>65, 'Z'=>90, 'a'=>97, 'z'=>122, '0'=>48, '9'=>57, ' '=>32, '-'=>45, '_'=>95, '.'=>}
|
130
|
+
TO_REMEMBER.each_char do |c| #unpack("c*").each do |c|
|
131
|
+
ASCII[c] = c.unpack("c")[0]
|
90
132
|
end
|
133
|
+
# puts 'ascii=' + ASCII.inspect
|
91
134
|
|
92
135
|
# Escape a string accordingly Amazon rulles
|
93
136
|
# http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/index.html?REST_RESTAuth.html
|
94
137
|
def self.amz_escape(param)
|
138
|
+
|
139
|
+
param = param.to_s
|
140
|
+
# param = param.force_encoding("UTF-8")
|
141
|
+
|
142
|
+
e = "x" # escape2(param.to_s)
|
143
|
+
# puts 'ESCAPED=' + e.inspect
|
144
|
+
|
145
|
+
|
95
146
|
#return CGI.escape(param.to_s).gsub("%7E", "~").gsub("+", "%20") # from: http://umlaut.rubyforge.org/svn/trunk/lib/aws_product_sign.rb
|
96
147
|
|
97
148
|
#param.to_s.gsub(/([^a-zA-Z0-9._~-]+)/n) do
|
98
149
|
# '%' + $1.unpack('H2' * $1.size).join('%').upcase
|
99
150
|
#end
|
100
|
-
e = CGI.escape(param.to_s)
|
101
|
-
e = e.gsub("%7E", "~")
|
102
|
-
e = e.gsub("+", "%20")
|
103
|
-
e = e.gsub("*", "%2A")
|
104
151
|
|
105
|
-
|
152
|
+
# puts 'e in=' + e.inspect
|
153
|
+
# converter = Iconv.new('ASCII', 'UTF-8')
|
154
|
+
# e = converter.iconv(e) #.unpack('U*').select{ |cp| cp < 127 }.pack('U*')
|
155
|
+
# puts 'e out=' + e.inspect
|
156
|
+
|
157
|
+
e2 = CGI.escape(param)
|
158
|
+
e2 = e2.gsub("%7E", "~")
|
159
|
+
e2 = e2.gsub("+", "%20")
|
160
|
+
e2 = e2.gsub("*", "%2A")
|
161
|
+
|
162
|
+
# puts 'E2=' + e2.inspect
|
163
|
+
# puts e == e2.to_s
|
164
|
+
|
165
|
+
e2
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
def self.escape2(s)
|
170
|
+
# home grown
|
171
|
+
ret = ""
|
172
|
+
s.unpack("U*") do |ch|
|
173
|
+
# puts 'ch=' + ch.inspect
|
174
|
+
if ASCII['A'] <= ch && ch <= ASCII['Z'] # A to Z
|
175
|
+
ret << ch
|
176
|
+
elsif ASCII['a'] <= ch && ch <= ASCII['z'] # a to z
|
177
|
+
ret << ch
|
178
|
+
elsif ASCII['0'] <= ch && ch <= ASCII['9'] # 0 to 9
|
179
|
+
ret << ch
|
180
|
+
elsif ch == ASCII[' '] # space
|
181
|
+
ret << "%20" # "+"
|
182
|
+
elsif ch == ASCII['-'] || ch == ASCII['_'] || ch == ASCII['.'] || ch == ASCII['~']
|
183
|
+
ret << ch
|
184
|
+
elsif ch <= 0x007f # other ascii
|
185
|
+
ret << HEX[ch]
|
186
|
+
elsif ch <= 0x07FF # non-ascii
|
187
|
+
ret << HEX[0xc0 | (ch >> 6)]
|
188
|
+
ret << HEX[0x80 | (ch & 0x3F)]
|
189
|
+
else
|
190
|
+
ret << HEX[0xe0 | (ch >> 12)]
|
191
|
+
ret << HEX[0x80 | ((ch >> 6) & 0x3F)]
|
192
|
+
ret << HEX[0x80 | (ch & 0x3F)]
|
193
|
+
end
|
106
194
|
|
195
|
+
end
|
196
|
+
ret
|
197
|
+
|
198
|
+
end
|
107
199
|
|
108
200
|
def self.escape_sig(raw)
|
109
201
|
e = CGI.escape(raw)
|
@@ -275,6 +367,9 @@ module Aws
|
|
275
367
|
def generate_request2(aws_access_key, aws_secret_key, action, api_version, lib_params, user_params={}) #:nodoc:
|
276
368
|
# remove empty params from request
|
277
369
|
user_params.delete_if {|key, value| value.nil? }
|
370
|
+
# user_params.each_pair do |k,v|
|
371
|
+
# user_params[k] = v.force_encoding("UTF-8")
|
372
|
+
# end
|
278
373
|
#params_string = params.to_a.collect{|key,val| key + "=#{CGI::escape(val.to_s)}" }.join("&")
|
279
374
|
# prepare service data
|
280
375
|
service = lib_params[:service]
|
@@ -571,10 +666,10 @@ module Aws
|
|
571
666
|
end
|
572
667
|
|
573
668
|
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
669
|
+
# Exception class to signal any Amazon errors. All errors occuring during calls to Amazon's
|
670
|
+
# web services raise this type of error.
|
671
|
+
# Attribute inherited by RuntimeError:
|
672
|
+
# message - the text of the error, generally as returned by AWS in its XML response.
|
578
673
|
class AwsError < RuntimeError
|
579
674
|
|
580
675
|
# either an array of errors where each item is itself an array of [code, message]),
|
@@ -647,7 +742,7 @@ module Aws
|
|
647
742
|
|
648
743
|
end
|
649
744
|
|
650
|
-
|
745
|
+
# Simplified version
|
651
746
|
class AwsError2 < RuntimeError
|
652
747
|
# Request id (if exists)
|
653
748
|
attr_reader :request_id
|
@@ -851,7 +946,7 @@ module Aws
|
|
851
946
|
end
|
852
947
|
|
853
948
|
|
854
|
-
|
949
|
+
#-----------------------------------------------------------------
|
855
950
|
|
856
951
|
class RightSaxParserCallback #:nodoc:
|
857
952
|
def self.include_callback
|
@@ -1018,9 +1113,9 @@ module Aws
|
|
1018
1113
|
end
|
1019
1114
|
end
|
1020
1115
|
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1116
|
+
#-----------------------------------------------------------------
|
1117
|
+
# PARSERS: Errors
|
1118
|
+
#-----------------------------------------------------------------
|
1024
1119
|
|
1025
1120
|
#<Error>
|
1026
1121
|
# <Code>TemporaryRedirect</Code>
|
@@ -1056,8 +1151,8 @@ module Aws
|
|
1056
1151
|
end
|
1057
1152
|
end
|
1058
1153
|
|
1059
|
-
|
1060
|
-
|
1154
|
+
# Dummy parser - does nothing
|
1155
|
+
# Returns the original params back
|
1061
1156
|
class RightDummyParser # :nodoc:
|
1062
1157
|
attr_accessor :result
|
1063
1158
|
|
@@ -169,7 +169,8 @@ module Aws
|
|
169
169
|
# Convert a Ruby language value to a SDB value by replacing Ruby nil with the user's chosen string representation of nil.
|
170
170
|
# Non-nil values are unaffected by this filter.
|
171
171
|
def ruby_to_sdb(value)
|
172
|
-
|
172
|
+
# puts "value #{value} is frozen? #{value.frozen?}"
|
173
|
+
value.nil? ? @nil_rep : ((value.frozen? || !value.is_a?(String)) ? value : value.force_encoding("UTF-8"))
|
173
174
|
end
|
174
175
|
|
175
176
|
# Convert a SDB value to a Ruby language value by replacing the user's chosen string representation of nil with Ruby nil.
|
data/test/sdb/test_active_sdb.rb
CHANGED
@@ -92,13 +92,13 @@ class TestSdb < Test::Unit::TestCase
|
|
92
92
|
ids = clients.map{|client| client.id }[0..1]
|
93
93
|
assert_equal @clients.size + 1, clients.size
|
94
94
|
# retrieve all presidents (must find: Bush, Putin, Medvedev)
|
95
|
-
assert_equal 3, Client.find(:all, :conditions => ["
|
95
|
+
assert_equal 3, Client.find(:all, :conditions => ["post=?",'president']).size
|
96
96
|
# retrieve all russian presidents (must find: Putin, Medvedev)
|
97
|
-
assert_equal 2, Client.find(:all, :conditions => ["
|
97
|
+
assert_equal 2, Client.find(:all, :conditions => ["post=? and country=?",'president', 'Russia']).size
|
98
98
|
# retrieve all russian presidents and all women (must find: Putin, Medvedev, 2 Maries and Sandy)
|
99
|
-
assert_equal 5, Client.find(:all, :conditions => ["
|
99
|
+
assert_equal 5, Client.find(:all, :conditions => ["post=? and country=? or gender=?",'president', 'Russia','female']).size
|
100
100
|
# find all rissian presidents Bushes
|
101
|
-
assert_equal 0, Client.find(:all, :conditions => ["
|
101
|
+
assert_equal 0, Client.find(:all, :conditions => ["post=? and country=? and name=?",'president', 'Russia','Bush']).size
|
102
102
|
# --- find by ids
|
103
103
|
# must find 1 rec (by rec id) and return it
|
104
104
|
assert_equal ids.first, Client.find(ids.first).id
|
data/test/sdb/test_right_sdb.rb
CHANGED
@@ -103,45 +103,16 @@ class TestSdb < Test::Unit::TestCase
|
|
103
103
|
wait SDB_DELAY, 'after adding attributes'
|
104
104
|
# get attributes ('girls' and 'vodka' must be there)
|
105
105
|
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya'].to_a.sort
|
106
|
-
assert_equal
|
106
|
+
assert_equal ['girls', 'vodka'], values
|
107
107
|
# delete an item
|
108
108
|
@sdb.delete_attributes @domain, @item
|
109
|
+
sleep 1
|
109
110
|
# get attributes (values must be empty)
|
110
111
|
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_08_query
|
115
|
-
# not applicable anymore
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_09_signature_version_0
|
119
|
-
sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '0')
|
120
|
-
item = 'toys'
|
121
|
-
# TODO: need to change the below test. I think Juergen's intention was to include some umlauts in the values
|
122
|
-
# put attributes
|
123
|
-
# mhhh... Not sure how to translate this: hölzchehn klötzchen grÃŒnspan buÃe... Lets assume this is:
|
124
|
-
attributes = { 'Jurgen' => %w{kitten puppy chickabiddy piglet} }
|
125
|
-
assert sdb.put_attributes(@domain, item, attributes)
|
126
|
-
wait SDB_DELAY, 'after putting attributes'
|
127
|
-
# get attributes
|
128
|
-
values = sdb.get_attributes(@domain, item)[:attributes]['Jurgen'].to_a.sort
|
129
|
-
# compare to original list
|
130
|
-
assert_equal values, attributes['Jurgen'].sort
|
131
|
-
# check that the request has correct signature version
|
132
|
-
assert sdb.last_request.path.include?('SignatureVersion=0')
|
112
|
+
assert_nil values
|
133
113
|
end
|
134
114
|
|
135
|
-
def
|
136
|
-
sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '1')
|
137
|
-
domains = nil
|
138
|
-
assert_nothing_thrown "Failed to use signature V1" do
|
139
|
-
domains = sdb.list_domains
|
140
|
-
end
|
141
|
-
assert domains
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_11_signature_version_1
|
115
|
+
def test_11_signature_version_2
|
145
116
|
sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '2')
|
146
117
|
domains = nil
|
147
118
|
assert_nothing_thrown "Failed to use signature V2" do
|
@@ -150,26 +121,46 @@ class TestSdb < Test::Unit::TestCase
|
|
150
121
|
assert domains
|
151
122
|
end
|
152
123
|
|
153
|
-
def
|
124
|
+
def test_12_unicode
|
125
|
+
|
126
|
+
# This was creating a bad signature
|
127
|
+
s = ''
|
128
|
+
File.open("unicode.txt", "r") { |f|
|
129
|
+
s = f.read
|
130
|
+
}
|
131
|
+
# s = s.force_encoding("UTF-8")
|
132
|
+
puts 's=' + s.inspect
|
133
|
+
puts "encoding? " + s.encoding.name
|
134
|
+
# s = s.encode("ASCII")
|
135
|
+
# todo: I'm thinking just iterate through characters and swap out ones that aren't in ascii range.
|
136
|
+
@sdb.put_attributes @domain, @item, {"badname"=>[s]}
|
137
|
+
sleep 1
|
138
|
+
value = @sdb.get_attributes(@domain, @item)[:attributes]['badname'][0]
|
139
|
+
puts 'value=' + value.inspect
|
140
|
+
assert value == s
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_15_array_of_attrs
|
154
144
|
item = 'multiples'
|
155
145
|
assert_nothing_thrown "Failed to put multiple attrs" do
|
156
146
|
@sdb.put_attributes(@domain, item, {:one=>1, :two=>2, :three=>3})
|
157
147
|
end
|
158
148
|
end
|
159
149
|
|
160
|
-
def
|
150
|
+
def test_16_zero_len_attrs
|
161
151
|
item = 'zeroes'
|
162
152
|
assert_nothing_thrown "Failed to put zero-length attributes" do
|
163
153
|
@sdb.put_attributes(@domain, item, {:one=>"", :two=>"", :three=>""})
|
164
154
|
end
|
165
155
|
end
|
166
156
|
|
167
|
-
def
|
157
|
+
def test_17_nil_attrs
|
168
158
|
item = 'nils'
|
169
159
|
res = nil
|
170
160
|
assert_nothing_thrown do
|
171
161
|
@sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
|
172
162
|
end
|
163
|
+
sleep 1
|
173
164
|
assert_nothing_thrown do
|
174
165
|
res = @sdb.get_attributes(@domain, item)
|
175
166
|
end
|
@@ -178,7 +169,7 @@ class TestSdb < Test::Unit::TestCase
|
|
178
169
|
assert_not_nil(res[:attributes]['three'][0])
|
179
170
|
end
|
180
171
|
|
181
|
-
def
|
172
|
+
def test_18_url_escape
|
182
173
|
item = 'urlescapes'
|
183
174
|
content = {:a=>"one & two & three",
|
184
175
|
:b=>"one ? two / three"}
|
@@ -189,7 +180,7 @@ class TestSdb < Test::Unit::TestCase
|
|
189
180
|
assert_equal(content[:b], res[:attributes]['b'][0])
|
190
181
|
end
|
191
182
|
|
192
|
-
def
|
183
|
+
def test_19_put_attrs_by_post
|
193
184
|
item = 'reqgirth'
|
194
185
|
i = 0
|
195
186
|
sa = ""
|
@@ -200,12 +191,12 @@ class TestSdb < Test::Unit::TestCase
|
|
200
191
|
@sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
|
201
192
|
end
|
202
193
|
|
203
|
-
def
|
194
|
+
def test_21_query_with_atributes
|
204
195
|
# not applicable anymore
|
205
196
|
end
|
206
197
|
|
207
198
|
# Keep this test last, because it deletes the domain...
|
208
|
-
def
|
199
|
+
def test_40_delete_domain
|
209
200
|
assert @sdb.delete_domain(@domain), 'delete_domain fail'
|
210
201
|
wait SDB_DELAY, 'after domain deletion'
|
211
202
|
# check that domain does not exist
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 2
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 2.3.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Travis Reeder
|
@@ -11,39 +16,45 @@ autorequire:
|
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
18
|
|
14
|
-
date: 2010-
|
19
|
+
date: 2010-03-22 00:00:00 -07:00
|
15
20
|
default_executable:
|
16
21
|
dependencies:
|
17
22
|
- !ruby/object:Gem::Dependency
|
18
23
|
name: uuidtools
|
19
|
-
|
20
|
-
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
26
|
requirements:
|
23
27
|
- - ">="
|
24
28
|
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 0
|
25
31
|
version: "0"
|
26
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
27
34
|
- !ruby/object:Gem::Dependency
|
28
35
|
name: http_connection
|
29
|
-
|
30
|
-
|
31
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
38
|
requirements:
|
33
39
|
- - ">="
|
34
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
35
43
|
version: "0"
|
36
|
-
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
37
46
|
- !ruby/object:Gem::Dependency
|
38
47
|
name: xml-simple
|
39
|
-
|
40
|
-
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
50
|
requirements:
|
43
51
|
- - ">="
|
44
52
|
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
45
55
|
version: "0"
|
46
|
-
|
56
|
+
type: :runtime
|
57
|
+
version_requirements: *id003
|
47
58
|
description: AWS Ruby Library for interfacing with Amazon Web Services.
|
48
59
|
email: travis@appoxy.com
|
49
60
|
executables: []
|
@@ -84,18 +95,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
95
|
requirements:
|
85
96
|
- - ">="
|
86
97
|
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
87
100
|
version: "0"
|
88
|
-
version:
|
89
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
102
|
requirements:
|
91
103
|
- - ">="
|
92
104
|
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
93
107
|
version: "0"
|
94
|
-
version:
|
95
108
|
requirements: []
|
96
109
|
|
97
110
|
rubyforge_project:
|
98
|
-
rubygems_version: 1.3.
|
111
|
+
rubygems_version: 1.3.6
|
99
112
|
signing_key:
|
100
113
|
specification_version: 3
|
101
114
|
summary: AWS Ruby Library for interfacing with Amazon Web Services.
|