aws-sdk-core 2.0.0.rc6 → 2.0.0.rc7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +48 -18
  4. data/apis/AutoScaling-2011-01-01.json +14 -6
  5. data/apis/CloudFormation-2010-05-15.json +6 -6
  6. data/apis/CloudFront-2012-05-05.json +5 -6
  7. data/apis/CloudFront-2013-05-12.json +5 -6
  8. data/apis/CloudFront-2013-08-26.json +5 -6
  9. data/apis/CloudFront-2013-11-11.json +5 -6
  10. data/apis/CloudFront-2013-11-22.json +5557 -0
  11. data/apis/CloudFront-2014-01-31.json +5627 -0
  12. data/apis/CloudSearch-2011-02-01.json +136 -4
  13. data/apis/CloudSearch-2013-01-01.json +3515 -0
  14. data/apis/CloudTrail-2013-11-01.json +288 -0
  15. data/apis/CloudWatch-2010-08-01.json +6 -6
  16. data/apis/DataPipeline-2012-10-29.json +0 -1
  17. data/apis/DirectConnect-2012-10-25.json +5 -6
  18. data/apis/DynamoDB-2011-12-05.json +6 -6
  19. data/apis/DynamoDB-2012-08-10.json +307 -6
  20. data/apis/EC2-2013-06-15.json +6 -6
  21. data/apis/EC2-2013-10-01.json +6 -6
  22. data/apis/EC2-2013-10-15.json +6 -6
  23. data/apis/EC2-2014-02-01.json +15189 -0
  24. data/apis/EMR-2009-03-31.json +8 -8
  25. data/apis/ElastiCache-2012-11-15.json +6 -6
  26. data/apis/ElastiCache-2013-06-15.json +6 -6
  27. data/apis/ElastiCache-2014-03-24.json +4344 -0
  28. data/apis/ElasticBeanstalk-2010-12-01.json +6 -7
  29. data/apis/ElasticLoadBalancing-2012-06-01.json +216 -6
  30. data/apis/ElasticTranscoder-2012-09-25.json +4 -5
  31. data/apis/Glacier-2012-06-01.json +5 -5
  32. data/apis/IAM-2010-05-08.json +6 -6
  33. data/apis/ImportExport-2010-06-01.json +5 -6
  34. data/apis/Kinesis-2013-12-02.json +2 -3
  35. data/apis/OpsWorks-2013-02-18.json +149 -2
  36. data/apis/RDS-2013-01-10.json +6 -6
  37. data/apis/RDS-2013-02-12.json +6 -6
  38. data/apis/RDS-2013-05-15.json +6 -6
  39. data/apis/RDS-2013-09-09.json +6 -6
  40. data/apis/Redshift-2012-12-01.json +64 -5
  41. data/apis/Route53-2012-12-12.json +5 -6
  42. data/apis/Route53-2013-04-01.json +37 -6
  43. data/apis/S3-2006-03-01.json +8 -7
  44. data/apis/SDB-2009-04-15.json +5 -6
  45. data/apis/SES-2010-12-01.json +0 -1
  46. data/apis/SNS-2010-03-31.json +6 -6
  47. data/apis/SQS-2012-11-05.json +154 -6
  48. data/apis/STS-2011-06-15.json +14 -6
  49. data/apis/SWF-2012-01-25.json +6 -6
  50. data/apis/StorageGateway-2012-06-30.json +16 -16
  51. data/apis/StorageGateway-2013-06-30.json +21 -21
  52. data/apis/Support-2013-04-15.json +0 -1
  53. data/apis/configuration/endpoints.json +258 -154
  54. data/apis/source/autoscaling-2011-01-01.json +19 -19
  55. data/apis/source/cloudformation-2010-05-15.json +17 -17
  56. data/apis/source/cloudfront-2013-11-22.json +8898 -0
  57. data/apis/source/cloudfront-2013-11-22.paginators.json +32 -0
  58. data/apis/source/cloudfront-2013-11-22.waiters.json +29 -0
  59. data/apis/source/cloudfront-2014-01-31.json +8975 -0
  60. data/apis/source/cloudfront-2014-01-31.normal.json +2905 -0
  61. data/apis/source/cloudfront-2014-01-31.paginators.json +32 -0
  62. data/apis/source/cloudfront-2014-01-31.waiters.json +29 -0
  63. data/apis/source/cloudsearch-2011-02-01.json +286 -8
  64. data/apis/source/cloudsearch-2013-01-01.json +5547 -0
  65. data/apis/source/cloudsearch-2013-01-01.paginators.json +20 -0
  66. data/apis/source/cloudtrail-2013-11-01.json +539 -0
  67. data/apis/source/cloudtrail-2013-11-01.paginators.json +7 -0
  68. data/apis/source/dynamodb-2011-12-05.json +19 -0
  69. data/apis/source/dynamodb-2012-08-10.json +415 -2
  70. data/apis/source/ec2-2014-02-01.json +20576 -0
  71. data/apis/source/ec2-2014-02-01.paginators.json +126 -0
  72. data/apis/source/ec2-2014-02-01.waiters.json +146 -0
  73. data/apis/source/elasticache-2014-03-24.json +6463 -0
  74. data/apis/source/elasticache-2014-03-24.paginators.json +70 -0
  75. data/apis/source/elasticloadbalancing-2012-06-01.json +455 -164
  76. data/apis/source/elasticloadbalancing-2012-06-01.normal.json +2107 -0
  77. data/apis/source/kinesis-2013-12-02.json +5 -5
  78. data/apis/source/kinesis-2013-12-02.normal.json +761 -0
  79. data/apis/source/kinesis-2013-12-02.paginators.json +6 -6
  80. data/apis/source/opsworks-2013-02-18.json +242 -39
  81. data/apis/source/opsworks-2013-02-18.paginators.json +3 -0
  82. data/apis/source/redshift-2012-12-01.json +180 -91
  83. data/apis/source/route53-2013-04-01.json +68 -4
  84. data/apis/source/sqs-2012-11-05.json +237 -7
  85. data/apis/source/sts-2011-06-15.json +18 -2
  86. data/bin/aws.rb +7 -7
  87. data/doc-src/plugins/apis.rb +1 -1
  88. data/features/cloudtrail/client.feature +17 -0
  89. data/features/cloudtrail/step_definitions.rb +6 -0
  90. data/features/datapipeline/client.feature +1 -1
  91. data/lib/aws.rb +21 -5
  92. data/lib/aws/api/service_translators/s3.rb +1 -0
  93. data/lib/aws/api/translator.rb +1 -2
  94. data/lib/aws/credential_provider_chain.rb +62 -0
  95. data/lib/aws/credentials.rb +4 -1
  96. data/lib/aws/errors.rb +4 -0
  97. data/lib/aws/plugins/credentials.rb +24 -31
  98. data/lib/aws/plugins/s3_location_constraint.rb +38 -0
  99. data/lib/aws/shared_credentials.rb +105 -0
  100. data/lib/aws/structure.rb +1 -0
  101. data/lib/aws/util.rb +18 -19
  102. data/lib/aws/version.rb +1 -1
  103. data/spec/aws/credentials_spec.rb +8 -0
  104. data/spec/aws/plugins/credentials_spec.rb +71 -15
  105. data/spec/aws/plugins/s3_location_constraint_spec.rb +48 -0
  106. data/spec/aws/shared_credentials_spec.rb +68 -0
  107. data/spec/aws/util_spec.rb +107 -0
  108. data/spec/aws_spec.rb +6 -0
  109. data/spec/fixtures/credentials/mock_shared_credentials +14 -0
  110. data/spec/fixtures/operations/s3/create_bucket_with_implied_location_constraint.yml +23 -0
  111. data/spec/spec_helper.rb +4 -0
  112. data/tasks/test.rake +10 -7
  113. data/vendor/seahorse/lib/seahorse/client/param_converter.rb +2 -2
  114. metadata +43 -3
  115. data/lib/aws/plugins/instance_profile_credentials.rb +0 -14
