s3 0.3.1 → 0.3.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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- s3 (0.3.1)
4
+ s3 (0.3.2)
5
5
  proxies
6
6
  trollop
7
7
 
@@ -29,15 +29,16 @@ module Paperclip
29
29
  end
30
30
 
31
31
  base.instance_eval do
32
- @s3_credentials = parse_credentials(@options[:s3_credentials])
33
- @bucket_name = @options[:bucket] || @s3_credentials[:bucket]
34
- @bucket_name = @bucket_name.call(self) if @bucket_name.is_a?(Proc)
35
- @s3_options = @options[:s3_options] || {}
36
- @s3_permissions = @options[:s3_permissions] || :public_read
37
- @s3_protocol = @options[:s3_protocol] || (@s3_permissions == :public_read ? "http" : "https")
38
- @s3_headers = @options[:s3_headers] || {}
39
- @s3_host_alias = @options[:s3_host_alias]
40
- @url = ":s3_path_url" unless @url.to_s.match(/^:s3.*url$/)
32
+ @s3_credentials = parse_credentials(@options[:s3_credentials])
33
+ @bucket_name = @options[:bucket] || @s3_credentials[:bucket]
34
+ @bucket_name = @bucket_name.call(self) if @bucket_name.is_a?(Proc)
35
+ @s3_options = @options[:s3_options] || {}
36
+ @s3_permissions = @options[:s3_permissions] || :public_read
37
+ @s3_storage_class = @options[:s3_storage_class] || :standard
38
+ @s3_protocol = @options[:s3_protocol] || (@s3_permissions == :public_read ? "http" : "https")
39
+ @s3_headers = @options[:s3_headers] || {}
40
+ @s3_host_alias = @options[:s3_host_alias]
41
+ @url = ":s3_path_url" unless @url.to_s.match(/^:s3.*url$/)
41
42
  @service = ::S3::Service.new(@s3_options.merge(
42
43
  :access_key_id => @s3_credentials[:access_key_id],
43
44
  :secret_access_key => @s3_credentials[:secret_access_key],
@@ -112,6 +113,7 @@ module Paperclip
112
113
  object = bucket.objects.build(path(style))
113
114
  object.content = file.read
114
115
  object.acl = @s3_permissions
116
+ object.storage_class = @s3_storage_class
115
117
  object.content_type = instance_read(:content_type)
116
118
  object.content_disposition = @s3_headers[:content_disposition]
117
119
  object.content_encoding = @s3_headers[:content_encoding]
data/lib/s3/connection.rb CHANGED
@@ -114,7 +114,7 @@ module S3
114
114
  # Hash of headers translated from symbol to string, containing
115
115
  # only interesting headers
116
116
  def self.parse_headers(headers)
117
- interesting_keys = [:content_type, :x_amz_acl, :range,
117
+ interesting_keys = [:content_type, :x_amz_acl, :x_amz_storage_class, :range,
118
118
  :if_modified_since, :if_unmodified_since,
119
119
  :if_match, :if_none_match,
120
120
  :content_disposition, :content_encoding,
@@ -161,7 +161,7 @@ module S3
161
161
  end
162
162
 
163
163
  def proxy_settings
164
- @proxy.values_at(:host, :port, :user, :password) unless @proxy.blank?
164
+ @proxy.values_at(:host, :port, :user, :password) unless @proxy.nil? || @proxy.empty?
165
165
  end
166
166
 
167
167
  def http(host)
data/lib/s3/object.rb CHANGED
@@ -6,7 +6,7 @@ module S3
6
6
  extend Forwardable
7
7
 
8
8
  attr_accessor :content_type, :content_disposition, :content_encoding
9
- attr_reader :last_modified, :etag, :size, :bucket, :key, :acl
9
+ attr_reader :last_modified, :etag, :size, :bucket, :key, :acl, :storage_class
10
10
  attr_writer :content
11
11
 
12
12
  def_instance_delegators :bucket, :name, :service, :bucket_request, :vhost?, :host, :path_prefix
@@ -40,6 +40,16 @@ module S3
40
40
  def acl=(acl)
41
41
  @acl = acl.to_s.gsub("_", "-") if acl
42
42
  end
43
+
44
+ # Assigns a new storage class (RRS) to the object. Please note
45
+ # that the storage class is not retrieved from the server and set
46
+ # to "STANDARD" by default.
47
+ #
48
+ # ==== Example
49
+ # object.storage_class = :reduced_redundancy
50
+ def storage_class=(storage_class)
51
+ @storage_class = storage_class.to_s.upcase if storage_class
52
+ end
43
53
 
44
54
  # Retrieves the object from the server. Method is used to download
45
55
  # object information only (content type, size and so on). It does
@@ -215,6 +225,7 @@ module S3
215
225
  def dump_headers
216
226
  headers = {}
217
227
  headers[:x_amz_acl] = @acl || "public-read"
228
+ headers[:x_amz_storage_class] = @storage_class || "STANDARD"
218
229
  headers[:content_type] = @content_type || "application/octet-stream"
219
230
  headers[:content_encoding] = @content_encoding if @content_encoding
220
231
  headers[:content_disposition] = @content_disposition if @content_disposition
data/lib/s3/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module S3
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -115,6 +115,7 @@ class ConnectionTest < Test::Unit::TestCase
115
115
  expected = {
116
116
  "content-type" => nil,
117
117
  "x-amz-acl" => nil,
118
+ "x-amz-storage-class" => nil,
118
119
  "if-modified-since" => nil,
119
120
  "if-unmodified-since" => nil,
120
121
  "if-match" => nil,
@@ -125,6 +126,7 @@ class ConnectionTest < Test::Unit::TestCase
125
126
  actual = S3::Connection.parse_headers(
126
127
  :content_type => nil,
127
128
  :x_amz_acl => nil,
129
+ :x_amz_storage_class => nil,
128
130
  :if_modified_since => nil,
129
131
  :if_unmodified_since => nil,
130
132
  :if_match => nil,
@@ -139,6 +141,7 @@ class ConnectionTest < Test::Unit::TestCase
139
141
  expected = {
140
142
  "content-type" => "text/html",
141
143
  "x-amz-acl" => "public-read",
144
+ "x-amz-storage-class" => "STANDARD",
142
145
  "if-modified-since" => "today",
143
146
  "if-unmodified-since" => "tomorrow",
144
147
  "if-match" => "1234",
@@ -149,6 +152,7 @@ class ConnectionTest < Test::Unit::TestCase
149
152
  actual = S3::Connection.parse_headers(
150
153
  :content_type => "text/html",
151
154
  :x_amz_acl => "public-read",
155
+ :x_amz_storage_class => "STANDARD",
152
156
  :if_modified_since => "today",
153
157
  :if_unmodified_since => "tomorrow",
154
158
  :if_match => "1234",
data/test/object_test.rb CHANGED
@@ -101,7 +101,7 @@ class ObjectTest < Test::Unit::TestCase
101
101
  end
102
102
 
103
103
  test "save" do
104
- @object_lena.expects(:object_request).with(:put, :body=>"test", :headers=>{ :x_amz_acl=>"public-read", :content_type=>"application/octet-stream" }).returns(@response_binary)
104
+ @object_lena.expects(:object_request).with(:put, :body=>"test", :headers=>{ :x_amz_acl=>"public-read", :x_amz_storage_class=>"STANDARD", :content_type=>"application/octet-stream" }).returns(@response_binary)
105
105
  assert @object_lena.save
106
106
  end
107
107
 
@@ -149,6 +149,24 @@ class ObjectTest < Test::Unit::TestCase
149
149
  actual = @object_lena.acl
150
150
  assert_equal expected, actual
151
151
  end
152
+
153
+ test "storage-class writer" do
154
+ expected = nil
155
+ actual = @object_lena.storage_class
156
+ assert_equal expected, actual
157
+
158
+ assert @object_lena.storage_class = :standard
159
+
160
+ expected = "STANDARD"
161
+ actual = @object_lena.storage_class
162
+ assert_equal expected, actual
163
+
164
+ assert @object_lena.storage_class = :reduced_redundancy
165
+
166
+ expected = "REDUCED_REDUNDANCY"
167
+ actual = @object_lena.storage_class
168
+ assert_equal expected, actual
169
+ end
152
170
 
153
171
  test "copy" do
154
172
  @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)
data/test/test_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
- require "bundler"
1
+ require "rubygems"
2
+ require "bundler/setup"
2
3
 
3
- Bundler.setup
4
4
  Bundler.require
5
-
6
5
  require "test/unit"
7
6
  require "mocha"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 1
9
- version: 0.3.1
8
+ - 2
9
+ version: 0.3.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Jakub Ku\xC5\xBAma"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-04 00:00:00 +02:00
17
+ date: 2010-09-06 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency