aws-sdk 1.0.1 → 1.0.2

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.
@@ -0,0 +1,55 @@
1
+ # Copyright 2011 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 'aws/simple_db'
15
+ require 'aws/record/scope'
16
+
17
+ module AWS
18
+ module Record
19
+
20
+ module Scopes
21
+
22
+ # Adds a scoped finder method to this class. Given a call
23
+ # to scope like:
24
+ #
25
+ # scope :top_10, order(:popularity, :desc).limit(10)
26
+ #
27
+ # Then you can call the method +top_10+ on the class and it will
28
+ # return an enumerable scope object with the given find conditions.
29
+ #
30
+ # @param [Symbol] name The name of the scope. Scope names should be
31
+ # method-safe and should not conflict with any other class methods.
32
+ #
33
+ def scope name, scope = nil, &block
34
+
35
+ raise ArgumentError, "only a scope or block may be passed, not both" if
36
+ scope and block_given?
37
+
38
+ method_definition = scope ?
39
+ lambda{ scope } :
40
+ block
41
+
42
+ extend(Module.new { define_method(name, &method_definition) })
43
+
44
+ end
45
+
46
+ # @return [Scope] Returns a new scope object for this class.
47
+ # @private
48
+ private
49
+ def _new_scope
50
+ Scope.new(self)
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -41,6 +41,19 @@ module AWS
41
41
 
42
42
  # Creates and returns a new Bucket. For example:
43
43
  #
44
+ # @note If your bucket name contains one or more periods and it
45
+ # is hosted in a non-US region, you should make requests
46
+ # against the bucket using the S3 endpoint specific to the
47
+ # region in which your bucket resides. For example:
48
+ #
49
+ # s3 = AWS::S3.new(:s3_endpoint => "s3-eu-west-1.amazonaws.com")
50
+ # bucket = s3.buckets.create("my.eu.bucket")
51
+ #
52
+ # For a full list of endpoints and regions, see
53
+ # {http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html
54
+ # Regions and Endpoints} in the Amazon Web Services General
55
+ # Reference.
56
+ #
44
57
  # @example
45
58
  #
46
59
  # bucket = s3.buckets.create('my-bucket')
@@ -827,6 +827,20 @@ module AWS
827
827
  validate_bucket_name!(bucket_name) rescue false
828
828
  end
829
829
 
830
+ # Returns true if the given +bucket_name+ is DNS compatible.
831
+ #
832
+ # DNS compatible bucket names may be accessed like:
833
+ #
834
+ # http://dns.compat.bucket.name.s3.amazonaws.com/
835
+ #
836
+ # Whereas non-dns compatible bucket names must place the bucket
837
+ # name in the url path, like:
838
+ #
839
+ # http://s3.amazonaws.com/dns_incompat_bucket_name/
840
+ #
841
+ # @return [Boolean] Returns true if the given bucket name may be
842
+ # is dns compatible.
843
+ # this bucket n
830
844
  def dns_compatible_bucket_name?(bucket_name)
831
845
  return false if
832
846
  !valid_bucket_name?(bucket_name) or
@@ -850,6 +864,27 @@ module AWS
850
864
  true
851
865
  end
852
866
 
867
+ # Returns true if the bucket name must be used in the request
868
+ # path instead of as a sub-domain when making requests against
869
+ # S3.
870
+ #
871
+ # This can be an issue if the bucket name is DNS compatible but
872
+ # contains '.' (periods). These cause the SSL certificate to
873
+ # become invalid when making authenticated requets over SSL to the
874
+ # bucket name. The solution is to send this as a path argument
875
+ # instead.
876
+ #
877
+ # @return [Boolean] Returns true if the bucket name should be used
878
+ # as a path segement instead of dns prefix when making requests
879
+ # against s3.
880
+ def path_style_bucket_name? bucket_name
881
+ if dns_compatible_bucket_name?(bucket_name)
882
+ bucket_name =~ /\./ ? true : false
883
+ else
884
+ true
885
+ end
886
+ end
887
+
853
888
  protected
854
889
  def validate! name, value, &block
855
890
  if error_msg = yield
@@ -32,7 +32,7 @@ module AWS
32
32
 
33
33
  # string, pathname, file, io-like object, etc
34
34
  data = options[:data]
35
- file_opts = ["r"]
35
+ file_opts = ["rb"]
36
36
  file_opts << { :encoding => "BINARY" } if Object.const_defined?(:Encoding)
37
37
  case
38
38
  when data.is_a?(String)
