aws-sdk-core 2.0.3 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/apis/CognitoIdentity.api.json +16 -4
  3. data/apis/EC2.paginators.json +3 -0
  4. data/apis/ElastiCache.api.json +164 -15
  5. data/apis/IAM.api.json +326 -1
  6. data/apis/IAM.resources.json +2 -29
  7. data/apis/Route53Domains.api.json +56 -0
  8. data/apis/S3.api.json +1 -1
  9. data/endpoints.json +62 -76
  10. data/lib/aws-sdk-core.rb +4 -14
  11. data/lib/aws-sdk-core/api/documenter.rb +1 -1
  12. data/lib/aws-sdk-core/api/service_customizations.rb +1 -0
  13. data/lib/aws-sdk-core/assume_role_credentials.rb +46 -0
  14. data/lib/aws-sdk-core/autoscaling.rb +3 -3
  15. data/lib/aws-sdk-core/cloudformation.rb +3 -3
  16. data/lib/aws-sdk-core/cloudfront.rb +4 -4
  17. data/lib/aws-sdk-core/cloudsearch.rb +3 -3
  18. data/lib/aws-sdk-core/cloudsearchdomain.rb +2 -2
  19. data/lib/aws-sdk-core/cloudtrail.rb +3 -3
  20. data/lib/aws-sdk-core/cloudwatch.rb +3 -3
  21. data/lib/aws-sdk-core/cloudwatchlogs.rb +3 -3
  22. data/lib/aws-sdk-core/cognitoidentity.rb +2 -2
  23. data/lib/aws-sdk-core/cognitosync.rb +2 -2
  24. data/lib/aws-sdk-core/datapipeline.rb +3 -3
  25. data/lib/aws-sdk-core/directconnect.rb +3 -3
  26. data/lib/aws-sdk-core/dynamodb.rb +4 -4
  27. data/lib/aws-sdk-core/ec2.rb +5 -5
  28. data/lib/aws-sdk-core/elasticache.rb +3 -3
  29. data/lib/aws-sdk-core/elasticbeanstalk.rb +3 -3
  30. data/lib/aws-sdk-core/elasticloadbalancing.rb +3 -3
  31. data/lib/aws-sdk-core/elastictranscoder.rb +4 -4
  32. data/lib/aws-sdk-core/emr.rb +3 -3
  33. data/lib/aws-sdk-core/endpoint_provider.rb +16 -78
  34. data/lib/aws-sdk-core/glacier.rb +5 -5
  35. data/lib/aws-sdk-core/iam.rb +4 -4
  36. data/lib/aws-sdk-core/importexport.rb +3 -3
  37. data/lib/aws-sdk-core/instance_profile_credentials.rb +13 -45
  38. data/lib/aws-sdk-core/kinesis.rb +3 -3
  39. data/lib/aws-sdk-core/opsworks.rb +4 -4
  40. data/lib/aws-sdk-core/pageable_response.rb +18 -0
  41. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +1 -5
  42. data/lib/aws-sdk-core/plugins/request_signer.rb +3 -9
  43. data/lib/aws-sdk-core/plugins/s3_region_detection.rb +157 -0
  44. data/lib/aws-sdk-core/plugins/stub_responses.rb +13 -1
  45. data/lib/aws-sdk-core/rds.rb +4 -4
  46. data/lib/aws-sdk-core/redshift.rb +4 -4
  47. data/lib/aws-sdk-core/refreshing_credentials.rb +73 -0
  48. data/lib/aws-sdk-core/route53.rb +3 -3
  49. data/lib/aws-sdk-core/route53domains.rb +2 -2
  50. data/lib/aws-sdk-core/s3.rb +24 -5
  51. data/lib/aws-sdk-core/s3/bucket_region_cache.rb +75 -0
  52. data/lib/aws-sdk-core/ses.rb +4 -4
  53. data/lib/aws-sdk-core/signers/v4.rb +1 -1
  54. data/lib/aws-sdk-core/simpledb.rb +3 -3
  55. data/lib/aws-sdk-core/sns.rb +4 -4
  56. data/lib/aws-sdk-core/sqs.rb +4 -4
  57. data/lib/aws-sdk-core/storagegateway.rb +3 -3
  58. data/lib/aws-sdk-core/sts.rb +2 -2
  59. data/lib/aws-sdk-core/support.rb +3 -3
  60. data/lib/aws-sdk-core/swf.rb +3 -3
  61. data/lib/aws-sdk-core/version.rb +1 -1
  62. metadata +6 -2
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:CloudTrail, {
2
- api: File.join(Aws::APIS_DIR, 'CloudTrail.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'CloudTrail.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'CloudTrail.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'CloudTrail.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'CloudTrail.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'CloudTrail.paginators.json'),
5
5
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:CloudWatch, {
2
- api: File.join(Aws::APIS_DIR, 'CloudWatch.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'CloudWatch.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'CloudWatch.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'CloudWatch.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'CloudWatch.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'CloudWatch.paginators.json'),
5
5
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:CloudWatchLogs, {
2
- api: File.join(Aws::APIS_DIR, 'CloudWatchLogs.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'CloudWatchLogs.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'CloudWatchLogs.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'CloudWatchLogs.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'CloudWatchLogs.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'CloudWatchLogs.paginators.json'),
5
5
  })
@@ -1,4 +1,4 @@
1
1
  Aws.add_service(:CognitoIdentity, {
2
- api: File.join(Aws::APIS_DIR, 'CognitoIdentity.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'CognitoIdentity.docs.json'),
2
+ api: File.join(Aws::API_DIR, 'CognitoIdentity.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'CognitoIdentity.docs.json'),
4
4
  })
@@ -1,4 +1,4 @@
1
1
  Aws.add_service(:CognitoSync, {
2
- api: File.join(Aws::APIS_DIR, 'CognitoSync.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'CognitoSync.docs.json'),
2
+ api: File.join(Aws::API_DIR, 'CognitoSync.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'CognitoSync.docs.json'),
4
4
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:DataPipeline, {
2
- api: File.join(Aws::APIS_DIR, 'DataPipeline.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'DataPipeline.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'DataPipeline.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'DataPipeline.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'DataPipeline.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'DataPipeline.paginators.json'),
5
5
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:DirectConnect, {
2
- api: File.join(Aws::APIS_DIR, 'DirectConnect.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'DirectConnect.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'DirectConnect.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'DirectConnect.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'DirectConnect.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'DirectConnect.paginators.json'),
5
5
  })
@@ -1,8 +1,8 @@
1
1
  Aws.add_service(:DynamoDB, {
2
- api: File.join(Aws::APIS_DIR, 'DynamoDB.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'DynamoDB.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'DynamoDB.paginators.json'),
5
- waiters: File.join(Aws::APIS_DIR, 'DynamoDB.waiters.json'),
2
+ api: File.join(Aws::API_DIR, 'DynamoDB.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'DynamoDB.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'DynamoDB.paginators.json'),
5
+ waiters: File.join(Aws::API_DIR, 'DynamoDB.waiters.json'),
6
6
  })
7
7
 
8
8
  module Aws
@@ -1,7 +1,7 @@
1
1
  Aws.add_service(:EC2, {
2
- api: File.join(Aws::APIS_DIR, 'EC2.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'EC2.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'EC2.paginators.json'),
5
- resources: File.join(Aws::APIS_DIR, 'EC2.resources.json'),
6
- waiters: File.join(Aws::APIS_DIR, 'EC2.waiters.json'),
2
+ api: File.join(Aws::API_DIR, 'EC2.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'EC2.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'EC2.paginators.json'),
5
+ resources: File.join(Aws::API_DIR, 'EC2.resources.json'),
6
+ waiters: File.join(Aws::API_DIR, 'EC2.waiters.json'),
7
7
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:ElastiCache, {
2
- api: File.join(Aws::APIS_DIR, 'ElastiCache.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'ElastiCache.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'ElastiCache.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'ElastiCache.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'ElastiCache.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'ElastiCache.paginators.json'),
5
5
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:ElasticBeanstalk, {
2
- api: File.join(Aws::APIS_DIR, 'ElasticBeanstalk.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'ElasticBeanstalk.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'ElasticBeanstalk.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'ElasticBeanstalk.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'ElasticBeanstalk.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'ElasticBeanstalk.paginators.json'),
5
5
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:ElasticLoadBalancing, {
2
- api: File.join(Aws::APIS_DIR, 'ElasticLoadBalancing.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'ElasticLoadBalancing.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'ElasticLoadBalancing.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'ElasticLoadBalancing.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'ElasticLoadBalancing.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'ElasticLoadBalancing.paginators.json'),
5
5
  })
@@ -1,6 +1,6 @@
1
1
  Aws.add_service(:ElasticTranscoder, {
2
- api: File.join(Aws::APIS_DIR, 'ElasticTranscoder.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'ElasticTranscoder.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'ElasticTranscoder.paginators.json'),
5
- waiters: File.join(Aws::APIS_DIR, 'ElasticTranscoder.waiters.json'),
2
+ api: File.join(Aws::API_DIR, 'ElasticTranscoder.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'ElasticTranscoder.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'ElasticTranscoder.paginators.json'),
5
+ waiters: File.join(Aws::API_DIR, 'ElasticTranscoder.waiters.json'),
6
6
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:EMR, {
2
- api: File.join(Aws::APIS_DIR, 'EMR.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'EMR.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'EMR.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'EMR.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'EMR.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'EMR.paginators.json'),
5
5
  })
@@ -4,92 +4,30 @@ module Aws
4
4
  # @api private
5
5
  class EndpointProvider
6
6
 
7
- # @option options [Array<Hash>] :rules ([]) An array of grouped rules.
8
- def initialize(options = {})
9
- @rules = options[:rules] || []
10
- end
7
+ # @api private
8
+ PATH = File.join(File.dirname(__FILE__), '..', '..', 'endpoints.json')
9
+
10
+ # @api private
11
+ RULES = MultiJson.load(File.read(PATH))['endpoints']
11
12
 
12
- # @option options [required, String] :service
13
- # @option options [required, String] :region
14
- # @option options [required, String] :scheme
15
- # @return [String,nil]
16
- def resolve(options)
17
- @rules.each do |rule_group|
18
- if region_matches?(rule_group, options)
19
- rule_group['rules'].each do |rule|
20
- if service_matches?(rule, options)
21
- return expand_endpoint(rule['config']['endpoint'], options)
22
- end
13
+ class << self
14
+
15
+ def resolve(region, service)
16
+ keys(region, service).each do |key|
17
+ if match = RULES[key]
18
+ return expand(match['endpoint'], region.to_s, service.to_s)
23
19
  end
24
20
  end
25
21
  end
26
- nil
27
- end
28
22
 
29
- # @option options [required, String] :pattern The endpoint pattern with
30
- # optional placeholders. This is applied when rules match during
31
- # resolution. Valid placeholders include:
32
- #
33
- # * `{scheme}`
34
- # * `{region}`
35
- # * `{service}`
36
- #
37
- # An example pattern:
38
- #
39
- # "#{scheme}://{service}.{region}.amazonaws.com"
40
- #
41
- # @option options [Integer] :priority (100) A number from 0 to 999.
42
- # Rules with lower number have a higher priority and are evaluated first.
43
- #
44
- # @option options [String] :region_prefix ("") Causes regions with this
45
- # prefix to match. Leave this empty if you want to match all regions.
46
- #
47
- # @option options [Array<String>] :services A list of services this rule
48
- # applies to. Omit this option if you want this rule to apply to all
49
- # services.
50
- #
51
- # The string must be the service endpoint prefix as a string.
52
- # E.g. "s3", "ec2", "monitoring" (for cloud watch).
53
- #
54
- def add_rule(options = {})
55
- @rules = (@rules + [new_rule(options)]).sort_by { |r| r['priority'] }
56
- end
57
-
58
- private
59
-
60
- def new_rule(options)
61
- rule = {}
62
- rule['services'] = options[:services] if options[:services]
63
- rule['config'] = {}
64
- rule['config']['endpoint'] = options[:pattern]
65
- {
66
- 'priority' => options[:priority] || 100,
67
- 'regionPrefix' => options[:region_prefix] || '',
68
- 'rules' => [rule]
69
- }
70
- end
71
-
72
- def region_matches?(rule_group, options)
73
- options[:region] && options[:region].match(/^#{rule_group['regionPrefix']}/)
74
- end
75
-
76
- def service_matches?(rule, options)
77
- rule['services'].nil? || rule['services'].include?(options[:service])
78
- end
79
-
80
- def expand_endpoint(pattern, options)
81
- pattern.gsub(/{\w+}/) { |match| options[match[1..-2].to_sym] }
82
- end
83
-
84
- class << self
23
+ private
85
24
 
86
- def default_provider
87
- @default_provider ||= EndpointProvider.new(rules: default_rules)
25
+ def keys(region, service)
26
+ ["#{region}/#{service}", "#{region}/*", "*/#{service}", "*/*"]
88
27
  end
89
28
 
90
- def default_rules
91
- path = File.join(File.dirname(__FILE__), '..', '..', 'endpoints.json')
92
- MultiJson.load(File.read(path))
29
+ def expand(pattern, region, service)
30
+ 'https://' + pattern.sub('{region}', region).sub('{service}', service)
93
31
  end
94
32
 
95
33
  end
@@ -1,7 +1,7 @@
1
1
  Aws.add_service(:Glacier, {
2
- api: File.join(Aws::APIS_DIR, 'Glacier.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'Glacier.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'Glacier.paginators.json'),
5
- resources: File.join(Aws::APIS_DIR, 'Glacier.resources.json'),
6
- waiters: File.join(Aws::APIS_DIR, 'Glacier.waiters.json'),
2
+ api: File.join(Aws::API_DIR, 'Glacier.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'Glacier.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'Glacier.paginators.json'),
5
+ resources: File.join(Aws::API_DIR, 'Glacier.resources.json'),
6
+ waiters: File.join(Aws::API_DIR, 'Glacier.waiters.json'),
7
7
  })
@@ -1,6 +1,6 @@
1
1
  Aws.add_service(:IAM, {
2
- api: File.join(Aws::APIS_DIR, 'IAM.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'IAM.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'IAM.paginators.json'),
5
- resources: File.join(Aws::APIS_DIR, 'IAM.resources.json'),
2
+ api: File.join(Aws::API_DIR, 'IAM.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'IAM.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'IAM.paginators.json'),
5
+ resources: File.join(Aws::API_DIR, 'IAM.resources.json'),
6
6
  })
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:ImportExport, {
2
- api: File.join(Aws::APIS_DIR, 'ImportExport.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'ImportExport.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'ImportExport.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'ImportExport.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'ImportExport.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'ImportExport.paginators.json'),
5
5
  })
@@ -1,10 +1,11 @@
1
1
  require 'time'
2
2
  require 'net/http'
3
- require 'thread'
4
3
 
5
4
  module Aws
6
5
  class InstanceProfileCredentials < Credentials
7
6
 
7
+ include RefreshingCredentials
8
+
8
9
  # @api private
9
10
  class Non200Response < RuntimeError; end
10
11
 
@@ -38,58 +39,25 @@ module Aws
38
39
  @http_open_timeout = options[:http_open_timeout] || 1
39
40
  @http_read_timeout = options[:http_read_timeout] || 1
40
41
  @http_debug_output = options[:http_debug_output]
41
- @refresh_mutex = Mutex.new
42
- refresh!
42
+ super
43
43
  end
44
44
 
45
45
  # @return [Integer] The number of times to retry failed atttempts to
46
46
  # fetch credentials from the instance metadata service. Defaults to 0.
47
47
  attr_reader :retries
48
48
 
49
- # @return [String,nil]
50
- def access_key_id
51
- refresh_if_stale
52
- @access_key_id
53
- end
54
-
55
- # @return [String,nil]
56
- def secret_access_key
57
- refresh_if_stale
58
- @secret_access_key
59
- end
60
-
61
- # @return [String,nil]
62
- def session_token
63
- refresh_if_stale
64
- @session_token
65
- end
66
-
67
- # @return [Time,nil]
68
- def expiration
69
- refresh_if_stale
70
- @expiration
71
- end
72
-
73
- def refresh!
74
- @refresh_mutex.synchronize do
75
- credentials = MultiJson.load(get_credentials)
76
- @access_key_id = credentials['AccessKeyId']
77
- @secret_access_key = credentials['SecretAccessKey']
78
- @session_token = credentials['Token']
79
- if expires = credentials['Expiration']
80
- @expiration = Time.parse(expires)
81
- else
82
- @expiration = nil
83
- end
84
- end
85
- end
86
-
87
49
  private
88
50
 
89
- # Refreshes instance metadata credentials if they are within
90
- # 5 minutes of expiration.
91
- def refresh_if_stale
92
- refresh! if @expiration && @expiration.utc <= Time.now.utc + 5 * 60
51
+ def refresh
52
+ credentials = MultiJson.load(get_credentials)
53
+ @access_key_id = credentials['AccessKeyId']
54
+ @secret_access_key = credentials['SecretAccessKey']
55
+ @session_token = credentials['Token']
56
+ if expires = credentials['Expiration']
57
+ @expiration = Time.parse(expires)
58
+ else
59
+ @expiration = nil
60
+ end
93
61
  end
94
62
 
95
63
  def get_credentials
@@ -1,5 +1,5 @@
1
1
  Aws.add_service(:Kinesis, {
2
- api: File.join(Aws::APIS_DIR, 'Kinesis.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'Kinesis.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'Kinesis.paginators.json'),
2
+ api: File.join(Aws::API_DIR, 'Kinesis.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'Kinesis.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'Kinesis.paginators.json'),
5
5
  })
@@ -1,6 +1,6 @@
1
1
  Aws.add_service(:OpsWorks, {
2
- api: File.join(Aws::APIS_DIR, 'OpsWorks.api.json'),
3
- docs: File.join(Aws::APIS_DIR, 'OpsWorks.docs.json'),
4
- paginators: File.join(Aws::APIS_DIR, 'OpsWorks.paginators.json'),
5
- resources: File.join(Aws::APIS_DIR, 'OpsWorks.resources.json'),
2
+ api: File.join(Aws::API_DIR, 'OpsWorks.api.json'),
3
+ docs: File.join(Aws::API_DIR, 'OpsWorks.docs.json'),
4
+ paginators: File.join(Aws::API_DIR, 'OpsWorks.paginators.json'),
5
+ resources: File.join(Aws::API_DIR, 'OpsWorks.resources.json'),
6
6
  })
@@ -84,6 +84,24 @@ module Aws
84
84
  end
85
85
  alias each each_page
86
86
 
87
+ # @api private
88
+ def count
89
+ if respond_to?(:count)
90
+ data.count
91
+ else
92
+ raise NotImplementedError
93
+ end
94
+ end
95
+
96
+ # @api private
97
+ def respond_to?(method_name, *args)
98
+ if method_name == :count
99
+ data.respond_to?(:count)
100
+ else
101
+ super
102
+ end
103
+ end
104
+
87
105
  private
88
106
 
89
107
  # @param [Hash] params A hash of additional request params to
@@ -20,11 +20,7 @@ module Aws
20
20
  }
21
21
 
22
22
  option(:endpoint) do |cfg|
23
- EndpointProvider.default_provider.resolve(
24
- service: cfg.api.metadata('endpointPrefix'),
25
- region: cfg.region,
26
- scheme: 'https'
27
- )
23
+ EndpointProvider.resolve(cfg.region, cfg.api.metadata('endpointPrefix'))
28
24
  end
29
25
 
30
26
  def after_initialize(client)
@@ -40,14 +40,7 @@ module Aws
40
40
  # Intentionally not documented - this should go away when all
41
41
  # services support signature version 4 in every region.
42
42
  option(:signature_version) do |cfg|
43
- if
44
- cfg.api.metadata('endpointPrefix') == 's3' &&
45
- cfg.api.metadata('v3Regions').include?(cfg.region)
46
- then
47
- 's3'
48
- else
49
- cfg.api.metadata('signatureVersion')
50
- end
43
+ cfg.api.metadata('signatureVersion')
51
44
  end
52
45
 
53
46
  option(:sigv4_name) do |cfg|
@@ -82,7 +75,8 @@ module Aws
82
75
  private
83
76
 
84
77
  def sign_authenticated_requests(context)
85
- if signer = SIGNERS[context.config.signature_version]
78
+ version = context[:signature_version] || context.config.signature_version
79
+ if signer = SIGNERS[version]
86
80
  require_credentials(context)
87
81
  signer.sign(context)
88
82
  end