aws 2.2.5 → 2.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/lib/aws.rb CHANGED
@@ -16,6 +16,7 @@ $:.unshift(File.dirname(__FILE__))
16
16
  require 'awsbase/benchmark_fix'
17
17
  require 'awsbase/support'
18
18
  require 'awsbase/right_awsbase'
19
+ require 'awsbase/aws_response_array'
19
20
  require 'ec2/right_ec2'
20
21
  require 'ec2/right_mon_interface'
21
22
  require 's3/right_s3_interface'
@@ -0,0 +1,30 @@
1
+ module Aws
2
+
3
+ # This class is a special array to hold a bit of extra information about a response like:
4
+ # <ResponseMetadata>
5
+ # <RequestId>4f1fae46-bf3d-11de-a88b-7b5b3d23b3a7</RequestId>
6
+ # </ResponseMetadata>
7
+ #
8
+ # Which can be accessed directly from the array using array.response_metadata
9
+ #
10
+ class AwsResponseArray < Array
11
+
12
+ attr_accessor :response_metadata
13
+
14
+ def initialize(response_metadata)
15
+ @response_metadata = response_metadata
16
+ end
17
+
18
+ end
19
+
20
+ # Used when pulling out a single response object
21
+ class AwsResponseObjectHash < Hash
22
+
23
+ attr_accessor :response_metadata
24
+
25
+ def initialize(response_metadata)
26
+ @response_metadata = response_metadata
27
+ end
28
+
29
+ end
30
+ end
@@ -28,6 +28,7 @@ module Aws
28
28
  require 'cgi'
29
29
  require 'uri'
30
30
  require 'xmlsimple'
31
+ require 'active_support'
31
32
 
32
33
  class AwsUtils #:nodoc:
33
34
  @@digest1 = OpenSSL::Digest::Digest.new("sha1")
@@ -321,15 +322,16 @@ module Aws
321
322
  end
322
323
 
323
324
  # This is the direction we should head instead of writing our own parsers for everything, much simpler
325
+ # params:
326
+ # - :group_tags => hash of indirection to eliminate, see: http://xml-simple.rubyforge.org/
327
+ # - :force_array => true for all or an array of tag names to force
328
+ # - :pull_out_array => an array of levels to dig into when generating return value (see rds.rb for example)
324
329
  def request_info_xml_simple(connection_name, lib_params, request, logger, params = {})
325
330
 
326
331
  @connection = get_conn(connection_name, lib_params, logger)
327
332
  @last_request = request[:request]
328
333
  @last_response = nil
329
334
 
330
- response = nil
331
- blockexception = nil
332
-
333
335
  response = @connection.request(request)
334
336
  # benchblock.service.add!{ response = @connection.request(request) }
335
337
  # check response for errors...
@@ -339,7 +341,51 @@ module Aws
339
341
  # benchblock.xml.add! { parser.parse(response) }
340
342
  # return parser.result
341
343
  force_array = params[:force_array] || false
