s3 0.3.8 → 0.3.9

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.
@@ -5,6 +5,7 @@
5
5
  #
6
6
  # has_attached_file :image,
7
7
  # :s3_host_alias => "bucket.domain.tld",
8
+ # :s3_headers => { :cache_control => 10.years.from_now.httpdate },
8
9
  # :url => ":s3_alias_url",
9
10
  # :styles => {
10
11
  # :medium => "300x300>",
@@ -47,13 +48,13 @@ module Paperclip
47
48
  @bucket = @service.buckets.build(@bucket_name)
48
49
  end
49
50
  Paperclip.interpolates(:s3_alias_url) do |attachment, style|
50
- "#{attachment.s3_protocol}://#{attachment.s3_host_alias}/#{attachment.path(style).gsub(%r{^/}, "")}"
51
+ "#{attachment.s3_protocol}://#{attachment.s3_host_alias}/#{Paperclip::Storage::S3.encode_path(attachment.path(style)).gsub(%r{^/}, "")}"
51
52
  end
52
53
  Paperclip.interpolates(:s3_path_url) do |attachment, style|
53
- "#{attachment.s3_protocol}://s3.amazonaws.com/#{attachment.bucket_name}/#{attachment.path(style).gsub(%r{^/}, "")}"
54
+ "#{attachment.s3_protocol}://s3.amazonaws.com/#{attachment.bucket_name}/#{Paperclip::Storage::S3.encode_path(attachment.path(style)).gsub(%r{^/}, "")}"
54
55
  end
55
56
  Paperclip.interpolates(:s3_domain_url) do |attachment, style|
56
- "#{attachment.s3_protocol}://#{attachment.bucket_name}.s3.amazonaws.com/#{attachment.path(style).gsub(%r{^/}, "")}"
57
+ "#{attachment.s3_protocol}://#{attachment.bucket_name}.s3.amazonaws.com/#{Paperclip::Storage::S3.encode_path(attachment.path(style)).gsub(%r{^/}, "")}"
57
58
  end
58
59
  end
59
60
 
@@ -73,6 +74,11 @@ module Paperclip
73
74
  @s3_host_alias
74
75
  end
75
76
 
77
+ def content_disposition(style = default_style)
78
+ cd = @s3_headers[:content_disposition]
79
+ cd.respond_to?(:call) ? cd.call(self, style) : cd
80
+ end
81
+
76
82
  def parse_credentials creds
77
83
  creds = find_credentials(creds).stringify_keys
78
84
  (creds[RAILS_ENV] || creds).symbolize_keys
@@ -109,6 +115,15 @@ module Paperclip
109
115
  file
110
116
  end
111
117
 