@@ -26,6 +26,7 @@ module Aws
26
26
  else obj
27
27
  end
28
28
  end
29
+ alias to_h to_hash
29
30
 
30
31
  # @param [Array<Symbol>] properties
31
32
  # @return [Structure]
@@ -4,28 +4,27 @@ module Aws
4
4
  # @api private
5
5
  module Util
6
6
 
7
+ # @api private
8
+ IRREGULAR_INFLECTIONS = {
9
+ 'ARNs' => 'arns',
10
+ 'CNAMEs' => 'cnames',
11
+ 'Ec2' => 'ec2',
12
+ 'ElastiCache' => 'elasticache',
13
+ 'ETag' => 'etag',
14
+ 'iSCSI' => 'iscsi',
15
+ }
16
+
17
+ # @api private
18
+ IRREGULAR_REGEX = Regexp.new(IRREGULAR_INFLECTIONS.keys.join('|'))
19
+
7
20
  # @param [String] string
8
21
  # @return [String] Returns the underscored version of the given string.
9
22
  def underscore(string)
10
- inflector = Hash.new do |hash, key|
11
- key.
12
- gsub(/([A-Z0-9]+)([A-Z][a-z])/, '\1_\2'). # split acronyms
13
- scan(/[a-z]+|\d+|[A-Z0-9]+[a-z]*/). # split words
14
- join('_').downcase # join parts
15
- end
16
-
17
- # add a few irregular inflections
18
- inflector['ETag'] = 'etag'
19
- inflector['s3Bucket'] = 's3_bucket'
20
- inflector['s3Key'] = 's3_key'
21
- inflector['Ec2KeyName'] = 'ec2_key_name'
22
- inflector['Ec2SubnetId'] = 'ec2_subnet_id'
23
- inflector['Ec2VolumeId'] = 'ec2_volume_id'
24
- inflector['Ec2InstanceId'] = 'ec2_instance_id'
25
- inflector['ElastiCache'] = 'elasticache'
26
- inflector['NotificationARNs'] = 'notification_arns'
27
-
28
- inflector[string]
23
+ string.
24
+ gsub(IRREGULAR_REGEX) { |word| '_' + IRREGULAR_INFLECTIONS[word] }.
25
+ gsub(/([A-Z0-9]+)([A-Z][a-z])/, '\1_\2').
26
+ scan(/[a-z0-9]+|\d+|[A-Z0-9]+[a-z]*/).
27
+ join('_').downcase
29
28
  end