342
- return XmlSimple.xml_in(response.body, {"KeyToSymbol"=>false, 'ForceArray' => force_array})
344
+ # Force_array and group_tags don't work nice together so going to force array manually
345
+ xml_simple_options = {"KeyToSymbol"=>false, 'ForceArray' => false}
346
+ xml_simple_options["GroupTags"] = params[:group_tags] if params[:group_tags]
347
+
348
+ # { 'GroupTags' => { 'searchpath' => 'dir' }
349
+ # 'ForceArray' => %r(_list$)
350
+ parsed = XmlSimple.xml_in(response.body, xml_simple_options)
351
+ # todo: we may want to consider stripping off a couple of layers when doing this, for instance:
352
+ # <DescribeDBInstancesResponse xmlns="http://rds.amazonaws.com/admin/2009-10-16/">
353
+ # <DescribeDBInstancesResult>
354
+ # <DBInstances>
355
+ # <DBInstance>....
356
+ # Strip it off and only return an array or hash of <DBInstance>'s (hash by identifier).
357
+ # would have to be able to make the RequestId available somehow though, perhaps some special array subclass which included that?
358
+ unless force_array.is_a? Array
359
+ force_array = []
360
+ end
361
+ parsed = symbolize(parsed, force_array)
362
+ # puts 'parsed=' + parsed.inspect
363
+ if params[:pull_out_array]
364
+ ret = Aws::AwsResponseArray.new(parsed[:response_metadata])
365
+ level_hash = parsed
366
+ params[:pull_out_array].each do |x|
367
+ level_hash = level_hash[x]
368
+ end
369
+ if level_hash.is_a? Hash # When there's only one
370
+ ret << level_hash
371
+ else # should be array
372
+ level_hash.each do |x|
373
+ ret << x
374
+ end
375
+ end
376
+ elsif params[:pull_out_single]
377
+ # returns a single object
378
+ ret = AwsResponseObjectHash.new(parsed[:response_metadata])
379
+ level_hash = parsed
380
+ params[:pull_out_single].each do |x|
381
+ level_hash = level_hash[x]
382
+ end
383
+ ret.merge!(level_hash)
384
+ else
385
+ ret = parsed
386
+ end
387
+ return ret
388
+
343
389
  else
344
390
  @error_handler = AWSErrorHandler.new(self, nil, :errors_list => self.class.amazon_problems) unless @error_handler
345
391
  check_result = @error_handler.check(request)
@@ -353,38 +399,22 @@ module Aws
353
399
 
354
400
  end
355
401
 
356
- # FROM ELB
357
- =begin
358
- def generate_request2(action, params={})
359
- service_hash = {"Action" => action,
360
- "AWSAccessKeyId" => @aws_access_key_id,
361
- "Version" => @@api }
362
- service_hash.update(params)
363
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :get, @params[:server], @params[:service])
364
-
365
- # use POST method if the length of the query string is too large
366
- if service_params.size > 2000
367
- if signature_version == '2'
368
- # resign the request because HTTP verb is included into signature
369
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], @params[:service])
402
+ def symbolize(hash, force_array)
403
+ ret = {}
404
+ hash.keys.each do |key|
405
+ val = hash[key]
406
+ if val.is_a? Hash
407
+ val = symbolize(val, force_array)
408
+ if force_array.include? key
409
+ val = [val]
410
+ end
411
+ elsif val.is_a? Array
412
+ val = val.collect { |x| symbolize(x, force_array) }
370
413
  end
371
- request = Net::HTTP::Post.new(service)
372
- request.body = service_params
373
- request['Content-Type'] = 'application/x-www-form-urlencoded'
374
- else
375
- request = Net::HTTP::Get.new("#{@params[:service]}?#{service_params}")
414
+ ret[key.underscore.to_sym] = val
376
415
  end
377
-
378
- #puts "\n\n --------------- QUERY REQUEST TO AWS -------------- \n\n"
379
- #puts "#{@params[:service]}?#{service_params}\n\n"
380
-
381
- # prepare output hash
382
- { :request => request,
383
- :server => @params[:server],
384
- :port => @params[:port],
385
- :protocol => @params[:protocol] }
416
+ ret
386
417
  end
387
- =end
388
418
 
389
419
  # Returns +true+ if the describe_xxx responses are being cached
390
420
  def caching?
@@ -51,6 +51,24 @@ module Aws
51
51
  generate_request2(@aws_access_key_id, @aws_secret_access_key, action, @@api, @params, params)
52
52
  end
53
53
 
54
+ def do_request(action, params, options={})
55
+ link = generate_request(action, params)
56
+ resp = request_info_xml_simple(:rds_connection, @params, link, @logger,
57
+ :group_tags=>{"DBInstances"=>"DBInstance",
58
+ "DBParameterGroups"=>"DBParameterGroup",
59
+ "DBSecurityGroups"=>"DBSecurityGroup",
60
+ "EC2SecurityGroups"=>"EC2SecurityGroup",
61
+ "IPRanges"=>"IPRange"},
62
+ :force_array=>["DBInstances",
63
+ "DBParameterGroups",
64
+ "DBSecurityGroups",
65
+ "EC2SecurityGroups",
66
+ "IPRanges"],
67
+ :pull_out_array=>options[:pull_out_array],
68
+ :pull_out_single=>options[:pull_out_single],
69
+ :wrapper=>options[:wrapper])
70
+ end
71
+
54
72
 
