Module: Imagery::S3
- Defined in:
- lib/imagery/s3.rb
Defined Under Namespace
Instance Attribute Summary collapse
-
#keys ⇒ Object
readonly
Convenience attribute which returns all size keys including ‘:original`.
Class Method Summary collapse
Instance Method Summary collapse
-
#delete ⇒ Object
Deletes all keys defined for this object, which includes ‘:original` and all keys in `sizes`.
- #initialize(*args) ⇒ Object
-
#s3_key(file) ⇒ Object
Returns the complete S3 id used for this object.
-
#save(io, id = nil) ⇒ Object
Save the object as we normall would, but also upload all resulting files to S3.
-
#url(file = @original) ⇒ Object
If you specify a distribution domain (i.e. a cloudfront domain, or even an S3 domain with a prefix), that distribution domain is used.
Instance Attribute Details
#keys ⇒ Object (readonly)
Convenience attribute which returns all size keys including ‘:original`.
32 33 34 |
# File 'lib/imagery/s3.rb', line 32 def keys @keys end |
Class Method Details
.included(imagery) ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/imagery/s3.rb', line 5 def self.included(imagery) imagery.extend Config # Set the default host for amazon S3. You can also set this # to https://s3.amazon.com if you want to force secure connections # on a global scale. imagery.s3_host "http://s3.amazonaws.com" end |
Instance Method Details
#delete ⇒ Object
Deletes all keys defined for this object, which includes ‘:original` and all keys in `sizes`.
66 67 68 69 70 71 72 |
# File 'lib/imagery/s3.rb', line 66 def delete super keys.each do |file| Gateway.delete(s3_key(file), self.class.s3_bucket) end end |
#initialize(*args) ⇒ Object
34 35 36 37 38 |
# File 'lib/imagery/s3.rb', line 34 def initialize(*args) super @keys = [@original] + sizes.keys end |
#s3_key(file) ⇒ Object
Returns the complete S3 id used for this object. The S3 id is simply composed of the prefix and filename, e.g.
-
photos/1001/original.jpg
-
photos/1001/small.jpg
-
photos/1001/tiny.jpg
60 61 62 |
# File 'lib/imagery/s3.rb', line 60 def s3_key(file) "#{prefix}/#{id}/#{ext(file)}" end |
#save(io, id = nil) ⇒ Object
Save the object as we normall would, but also upload all resulting files to S3. We set the proper content type and Cache-Control setting optimized for a cloudfront setup.
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/imagery/s3.rb', line 77 def save(io, id = nil) super keys.each do |file| Gateway.store(s3_key(file), File.open(root(ext(file))), self.class.s3_bucket, :access => :public_read, :content_type => "image/jpeg", "Cache-Control" => "max-age=315360000" ) end end |
#url(file = @original) ⇒ Object
If you specify a distribution domain (i.e. a cloudfront domain, or even an S3 domain with a prefix), that distribution domain is used.
Otherwise the default canonical S3 url is used.
45 46 47 48 49 50 51 |
# File 'lib/imagery/s3.rb', line 45 def url(file = @original) if self.class.s3_distribution_domain "#{self.class.s3_distribution_domain}#{super}" else "#{self.class.s3_host}/#{self.class.s3_bucket}#{super}" end end |