30
29
  module_function :underscore
31
30
 
@@ -1,3 +1,3 @@
1
1
  module Aws
2
- VERSION = '2.0.0.rc6'
2
+ VERSION = '2.0.0.rc7'
3
3
  end
@@ -34,6 +34,14 @@ module Aws
34
34
  expect(Credentials.new('akid', nil).set?).to be(false)
35
35
  end
36
36
 
37
+ it 'returns false if the key is an empty string' do
38
+ expect(Credentials.new('', 'secret').set?).to be(false)
39
+ end
40
+
41
+ it 'returns false if the secret is an empty string' do
42
+ expect(Credentials.new('akid', '').set?).to be(false)
43
+ end
44
+
37
45
  end
38
46
  end
39
47
  end
@@ -8,8 +8,19 @@ module Aws
8
8
 
9
9
  let(:plugin) { Plugins::Credentials.new }
10
10
 
11
+
11
12
  before do
13
+
14
+ # remove all
12
15
  stub_const("ENV", env)
16
+
17
+ # disable loading credentials from shared file
18
+ allow(Dir).to receive(:home).and_raise(ArgumentError)
19
+
20
+ # disable instance profile credentials
21
+ path = '/latest/meta-data/iam/security-credentials/'
22
+ stub_request(:get, "http://169.254.169.254#{path}").to_raise(SocketError)
23
+
13
24
  end
14
25
 
15
26
  describe 'configuration' do
@@ -26,19 +37,20 @@ module Aws
26
37
  expect(config.build!.credentials).to be(nil)
27
38
  end
28
39
 
29
- it 'hydrates credentials from the cmdline env (AWS_)' do
30
- env['AWS_ACCESS_KEY'] = 'akid'
31
- env['AWS_SECRET_KEY'] = 'secret'
32
- env['AWS_SESSION_TOKEN'] = 'token'
40
+ it 'hydrates credentials from config options' do
41
+ options = {}
42
+ options[:access_key_id] = 'akid'
43
+ options[:secret_access_key] = 'secret'
44
+ options[:session_token] = 'session'
33
45
  plugin.add_options(config)