55
73
  #-----------------------------------------------------------------
56
74
  # REQUESTS
@@ -81,8 +99,7 @@ module Aws
81
99
 
82
100
  @logger.info("Creating DB Instance called #{identifier}")
83
101
 
84
- link = generate_request("CreateDBInstance", params)
85
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
102
+ link = do_request("CreateDBInstance", params, :pull_out_single=>[:create_db_instance_result, :db_instance])
86
103
 
87
104
  rescue Exception
88
105
  on_exception
@@ -93,14 +110,16 @@ module Aws
93
110
  # DBInstanceIdentifier
94
111
  # MaxRecords
95
112
  # Marker
113
+ #
114
+ # Returns array of instances as hashes.
115
+ # Response metadata can be retreived by calling array.response_metadata on the returned array.
96
116
  def describe_db_instances(options={})
97
117
  params = {}
98
- params['DBInstanceIdentifier'] = options[:DBInstanceIdentifier] if options[:DBInstanceIdentifier]
99
- params['MaxRecords'] = options[:MaxRecords] if options[:MaxRecords]
100
- params['Marker'] = options[:Marker] if options[:Marker]
118
+ params['DBInstanceIdentifier'] = options[:db_instance_identifier] if options[:db_instance_identifier]
119
+ params['MaxRecords'] = options[:max_records] if options[:max_records]
120
+ params['Marker'] = options[:marker] if options[:marker]
101
121
 
102
- link = generate_request("DescribeDBInstances", params)
103
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
122
+ resp = do_request("DescribeDBInstances", params, :pull_out_array=>[:describe_db_instances_result, :db_instances])
104
123
 
105
124
  rescue Exception
106
125
  on_exception
@@ -120,21 +139,20 @@ module Aws
120
139
  params['SkipFinalSnapshot'] = true
121
140
  end
122
141
 
123
- link = generate_request("DeleteDBInstance", params)
124
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
142
+ link = do_request("DeleteDBInstance", params, :pull_out_single=>[:delete_db_instance_result, :db_instance])
125
143
 
126
144
  rescue Exception
127
145
  on_exception
128
146
  end
129
147
 
130
148
 
131
- def create_db_security_groups(group_name, description, options={})
149
+ def create_db_security_group(group_name, description, options={})
132
150
  params = {}
133
151
  params['DBSecurityGroupName'] = group_name
134
152
  params['DBSecurityGroupDescription'] = description
135
- params['Engine'] = options[:engine] || "MySQL5.1"
136
- link = generate_request("CreateDBSecurityGroup", params)
137
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
153
+
154
+ link = do_request("CreateDBSecurityGroup", params, :pull_out_single => [:create_db_security_group_result, :db_security_group])
155
+
138
156
  rescue Exception
139
157
  on_exception
140
158
  end
@@ -143,8 +161,9 @@ module Aws
143
161
  def delete_db_security_group(group_name, options={})
144
162
  params = {}
145
163
  params['DBSecurityGroupName'] = group_name
146
- link = generate_request("DeleteDBSecurityGroup", params)
147
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
164
+
165
+ link = do_request("DeleteDBSecurityGroup", params)
166
+
148
167
  rescue Exception
149
168
  on_exception
150
169
  end
@@ -155,10 +174,9 @@ module Aws
155
174
  params['DBSecurityGroupName'] = options[:DBSecurityGroupName] if options[:DBSecurityGroupName]
156
175
  params['MaxRecords'] = options[:MaxRecords] if options[:MaxRecords]
157
176
 
