s3 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- s3 (0.3.7)
5
- proxies
4
+ s3 (0.3.8)
5
+ proxies (~> 0.2.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
@@ -19,6 +19,5 @@ PLATFORMS
19
19
  DEPENDENCIES
20
20
  bundler (>= 1.0.0)
21
21
  mocha
22
- proxies
23
22
  s3!
24
23
  test-unit (>= 2.0)
data/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # S3
2
+
3
+ S3 library provides access to [Amazon's Simple Storage Service](http://aws.amazon.com/s3/).
4
+
5
+ It supports both: European and US buckets through the [REST API](http://docs.amazonwebservices.com/AmazonS3/latest/API/APIRest.html).
6
+
7
+ <a href="http://pledgie.com/campaigns/14173"><img alt="Click here to lend your support to: S3 and make a donation at www.pledgie.com!" src="http://pledgie.com/campaigns/14173.png?skin_name=chrome" border="0" /></a>
8
+
9
+ ## Installation
10
+
11
+ gem install s3
12
+
13
+ ## Usage
14
+
15
+ ### Initialize the service
16
+
17
+ require "s3"
18
+ service = S3::Service.new(:access_key_id => "...",
19
+ :secret_access_key => "...")
20
+ #=> #<S3::Service:...>
21
+
22
+ ### List buckets
23
+
24
+ service.buckets
25
+ #=> [#<S3::Bucket:first-bucket>,
26
+ # #<S3::Bucket:second-bucket>]
27
+
28
+ ### Find bucket
29
+
30
+ first_bucket = service.buckets.find("first-bucket")
31
+ #=> #<S3::Bucket:first-bucket>
32
+
33
+ ### List objects in a bucket
34
+
35
+ first_bucket.objects
36
+ #=> [#<S3::Object:/first-bucket/lenna.png>,
37
+ # #<S3::Object:/first-bucket/lenna_mini.png>]
38
+
39
+ ### Find object in a bucket
40
+
41
+ object = first_bucket.objects.find("lenna.png")
42
+ #=> #<S3::Object:/first-bucket/lenna.png>
43
+
44
+ ### Access object metadata (cached from find)
45
+
46
+ object.content_type
47
+ #=> "image/png"
48
+
49
+ ### Access object content (downloads the object)
50
+
51
+ object.content
52
+ #=> "\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00..."
53
+
54
+ ### Delete an object
55
+
56
+ object.destroy
57
+ #=> true
58
+
59
+ ### Create an object
60
+
61
+ new_object = bucket.objects.build("bender.png")
62
+ #=> #<S3::Object:/synergy-staging/bender.png>
63
+
64
+ new_object.content = open("bender.png")
65
+
66
+ new_object.save
67
+ #=> true
68
+
69
+ ## See also
70
+
71
+ * [gemcutter](http://gemcutter.org/gems/s3)
72
+ * [repository](http://github.com/qoobaa/s3)
73
+ * [issue tracker](http://github.com/qoobaa/s3/issues)
74
+ * [documentation](http://qoobaa.github.com/s3)
75
+
76
+ ## Copyright
77
+
78
+ Copyright (c) 2009 Jakub Kuźma, Mirosław Boruta. See [LICENSE](http://github.com/qoobaa/s3/raw/master/LICENSE) for details.
@@ -95,7 +95,10 @@ module Paperclip
95
95
  def to_file style = default_style
96
96
  return @queued_for_write[style] if @queued_for_write[style]
97
97
  begin
98
- file = Tempfile.new(path(style))
98
+ filename = path(style)
99
+ extname = File.extname(filename)
100
+ basename = File.basename(filename, extname)
101
+ file = Tempfile.new([basename, extname])
99
102
  file.binmode if file.respond_to?(:binmode)
100
103
  file.write(bucket.objects.find(path(style)).content)
101
104
  file.rewind
data/lib/s3/bucket.rb CHANGED
@@ -94,6 +94,13 @@ module S3
94
94
  Proxy.new(lambda { list_bucket }, :owner => self, :extend => ObjectsExtension)
95
95
  end
96
96
 
97
+ # Returns the object with the given key. Does not check whether the
98
+ # object exists. But also does not issue any HTTP requests, so it's
99
+ # much faster than objects.find
100
+ def object(key)
101
+ Object.send(:new, self, :key => key)
102
+ end
103
+
97
104
  def inspect #:nodoc:
98
105
  "#<#{self.class}:#{name}>"
99
106
  end
data/lib/s3/object.rb CHANGED
@@ -150,7 +150,7 @@ module S3
150
150
  headers[:content_disposition] = options[:content_disposition] if options[:content_disposition]
151
151
  headers[:cache_control] = options[:cache_control] if options[:cache_control]
152
152
  headers[:x_amz_copy_source] = full_key
153
- headers[:x_amz_metadata_directive] = "REPLACE"
153
+ headers[:x_amz_metadata_directive] = options[:replace] == false ? "COPY" : "REPLACE"
154
154
  headers[:x_amz_copy_source_if_match] = options[:if_match] if options[:if_match]
155
155
  headers[:x_amz_copy_source_if_none_match] = options[:if_none_match] if options[:if_none_match]
156
156
  headers[:x_amz_copy_source_if_unmodified_since] = options[:if_modified_since] if options[:if_modified_since]
data/lib/s3/service.rb CHANGED
@@ -39,6 +39,13 @@ module S3
39
39
  Proxy.new(lambda { list_all_my_buckets }, :owner => self, :extend => BucketsExtension)
40
40
  end
41
41
 
42
+ # Returns the bucket with the given name. Does not check whether the
43
+ # bucket exists. But also does not issue any HTTP requests, so it's
44
+ # much faster than buckets.find
45
+ def bucket(name)
46
+ Bucket.send(:new, self, name)
47
+ end
48
+
42
49
  # Returns "http://" or "https://", depends on <tt>:use_ssl</tt>
43
50
  # value from initializer
44
51
  def protocol
data/lib/s3/signature.rb CHANGED
@@ -220,7 +220,23 @@ module S3
220
220
  # 4. If the request addresses a sub-resource, like ?location,
221
221
  # ?acl, or ?torrent, append the sub-resource including question
222
222
  # mark.
223
- string << "?#{$1}" if uri.query =~ /&?(acl|torrent|logging|location)(?:&|=|\Z)/
223
+ sub_resources = [
224
+ 'acl',
225
+ 'location',
226
+ 'logging',
227
+ 'notification',
228
+ 'partNumber',
229
+ 'policy',
230
+ 'requestPayment',
231
+ 'torrent',
232
+ 'uploadId',
233
+ 'uploads',
234
+ 'versionId',
235
+ 'versioning',
236
+ 'versions',
237
+ 'website'
238
+ ]
239
+ string << "?#{$1}" if uri.query =~ /&?(#{sub_resources.join('|')})(?:&|=|\Z)/
224
240
  string
225
241
  end
226
242
  end
data/lib/s3/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module S3
2
- VERSION = "0.3.7"
2
+ VERSION = "0.3.8"
3
3
  end
data/s3.gemspec CHANGED
@@ -1,6 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- require File.expand_path("../lib/s3/version", __FILE__)
3
+ # Load version requiring the canonical "s3/version", otherwise Ruby will think
4
+ # is a different file and complaint about a double declaration of S3::VERSION.
5
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
6
+ require "s3/version"
4
7
 
5
8
  Gem::Specification.new do |s|
6
9
  s.name = "s3"
@@ -15,7 +18,7 @@ Gem::Specification.new do |s|
15
18
  s.required_rubygems_version = ">= 1.3.6"
16
19
  s.rubyforge_project = "s3"
17
20
 
18
- s.add_dependency "proxies"
21
+ s.add_dependency "proxies", "~> 0.2.0"
19
22
  s.add_development_dependency "test-unit", ">= 2.0"
20
23
  s.add_development_dependency "mocha"
21
24
  s.add_development_dependency "bundler", ">= 1.0.0"
data/test/object_test.rb CHANGED
@@ -157,18 +157,18 @@ class ObjectTest < Test::Unit::TestCase
157
157
  actual = @object_lena.acl
158
158
  assert_equal expected, actual
159
159
  end
160
-
160
+
161
161
  test "storage-class writer" do
162
162
  expected = nil
163
163
  actual = @object_lena.storage_class
164
164
  assert_equal expected, actual
165
-
165
+
166
166
  assert @object_lena.storage_class = :standard
167
-
167
+
168
168
  expected = "STANDARD"
169
169
  actual = @object_lena.storage_class
170
170
  assert_equal expected, actual
171
-
171
+
172
172
  assert @object_lena.storage_class = :reduced_redundancy
173
173
 
174
174
  expected = "REDUCED_REDUNDANCY"
@@ -176,7 +176,7 @@ class ObjectTest < Test::Unit::TestCase
176
176
  assert_equal expected, actual
177
177
  end
178
178
 
179
- test "copy" do
179
+ test "replace" do
180
180
  @bucket_images.expects(:bucket_request).with(:put, :path => "Lena-copy.png", :headers => { :x_amz_acl => "public-read", :content_type => "application/octet-stream", :x_amz_copy_source => "images/Lena.png", :x_amz_metadata_directive => "REPLACE" }).returns(@response_xml)
181
181
 
182
182
  new_object = @object_lena.copy(:key => "Lena-copy.png")
@@ -184,4 +184,13 @@ class ObjectTest < Test::Unit::TestCase
184
184
  assert_equal "Lena-copy.png", new_object.key
185
185
  assert_equal "Lena.png", @object_lena.key
186
186
  end
187
+
188
+ test "copy" do
189
+ @bucket_images.expects(:bucket_request).with(:put, :path => "Lena-copy.png", :headers => { :x_amz_acl => "public-read", :content_type => "application/octet-stream", :x_amz_copy_source => "images/Lena.png", :x_amz_metadata_directive => "COPY" }).returns(@response_xml)
190
+
191
+ new_object = @object_lena.copy(:key => "Lena-copy.png", :replace => false)
192
+
193
+ assert_equal "Lena-copy.png", new_object.key
194
+ assert_equal "Lena.png", @object_lena.key
195
+ end
187
196
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 7
9
- version: 0.3.7
4
+ prerelease:
5
+ version: 0.3.8
10
6
  platform: ruby
11
7
  authors:
12
8
  - "Jakub Ku\xC5\xBAma"
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-10-09 00:00:00 +02:00
13
+ date: 2011-03-17 00:00:00 +01:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -22,11 +18,9 @@ dependencies:
22
18
  requirement: &id001 !ruby/object:Gem::Requirement
23
19
  none: false
24
20
  requirements:
25
- - - ">="
21
+ - - ~>
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
23
+ version: 0.2.0
30
24
  type: :runtime
31
25
  prerelease: false
32
26
  version_requirements: *id001
@@ -37,9 +31,6 @@ dependencies:
37
31
  requirements:
38
32
  - - ">="
39
33
  - !ruby/object:Gem::Version
40
- segments:
41
- - 2
42
- - 0
43
34
  version: "2.0"
44
35
  type: :development
45
36
  prerelease: false
@@ -51,8 +42,6 @@ dependencies:
51
42
  requirements:
52
43
  - - ">="
53
44
  - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
45
  version: "0"
57
46
  type: :development
58
47
  prerelease: false
@@ -64,10 +53,6 @@ dependencies:
64
53
  requirements:
65
54
  - - ">="
66
55
  - !ruby/object:Gem::Version
67
- segments:
68
- - 1
69
- - 0
70
- - 0
71
56
  version: 1.0.0
72
57
  type: :development
73
58
  prerelease: false
@@ -86,7 +71,7 @@ files:
86
71
  - Gemfile
87
72
  - Gemfile.lock
88
73
  - LICENSE
89
- - README.rdoc
74
+ - README.md
90
75
  - Rakefile
91
76
  - extra/s3_attachment_fu.rb
92
77
  - extra/s3_paperclip.rb
@@ -123,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
108
  requirements:
124
109
  - - ">="
125
110
  - !ruby/object:Gem::Version
126
- hash: 3296897330677873024
111
+ hash: 1379753891873581983
127
112
  segments:
128
113
  - 0
129
114
  version: "0"
@@ -132,15 +117,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
117
  requirements:
133
118
  - - ">="
134
119
  - !ruby/object:Gem::Version
135
- segments:
136
- - 1
137
- - 3
138
- - 6
139
120
  version: 1.3.6
140
121
  requirements: []
141
122
 
142
123
  rubyforge_project: s3
143
- rubygems_version: 1.3.7
124
+ rubygems_version: 1.6.2
144
125
  signing_key:
145
126
  specification_version: 3
146
127
  summary: Library for accessing S3 objects and buckets
data/README.rdoc DELETED
@@ -1,22 +0,0 @@
1
- = S3
2
-
3
- S3 library provides access to {Amazon's Simple Storage Service}[http://aws.amazon.com/s3/].
4
- It supports both: European and US buckets through {REST API}[http://docs.amazonwebservices.com/AmazonS3/latest/RESTAPI.html].
5
-
6
- * homepage[http://jah.pl/projects/s3.html]
7
- * gemcutter[http://gemcutter.org/gems/s3]
8
- * repository[http://github.com/qoobaa/s3]
9
- * {issue tracker}[http://github.com/qoobaa/s3/issues]
10
- * rdoc[http://qoobaa.github.com/s3]
11
-
12
- == Installation
13
-
14
- gem install s3
15
-
16
- == Usage
17
-
18
- See homepage[http://jah.pl/projects/s3.html] for details.
19
-
20
- == Copyright
21
-
22
- Copyright (c) 2009 Jakub Kuźma, Mirosław Boruta. See LICENSE[http://github.com/qoobaa/s3/raw/master/LICENSE] for details.