@@ -16,7 +16,7 @@ require 'aws/policy'
16
16
  module AWS
17
17
  class S3
18
18
 
19
- # @private
19
+ # @see AWS::Policy
20
20
  class Policy < AWS::Policy
21
21
 
22
22
  class Statement < AWS::Policy::Statement
@@ -53,16 +53,12 @@ module AWS
53
53
  end
54
54
 
55
55
  def host
56
- Client.dns_compatible_bucket_name?(bucket) ?
57
- "#{bucket}.#{@host}" :
58
- @host
56
+ Client.path_style_bucket_name?(bucket) ? @host : "#{bucket}.#{@host}"
59
57
  end
60
58
 
61
59
  def path
62
60
  parts = []
63
- unless bucket.nil? or Client.dns_compatible_bucket_name?(bucket)
64
- parts << bucket
65
- end
61
+ parts << bucket if bucket and Client.path_style_bucket_name?(bucket)
66
62
  parts << key if key
67
63
  "/#{parts.join('/')}"
68
64
  end
@@ -131,23 +127,25 @@ module AWS
131
127
 
132
128
  # virtual hosted-style requests require the hostname to appear
133
129
  # in the canonicalized resource prefixed by a forward slash.
134
- if Client.dns_compatible_bucket_name?(bucket)
130
+ if
131
+ Client.dns_compatible_bucket_name?(bucket) and
132
+ !Client.path_style_bucket_name?(bucket)
133
+ then
135
134
  parts << "/#{bucket}"
136
135
  end
137
-
136
+
138
137
  # all requests require the portion of the un-decoded uri up to
139
138
  # but not including the query string
140
139
  parts << path
141
140
 
142
141
  # lastly any sub resource querystring params need to be appened
143
142
  # in lexigraphical ordered joined by '&' and prefixed by '?'
144
- params = (sub_resource_params +
145
- query_parameters_for_signature)
143
+ params = (sub_resource_params + query_parameters_for_signature)
146
144
  unless params.empty?
147
145
  parts << '?'
148
146
  parts << params.sort.collect{|p| p.to_s }.join('&')
149
147
  end
150
-
148
+
151
149
  parts.join
152
150
  end
153
151
 
@@ -85,7 +85,7 @@ module AWS
85
85
  # @param [Hash] options
86
86
  # @option options [String] :version_id Which version of this object
87
87
  # to make a HEAD request against.
88
- # @return [Response] A head object response with metatadata,
88
+ # @return A head object response with metatadata,
89
89
  # content_length, content_type and etag.
90
90
  def head options = {}