34
- cfg = config.build!
46
+ cfg = config.build!(options)
35
47
  expect(cfg.credentials.set?).to be(true)
36
48
  expect(cfg.credentials.access_key_id).to eq('akid')
37
49
  expect(cfg.credentials.secret_access_key).to eq('secret')
38
- expect(cfg.credentials.session_token).to eq('token')
50
+ expect(cfg.credentials.session_token).to eq('session')
39
51
  end
40
52
 
41
- it 'hydrates credentials from the env (AWS_)' do
53
+ it 'hydrates credentials from ENV with prefix AWS_' do
42
54
  env['AWS_ACCESS_KEY_ID'] = 'akid'
43
55
  env['AWS_SECRET_ACCESS_KEY'] = 'secret'
44
56
  env['AWS_SESSION_TOKEN'] = 'token'
@@ -50,7 +62,7 @@ module Aws
50
62
  expect(cfg.credentials.session_token).to eq('token')
51
63
  end
52
64
 
53
- it 'hydrates credentials from the env (AMAZON_)' do
65
+ it 'hydrates credentials from ENV with prefix AMAZON_' do
54
66
  env['AMAZON_ACCESS_KEY_ID'] = 'akid2'
55
67
  env['AMAZON_SECRET_ACCESS_KEY'] = 'secret2'
56
68
  env['AMAZON_SESSION_TOKEN'] = 'token2'
@@ -62,17 +74,61 @@ module Aws
62
74
  expect(cfg.credentials.session_token).to eq('token2')
63
75
  end
64
76
 
65
- it 'hydrates credentials object from 3 options' do
66
- options = {}
67
- options[:access_key_id] = 'akid'
68
- options[:secret_access_key] = 'secret'
69
- options[:session_token] = 'session'
77
+ it 'hydrates credentials from ENV at AWS_ACCESS_KEY & AWS_SECRET_KEY' do
78
+ env['AWS_ACCESS_KEY'] = 'akid3'
79
+ env['AWS_SECRET_KEY'] = 'secret3'
70
80
  plugin.add_options(config)
71
- cfg = config.build!(options)
81
+ cfg = config.build!
82
+ expect(cfg.credentials.set?).to be(true)
83
+ expect(cfg.credentials.access_key_id).to eq('akid3')
84
+ expect(cfg.credentials.secret_access_key).to eq('secret3')
85
+ expect(cfg.credentials.session_token).to be(nil)
86
+ end
87
+
88
+ it 'hydrates credentials from the shared credentials file' do
89
+ mock_path = File.join(
90
+ File.dirname(__FILE__), '..', '..', 'fixtures', 'credentials',
91
+ 'mock_shared_credentials')
92
+ path = File.join('HOME', '.aws', 'credentials')
93
+ allow(Dir).to receive(:home).and_return('HOME')
94
+ allow(File).to receive(:exists?).with(path).and_return(true)
95
+ allow(File).to receive(:readable?).with(path).and_return(true)
96
+ expect(File).to receive(:read).with(path).and_return(File.read(mock_path))
97
+ plugin.add_options(config)
98
+ cfg = config.build!
99
+ cfg.credentials
100
+ expect(cfg.credentials).to be_kind_of(SharedCredentials)
101
+ expect(cfg.credentials.set?).to be(true)
102
+ expect(cfg.credentials.access_key_id).to eq('ACCESS_KEY_0')
103
+ expect(cfg.credentials.secret_access_key).to eq('SECRET_KEY_0')
104
+ expect(cfg.credentials.session_token).to eq('TOKEN_0')
105
+ end
106
+
107
+ it 'hydrates credentials from the instance profile service' do
108
+ path = '/latest/meta-data/iam/security-credentials/'
109
+ resp = <<-JSON.strip
110
+ {
111
+ "Code" : "Success",
112
+ "LastUpdated" : "2013-11-22T20:03:48Z",
113
+ "Type" : "AWS-HMAC",
114
+ "AccessKeyId" : "akid",
115
+ "SecretAccessKey" : "secret",
116
+ "Token" : "token",
117
+ "Expiration" : "#{Time.now.strftime('%Y-%m-%dT%H:%M:%SZ')}"
118
+ }
119
+ JSON
120
+ stub_request(:get, "http://169.254.169.254#{path}").
121
+ to_return(:status => 200, :body => "profile-name\n")
122
+ stub_request(:get, "http://169.254.169.254#{path}profile-name").
123
+ to_return(:status => 200, :body => resp)
124
+ plugin.add_options(config)
125
+ cfg = config.build!
126
+ cfg.credentials
127
+ expect(cfg.credentials).to be_kind_of(InstanceProfileCredentials)
72
128
  expect(cfg.credentials.set?).to be(true)