158
- force_array = options[:force_array].nil? ? false : options[:force_array]
177
+ link = do_request("DescribeDBSecurityGroups", params, :pull_out_array=>[:describe_db_security_groups_result, :db_security_groups], :wrapper=>:db_security_group)
178
+
159
179
 
160
- link = generate_request("DescribeDBSecurityGroups", params)
161
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger, :force_array => force_array)
162
180
  rescue Exception
163
181
  on_exception
164
182
  end
@@ -169,8 +187,7 @@ module Aws
169
187
  params['DBSecurityGroupName'] = group_name
170
188
  params['EC2SecurityGroupOwnerId'] = ec2_group_owner_id
171
189
  params['EC2SecurityGroupName'] = ec2_group_name
172
- link = generate_request("AuthorizeDBSecurityGroupIngress", params)
173
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
190
+ link = do_request("AuthorizeDBSecurityGroupIngress", params)
174
191
  rescue Exception
175
192
  on_exception
176
193
  end
@@ -180,8 +197,7 @@ module Aws
180
197
  params = {}
181
198
  params['DBSecurityGroupName'] = group_name
182
199
  params['CIDRIP'] = ip_range
183
- link = generate_request("AuthorizeDBSecurityGroupIngress", params)
184
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
200
+ link = do_request("AuthorizeDBSecurityGroupIngress", params)
185
201
  rescue Exception
186
202
  on_exception
187
203
  end
@@ -191,13 +207,13 @@ module Aws
191
207
  params = {}
192
208
  params['DBSecurityGroupName'] = group_name
193
209
  params['CIDRIP'] = ip_range
194
- link = generate_request("RevokeDBSecurityGroupIngress", params)
195
- resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
210
+ link = do_request("RevokeDBSecurityGroupIngress", params)
196
211
  rescue Exception
197
212
  on_exception
198
213
  end
199
214
 
200
215
 
216
+
201
217
  end
202
218
 
203
219
  end
@@ -15,7 +15,7 @@ class TestRds < Test::Unit::TestCase
15
15
  @rds = Aws::Rds.new(TestCredentials.aws_access_key_id,
16
16
  TestCredentials.aws_secret_access_key)
17
17
 
18
- @identifier = 'test-db-instance1'
18
+ @identifier = 'test-db-instance1b'
19
19
  # deleting this one....
20
20
  #@identifier2 = 'my-db-instance2'
21
21
  end
@@ -23,61 +23,69 @@ class TestRds < Test::Unit::TestCase
23
23
 
24
24
  def test_01_create_db_instance
25
25
  begin
26
- db_instance3 = @rds.create_db_instance('right_ec2_awesome_test_key', "db.m1.small", 5, "master", "masterpass")
26
+ db_instance3 = @rds.create_db_instance('bad_test_key', "db.m1.small", 5, "master", "masterpass")
27
27
  rescue => ex
28
28
  #puts "msg=" + ex.message
29
29
  #puts "response=" + ex.response
30
30
  assert ex.message[0, "InvalidParameterValue".size] == "InvalidParameterValue"
31
31
  end
32
32
 
33
- #db_instance = @rds.create_db_instance(@identifier, "db.m1.small", 5, "master", "masterpass")
33
+ db_instance = @rds.create_db_instance(@identifier, "db.m1.small", 5, "master", "masterpass")
34
+ assert db_instance[:db_instance_status] == "creating"
34
35
 
36
+ start = Time.now
35
37
  tries=0