91
91
  client.head_object(options.merge(
@@ -122,11 +122,12 @@ module AWS
122
122
  # @option [String] :version_id (nil) If present the specified version
123
123
  # of this object will be deleted. Only works for buckets that have
124
124
  # had versioning enabled.
125
- # @return [Response]
125
+ # @return [nil]
126
126
  def delete options = {}
127
127
  options[:bucket_name] = bucket.name
128
128
  options[:key] = key
129
129
  client.delete_object(options)
130
+ nil
130
131
  end
131
132
 
132
133
  # @option [String] :version_id (nil) If present the metadata object
@@ -552,13 +553,13 @@ module AWS
552
553
  # AccessControlList#initialize.
553
554
  #
554
555
  # @param (see Bucket#acl=)
555
- # @return [Response]
556
- #
556
+ # @return [nil]
557
557
  def acl=(acl)
558
558
  client.set_object_acl(
559
559
  :bucket_name => bucket.name,
560
560
  :key => key,
561
561
  :acl => acl)
562
+ nil
562
563
  end
563
564
 
564
565
  # @private
@@ -28,7 +28,7 @@ module AWS
28
28
  #
29
29
  # For more information about Amazon SNS:
30
30
  #
31
- # * {Amazon SNS}[http://aws.amazon.com/simpledb/]
31
+ # * {Amazon SNS}[http://aws.amazon.com/sns/]
32
32
  # * {Amazon SNS Documentation}[http://aws.amazon.com/documentation/sns/]
33
33
  #
34
34
  # = Credentials
@@ -46,9 +46,6 @@ module AWS
46
46
  # :access_key_id => 'YOUR_ACCESS_KEY_ID',
47
47
  # :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
48
48
  #
49
- # = Understanding the SNS Interface
50
- #
51
- # ...
52
49
  class SNS
53
50
 
54
51
  include ServiceInterface
@@ -16,7 +16,7 @@ require 'aws/policy'
16
16
  module AWS
17
17
  class SNS
18
18
 
19
- # @private
19
+ # @see AWS::Policy
20
20
  class Policy < AWS::Policy
21
21
 
22
22
  class Statement < AWS::Policy::Statement
@@ -16,7 +16,7 @@ require 'aws/policy'
16
16
  module AWS
17
17
  class SQS
18
18
 
19
- # @private
19
+ # @see AWS::Policy
20
20
  class Policy < AWS::Policy
21
21
 
22
22
  class Statement < AWS::Policy::Statement
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-15 00:00:00.000000000 -07:00
12
+ date: 2011-07-21 00:00:00.000000000 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: uuidtools
17
- requirement: &2158760920 !ruby/object:Gem::Requirement
17
+ requirement: &2155405840 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '2.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2158760920
25
+ version_requirements: *2155405840
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: httparty
28
- requirement: &2158760460 !ruby/object:Gem::Requirement
28
+ requirement: &2155405080 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2158760460
36
+ version_requirements: *2155405080
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: nokogiri
39
- requirement: &2158759980 !ruby/object:Gem::Requirement
39
+ requirement: &2155394520 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.4.4
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2158759980
47
+ version_requirements: *2155394520
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
50
- requirement: &2158759520 !ruby/object:Gem::Requirement
50
+ requirement: &2155393900 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '1.4'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2158759520
58
+ version_requirements: *2155393900
59
59
  description: AWS SDK for Ruby
60
60
  email:
61
61
  executables: []
@@ -123,7 +123,6 @@ files:
123
123
  - lib/aws/ec2/volume_collection.rb
124
124
  - lib/aws/ec2.rb
125
125
  - lib/aws/errors.rb
126
- - lib/aws/http/builtin_handler.rb
127
126
  - lib/aws/http/curb_handler.rb
128
127
  - lib/aws/http/handler.rb
129
128
  - lib/aws/http/httparty_handler.rb
@@ -156,7 +155,9 @@ files:
156
155
  - lib/aws/record/exceptions.rb
157
156
  - lib/aws/record/finder_methods.rb
158
157
  - lib/aws/record/naming.rb
158
+ - lib/aws/record/optimistic_locking.rb
159
159
  - lib/aws/record/scope.rb
160
+ - lib/aws/record/scopes.rb
160
161
  - lib/aws/record/validations.rb
161
162
  - lib/aws/record/validator.rb
162
163
  - lib/aws/record/validators/acceptance.rb
@@ -283,7 +284,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
283
284
  version: '0'
284
285
  segments:
285
286
  - 0
286
- hash: -3178253575301581896
287
+ hash: 437793363847079671
287
288
  required_rubygems_version: !ruby/object:Gem::Requirement
288
289
  none: false
289
290
  requirements:
@@ -1,69 +0,0 @@
1
- # Copyright 2011 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 'net/http'
15
- require 'net/https'
16
-
17
- module AWS
18
- module Http
19
-
20
- # @private
21
- class BuiltinHandler
22
-
23
- def handle(request, response)
24
-
25
- http = Net::HTTP.new(request.host, request.use_ssl? ? 443 : 80)
26
-
27
- # http://www.ruby-lang.org/en/news/2007/10/04/net-https-vulnerability/
28
- if request.use_ssl?
29
- http.use_ssl = true
30
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
31
- store = OpenSSL::X509::Store.new
32
- store.set_default_paths
33
- http.cert_store = store
34
- end
35
-
36
- http.start do
37
-
38
- # Net::HTTP adds this header for us when the body is
39
- # provided, but it messes up signing
40
- headers = { 'content-type' => '' }
41
-
42
- # Net::HTTP calls strip on each header value, this causes errors
43
- # when the values are numbers (like Content-Length)
44
- request.headers.each_pair do |key,value|
45
- headers[key] = value.to_s
46
- end
47
-
48
- http_request_class = case request.http_method
49
- when 'HEAD' then Net::HTTP::Head
50
- when 'GET' then Net::HTTP::Get
51
- when 'PUT' then Net::HTTP::Put
52
- when 'POST' then Net::HTTP::Post
53
- when 'DELETE' then Net::HTTP::Delete
54
- else raise "unsupported http request method: #{request.http_method}"
55
- end
56
-
57
- http_request = http_request_class.new(request.uri, headers)
58
- http.request(http_request, request.body) do |http_response|
59
- response.body = http_response.body
60
- response.status = http_response.code.to_i
61
- response.headers = http_response.to_hash
62
- end
63
-
64
- end
65
- end
66
-
67
- end
68
- end
69
- end