73
129
  expect(cfg.credentials.access_key_id).to eq('akid')
74
130
  expect(cfg.credentials.secret_access_key).to eq('secret')
75
- expect(cfg.credentials.session_token).to eq('session')
131
+ expect(cfg.credentials.session_token).to eq('token')
76
132
  end
77
133
 
78
134
  it 'raises an error if you construct a client without credentials' do
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ module Aws
4
+ module Plugins
5
+ describe S3LocationConstraint do
6
+
7
+ let(:config_region) {
8
+ cfg = Seahorse::Client::Configuration.new
9
+ cfg.add_option(:region, 'sa-east-1')
10
+ cfg.add_option(:endpoint, 's3-sa-east-1.amazonaws.com')
11
+ }
12
+
13
+ let(:params_with_constraint) {
14
+ {create_bucket_configuration: {location_constraint: 'my-fake-1'}}
15
+ }
16
+
17
+ let(:config_default) {
18
+ cfg = Seahorse::Client::Configuration.new
19
+ cfg.add_option(:region, 'us-east-1')
20
+ cfg.add_option(:endpoint, 's3.amazonaws.com')
21
+ }
22
+
23
+ it 'coerces the location constraint from the S3 region' do
24
+ resp = call_handler(S3LocationConstraint::Handler,
25
+ params: {}, config: config_region)
26
+ expect(resp.context
27
+ .params[:create_bucket_configuration][:location_constraint])
28
+ .to eq('sa-east-1')
29
+ end
30
+
31
+ it 'does not set location constraint when no region is specified' do
32
+ resp = call_handler(S3LocationConstraint::Handler,
33
+ params: {}, config: config_default)
34
+ expect(resp.context
35
+ .params[:create_bucket_configuration]).to be_nil
36
+ end
37
+
38
+ it 'does not override a specified location constraint' do
39
+ resp = call_handler(S3LocationConstraint::Handler,
40
+ params: params_with_constraint,
41
+ config: config_region)
42
+ expect(resp.context
43
+ .params[:create_bucket_configuration][:location_constraint])
44
+ .to eq('my-fake-1')
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ module Aws
4
+ describe SharedCredentials do
5
+
6
+ before(:each) do
7
+ stub_const('ENV', {})
8
+ allow(Dir).to receive(:home).and_raise(ArgumentError)
9
+ end
10
+
11
+ let(:mock_credential_file) {
12
+ File.expand_path(File.join(File.dirname(__FILE__),
13
+ '..', 'fixtures', 'credentials', 'mock_shared_credentials'))
14
+ }
15
+
16
+ it 'defaults path to Dir.home/.aws/credentials' do
17
+ expect(Dir).to receive(:home).and_return('HOME')
18
+ credentials = SharedCredentials.new
19
+ expect(credentials.path).to eq(File.join('HOME', '.aws', 'credentials'))
20
+ end
21
+
22
+ it 'reads the correct default credentials from a credentials file' do
23
+ creds = SharedCredentials.new(path:mock_credential_file)
24
+ expect(creds.access_key_id).to eq('ACCESS_KEY_0')
25
+ expect(creds.secret_access_key).to eq('SECRET_KEY_0')
26
+ expect(creds.session_token).to eq('TOKEN_0')
27
+ end
28
+
29
+ it 'supports fetching profiles from ENV' do
30
+ stub_const('ENV', { 'AWS_PROFILE' => 'barprofile' })
31
+ creds = SharedCredentials.new(path:mock_credential_file)
32
+ expect(creds.access_key_id).to eq('ACCESS_KEY_2')
33
+ expect(creds.secret_access_key).to eq('SECRET_KEY_2')
34
+ expect(creds.session_token).to eq('TOKEN_2')
35
+ end
36
+
37
+ it 'supports a manually specified profile' do
38
+ stub_const('ENV', { 'AWS_PROFILE' => 'barporfile' })
39
+ creds = SharedCredentials.new(
40
+ path: mock_credential_file,
41
+ profile_name: 'fooprofile')
42
+ expect(creds.access_key_id).to eq('ACCESS_KEY_1')
43
+ expect(creds.secret_access_key).to eq('SECRET_KEY_1')
44
+ expect(creds.session_token).to eq('TOKEN_1')
45
+ end
46
+
47
+ it 'raises when a profile does not exist' do
48
+ msg = /^Profile `bazprofile' not found in .+mock_shared_credentials/
49
+ expect {
50
+ SharedCredentials.new(
51
+ path: mock_credential_file,
52
+ profile_name: 'bazprofile'
53
+ )
54
+ }.to raise_error(Errors::NoSuchProfileError, msg)
55
+ end
56
+
57
+ it 'is set when credentails is valid' do
58
+ creds = SharedCredentials.new(path:mock_credential_file)
59
+ expect(creds.set?).to eq(true)
60
+ end
61
+
62
+ it 'is not set when key_id or access_key is missing' do
63
+ creds = SharedCredentials.new(path:'/no/file/here')
64
+ expect(creds.set?).to eq(false)
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,107 @@
1
+ # Copyright 2011-2013 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 'spec_helper'
15
+
16
+ module Aws::Util
17
+ describe 'underscore' do
18
+
19
+ include Aws::Util
20
+
21
+ it 'downcases titleized words' do
22
+ expect(underscore('Foo')).to eq('foo')
23
+ end
24
+
25
+ it 'breaks compound titleized words with underscores' do
26
+ expect(underscore('FooBarYuck')).to eq('foo_bar_yuck')
27
+ end
28
+
29
+ it 'treats acronyms as a single word' do
30
+ expect(underscore('AWS')).to eq('aws')
31
+ end
32
+
33
+ it 'preserves leading acronyms' do
34
+ expect(underscore('AWSAccount')).to eq('aws_account')
35
+ end
36
+
37
+ it 'preserves trailing acronyms' do
38
+ expect(underscore('SimpleDB')).to eq('simple_db')
39
+ end
40
+
41
+ it 'preserves nested acronyms' do
42
+ expect(underscore('MySUPERWord')).to eq('my_super_word')
43
+ expect(underscore('AWSAccountID')).to eq('aws_account_id')
44
+ end
45
+
46
+ it 'treats trailing numbers as a part of acronyms' do
47
+ expect(underscore('MD5OfBody')).to eq('md5_of_body')
48
+ expect(underscore('S3Bucket')).to eq('s3_bucket')
49
+ expect(underscore('EC2Instance')).to eq('ec2_instance')
50
+ end
51
+
52
+ it 'does not include leading numbers as part of a word' do
53
+ expect(underscore('SentLast24Hours')).to eq('sent_last_24_hours')
54
+ expect(underscore('24MIN')).to eq('24_min')
55
+ end
56
+
57
+ it 'accepts words that start with a lower case letter' do
58
+ expect(underscore('s3Key')).to eq('s3_key')
59
+ expect(underscore('s3Bucket')).to eq('s3_bucket')
60
+ end
61
+
62
+ describe 'irregular inflections' do
63
+ # A known list of irregular strings that need to inflect correctly
64
+ {
65
+ 'ETag' => 'etag',
66
+ 's3Bucket' => 's3_bucket',
67
+ 's3Key' => 's3_key',
68
+ 'Ec2KeyName' => 'ec2_key_name',
69
+ 'Ec2SubnetId' => 'ec2_subnet_id',
70
+ 'Ec2VolumeId' => 'ec2_volume_id',
71
+ 'Ec2InstanceId' => 'ec2_instance_id',
72
+ 'ElastiCache' => 'elasticache',
73
+ 'NotificationARNs' => 'notification_arns',
74
+ 'SentLast24Hours' => 'sent_last_24_hours',
75
+ 'Max24HourSend' => 'max_24_hour_send',
76
+ 'AuthenticationCode1' => 'authentication_code_1',
77
+ 'AuthenticationCode2' => 'authentication_code_2',
78
+ 'SwapEnvironmentCNAMEs' => 'swap_environment_cnames',
79
+ 'CachediSCSIVolume' => 'cached_iscsi_volume',
80
+ 'CachediSCSIVolumeInformation' => 'cached_iscsi_volume_information',
81
+ 'CachediSCSIVolumes' => 'cached_iscsi_volumes',
82
+ 'CreateCachediSCSIVolume' => 'create_cached_iscsi_volume',
83
+ 'CreateCachediSCSIVolumeInput' => 'create_cached_iscsi_volume_input',
84
+ 'CreateCachediSCSIVolumeOutput' => 'create_cached_iscsi_volume_output',
85
+ 'CreateStorediSCSIVolume' => 'create_stored_iscsi_volume',
86
+ 'CreateStorediSCSIVolumeInput' => 'create_stored_iscsi_volume_input',
87
+ 'CreateStorediSCSIVolumeOutput' => 'create_stored_iscsi_volume_output',
88
+ 'DescribeCachediSCSIVolumes' => 'describe_cached_iscsi_volumes',
89
+ 'DescribeCachediSCSIVolumesInput' => 'describe_cached_iscsi_volumes_input',
90
+ 'DescribeCachediSCSIVolumesOutput' => 'describe_cached_iscsi_volumes_output',
91
+ 'DescribeStorediSCSIVolumes' => 'describe_stored_iscsi_volumes',
92
+ 'DescribeStorediSCSIVolumesInput' => 'describe_stored_iscsi_volumes_input',
93
+ 'DescribeStorediSCSIVolumesOutput' => 'describe_stored_iscsi_volumes_output',
94
+ 'DeviceiSCSIAttributes' => 'device_iscsi_attributes',
95
+ 'StorediSCSIVolume' => 'stored_iscsi_volume',
96
+ 'StorediSCSIVolumeInformation' => 'stored_iscsi_volume_information',
97
+ 'StorediSCSIVolumes' => 'stored_iscsi_volumes',
98
+ 'VolumeiSCSIAttributes' => 'volume_iscsi_attributes'
99
+ }.each do |camel_case, underscored|
100
+ it "inflects #{camel_case} to #{underscored}" do
101
+ expect(underscore(camel_case)).to eq(underscored)
102
+ end
103
+ end
104
+ end
105
+
106
+ end
107
+ end
@@ -68,6 +68,12 @@ module Aws
68
68
  expect(svc.config.http_wire_trace).to be(true)
69
69
  end
70
70
 
71
+ it 'adds the helper method to Aws (not Module)' do
72
+ Aws.add_service(:DummyService, ['apis/S3-2006-03-01.json'])
73
+ expect(Aws).to respond_to(:dummyservice)
74
+ expect(Aws.class).not_to respond_to(:dummyservice)
75
+ end
76
+
71
77
  it 'filters the :api_version option from the client constructor' do
72
78
  Aws.add_service(:DummyService, ['apis/S3-2006-03-01.json'])
73
79
  Aws.config[:api_version] = '2007-01-01'
@@ -0,0 +1,14 @@
1
+ [default]
2
+ aws_access_key_id = ACCESS_KEY_0
3
+ aws_secret_access_key = SECRET_KEY_0
4
+ aws_session_token = TOKEN_0
5
+
6
+ [fooprofile]
7
+ aws_access_key_id = ACCESS_KEY_1
8
+ aws_secret_access_key = SECRET_KEY_1
9
+ aws_session_token = TOKEN_1
10
+
11
+ [barprofile]
12
+ aws_access_key_id = ACCESS_KEY_2
13
+ aws_secret_access_key = SECRET_KEY_2
14
+ aws_session_token = TOKEN_2