aws-sdk 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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