118
+ # Encodes all characters except forward-slash (/) and explicitly legal URL characters
119
+ def self.encode_path(path)
120
+ URI.encode(path, /[^#{URI::REGEXP::PATTERN::UNRESERVED}\/]/)
121
+ end
122
+
123
+ def encoded_path(style)
124
+ Paperclip::Storage::S3.encode_path(path(style))
125
+ end
126
+
112
127
  def flush_writes #:nodoc:
113
128
  @queued_for_write.each do |style, file|
114
129
  begin
@@ -119,7 +134,8 @@ module Paperclip
119
134
  object.acl = @s3_permissions
120
135
  object.storage_class = @s3_storage_class
121
136
  object.content_type = instance_read(:content_type)
122
- object.content_disposition = @s3_headers[:content_disposition]
137
+ object.cache_control = @s3_headers[:cache_control]
138
+ object.content_disposition = content_disposition(style)
123
139
  object.content_encoding = @s3_headers[:content_encoding]
124
140
  object.save
125
141
  rescue ::S3::Error::ResponseError => e
@@ -61,12 +61,15 @@ module S3
61
61
  params = options.fetch(:params, {})
62
62
  headers = options.fetch(:headers, {})
63
63
 
64
+ # Must be done before adding params
65
+ # Encodes all characters except forward-slash (/) and explicitly legal URL characters
66
+ path = URI.escape(path, /[^#{URI::REGEXP::PATTERN::UNRESERVED}\/]/)
67
+
64
68
  if params
65
69
  params = params.is_a?(String) ? params : self.class.parse_params(params)
66
70
  path << "?#{params}"
67
71
  end
68
72
 
69
- path = URI.escape(path)
70
73
  request = Request.new(@chunk_size, method.to_s.upcase, !!body, method.to_s.upcase != "HEAD", path)
71
74
 
72
75
  headers = self.class.parse_headers(headers)
@@ -3,7 +3,7 @@ module S3
3
3
  include REXML
4
4
 
5
5
  def rexml_document(xml)
6
- xml.force_encoding(Encoding::UTF_8) if xml.respond_to? :force_encoding
6
+ xml.force_encoding(::Encoding::UTF_8) if xml.respond_to? :force_encoding
7
7
  Document.new(xml)
8
8
  end
9
9
 
@@ -44,7 +44,7 @@ module S3
44
44
  message = document.elements["Error/Message"].text
45
45
  [code, message]
46
46
  end
47
-
47
+
48
48
  def parse_is_truncated xml
49
49
  rexml_document(xml).elements["ListBucketResult/IsTruncated"].text =='true'
50
50
  end
@@ -1,3 +1,3 @@
1
1
  module S3
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
metadata CHANGED
@@ -1,72 +1,68 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: s3
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.9
4
5
  prerelease:
5
- version: 0.3.8
6
6
  platform: ruby
7
- authors:
8
- - "Jakub Ku\xC5\xBAma"
7
+ authors:
8
+ - Jakub Kuźma
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-03-17 00:00:00 +01:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-05 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: proxies
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &11258640 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.2.0
24
22
  type: :runtime
25
23
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *11258640
25
+ - !ruby/object:Gem::Dependency
28
26
  name: test-unit
29
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &11258020 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "2.0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
35
33
  type: :development
36
34
  prerelease: false
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *11258020
36
+ - !ruby/object:Gem::Dependency
39
37
  name: mocha
40
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &11257380 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
46
44
  type: :development
47
45
  prerelease: false
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *11257380
47
+ - !ruby/object:Gem::Dependency
50
48
  name: bundler
51
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &11256840 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
56
54
  version: 1.0.0
57
55
  type: :development
58
56
  prerelease: false
59
- version_requirements: *id004
60
- description: "S3 library provides access to Amazon's Simple Storage Service. It supports both: European and US buckets through REST API."
61
- email:
57
+ version_requirements: *11256840
58
+ description: ! 'S3 library provides access to Amazon''s Simple Storage Service. It
59
+ supports both: European and US buckets through REST API.'
60
+ email:
62
61
  - qoobaa@gmail.com
63
62
  executables: []
64
-
65
63
  extensions: []
66
-
67
64
  extra_rdoc_files: []
68
-
69
- files:
65
+ files:
70
66
  - .gitignore
71
67
  - Gemfile
72
68
  - Gemfile.lock
@@ -94,36 +90,28 @@ files:
94
90
  - test/service_test.rb
95
91
  - test/signature_test.rb
96
92
  - test/test_helper.rb
97
- has_rdoc: true
98
93
  homepage: http://jah.pl/projects/s3.html
99
94
  licenses: []
100
-
101
95
  post_install_message:
102
96
  rdoc_options: []
103
-
104
- require_paths:
97
+ require_paths:
105
98
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
99
+ required_ruby_version: !ruby/object:Gem::Requirement
107
100
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 1379753891873581983
112
- segments:
113
- - 0
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
106
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
120
110
  version: 1.3.6
121
111
  requirements: []
122
-
123
112
  rubyforge_project: s3
124
- rubygems_version: 1.6.2
113
+ rubygems_version: 1.8.10
125
114
  signing_key:
126
115
  specification_version: 3
127
116
  summary: Library for accessing S3 objects and buckets
128
117
  test_files: []
129
-