36
- while tries < 100
37
- instances_result = @rds.describe_db_instances
38
- instances = instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"]
39
-
40
- #puts "INSTANCES -----> " + instances.inspect
41
-
42
- instances.each do |i|
43
- next unless i["DBInstanceIdentifier"] == @identifier
44
- break if i["DBInstanceStatus"] == "available"
45
- puts "Database not ready yet.... attempt #{tries.to_s} of 100, db state --> #{i["DBInstanceStatus"].to_s}"
46
- tries += 1
47
- sleep 5
38
+ catch (:done) do
39
+ while tries < 100
40
+ instances = @rds.describe_db_instances
41
+
42
+ #puts "INSTANCES -----> " + instances.inspect
43
+
44
+ instances.each do |i|
45
+ db_status = i[:db_instance_status]
46
+ puts 'i=' + db_status.to_s
47
+ next unless i[:db_instance_identifier] == @identifier
48
+ throw :done if db_status == "available"
49
+ puts "Database not ready yet.... attempt #{tries.to_s} of 100, db state --> #{i[:db_instance_status].to_s}"
50
+ tries += 1
51
+ sleep 5
52
+ end
48
53
  end
49
-
50
-
51
54
  end
55
+ puts "Duration to start db instance: #{Time.now-start}"
52
56
  end
53
57
 
54
58
 
55
59
  def test_02_describe_db_instances
56
- instances_result = @rds.describe_db_instances
57
- #puts "instances_result=" + instances_result.inspect
58
- instances = instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"]
59
- #puts "\n\ninstances count = " + instances.count.to_s + " \n\n "
60
-
60
+ instances = @rds.describe_db_instances
61
+ # puts "instances_result=" + instances_result.inspect
62
+ # instances = instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"]
63
+ puts "instances count = " + instances.count.to_s
64
+ puts 'instances=' + instances.inspect
61
65
  assert instances.size > 0
66
+ i_describe = nil
67
+ instances.each do |x|
68
+ i_describe = x if x[:db_instance_identifier] == @identifier
69
+ end
70
+ assert i_describe
71
+
72
+ puts 'response_metadata=' + instances.response_metadata.inspect
73
+ assert instances.response_metadata
74
+ assert instances.response_metadata[:request_id]
62
75
  end
63
76
 
64
77
 
65
78
  def test_03_describe_security_groups
66
- security_result = @rds.describe_db_security_groups()
67
- #puts "security_result=" + security_result.inspect
68
- security_groups=security_result["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
79
+ security_groups = @rds.describe_db_security_groups()
80
+ puts "security_groups=" + security_groups.inspect
69
81
  default_present = false
70
- if security_groups.is_a?(Array)
71
- security_groups.each do |security_group|
72
- security_group.inspect
73
- if security_group["DBSecurityGroupName"]=="default"
74
- default_present=true
75
- end
76
- end
77
- else
78
- if security_groups["DBSecurityGroupName"]=="default"
82
+ assert security_groups.is_a?(Array)
83
+ security_groups.each do |security_group|
84
+ security_group.inspect
85
+ if security_group[:db_security_group_name] == "default"
79
86
  default_present=true
80
87
  end
88
+ assert security_group[:ec2_security_groups].is_a? Array
81
89
  end
82
90
  assert default_present
83
91
  end
@@ -85,11 +93,13 @@ class TestRds < Test::Unit::TestCase
85
93
 
86
94
  def test_04_authorize_security_groups_ingress
87
95
  # Create
88
- @security_info = @rds.describe_db_security_groups({:force_array => ["DBSecurityGroup", "IPRange"]})["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
96
+ # security_groups = @rds.describe_db_security_groups
97
+ # @security_info = security_groups[0]
89
98
  @rds.authorize_db_security_group_ingress_range("default", "122.122.122.122/12")
90
99
 
91
100
  # Check
92
- @security_info = @rds.describe_db_security_groups({:force_array => ["DBSecurityGroup", "IPRange"]})["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
101
+ security_groups = @rds.describe_db_security_groups
102
+ @security_info = security_groups[0]
93
103
 
94
104
  ip_found = @security_info.inspect.include? "122.122.122.122/12"
95
105
  assert ip_found
@@ -97,31 +107,34 @@ class TestRds < Test::Unit::TestCase
97
107
 
98
108
 
99
109
  def test_05_delete_db_instance
100
- @rds.delete_db_instance(@identifier)
110
+ @rds.delete_db_instance(@identifier) # todo: can't delete unless it's in "available" state
101
111
  #@rds.delete_db_instance(@identifier2)
102
112
  sleep 3
103
113
 
104
- instances_result = @rds.describe_db_instances
114
+ instances = @rds.describe_db_instances(:db_instance_identifier=>@identifier)
105
115
  #puts "instances_result=" + instances_result.inspect
106
116
 
107
- instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"].each do |i|
108
- puts "Trying to delete and getting i[DBInstanceStatus] -----------> " + i["DBInstanceStatus"]
109
- assert i["DBInstanceStatus"] == "deleting"
117
+ instances.each do |i|
118
+ next unless i[:db_instance_identifier] == @identifier
119
+ db_status = i[:db_instance_status]
120
+ puts "Trying to delete and getting i[DBInstanceStatus] -----------> " + db_status
121
+ @rds.delete_db_instance(i[:db_instance_identifier]) if db_status == "available"
122
+ assert db_status == "deleting"
110
123
  end
124
+ sleep 2
111
125
 
112
- assert instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"].size < 2
113
126
  end
114
127
 
115
128
 
116
129
  def test_06_create_security_groups
117
130
  group_present=false
118
131
 
119
- @rds.create_db_security_groups("new_sample_group", "new_sample_group_description")
132
+ @rds.create_db_security_group("new_sample_group", "new_sample_group_description")
120
133
 
121
- @security_info = @rds.describe_db_security_groups({:force_array => ["DBSecurityGroup", "IPRange"]})["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
134
+ security_groups = @rds.describe_db_security_groups
122
135
 
123
- @security_info.each do |security_group|
124
- if (security_group["DBSecurityGroupName"]=="new_sample_group")&&(security_group["DBSecurityGroupDescription"]=="new_sample_group_description")
136
+ security_groups.each do |security_group|
137
+ if (security_group[:db_security_group_name]=="new_sample_group")&&(security_group[:db_security_group_description]=="new_sample_group_description")
125
138
  group_present = true
126
139
  end
127
140
  end
@@ -131,23 +144,22 @@ class TestRds < Test::Unit::TestCase
131
144
 
132
145
 
133
146
  def test_07_revoking_security_groups_ingress
134
- sleep 15
147
+ # sleep 15
135
148
  @rds.revoke_db_security_group_ingress("default", "122.122.122.122/12")
136
149
  sleep 2
137
- @security_info = @rds.describe_db_security_groups({:force_array => ["DBSecurityGroup", "IPRange"]})["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
138
- revoking = @security_info[0].inspect.include? "revoking"
150
+ security_groups = @rds.describe_db_security_groups
151
+ revoking = security_groups[0].inspect.include? "revoking"
139
152
  assert revoking
140
153
  end
141
154
 
142
155
 
143
-
144
156
  def test_08_delete_security_group
145
157
  group_present=false
146
158
  @rds.delete_db_security_group("new_sample_group")
147
159
  sleep 2
148
- @security_info = @rds.describe_db_security_groups({:force_array => ["DBSecurityGroup", "IPRange"]})["DescribeDBSecurityGroupsResult"]["DBSecurityGroups"]["DBSecurityGroup"]
149
- @security_info.each do |security_group|
150
- if (security_group["DBSecurityGroupName"]=="new_sample_group")
160
+ security_groups = @rds.describe_db_security_groups
161
+ security_groups.each do |security_group|
162
+ if (security_group[:db_security_group_name]=="new_sample_group")
151
163
  group_present=true
152
164
  end
153
165
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.5
4
+ version: 2.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Reeder
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2010-02-13 00:00:00 -08:00
14
+ date: 2010-02-15 00:00:00 -08:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -55,6 +55,7 @@ extra_rdoc_files:
55
55
  files:
56
56
  - lib/acf/right_acf_interface.rb
57
57
  - lib/aws.rb
58
+ - lib/awsbase/aws_response_array.rb
58
59
  - lib/awsbase/benchmark_fix.rb
59
60
  - lib/awsbase/right_awsbase.rb
60
61
  - lib/awsbase/support.rb