class DigitalOpera::Services::S3
Public Class Methods
access_key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 139 def self.access_key ENV["S3_ACCESS_KEY"] end
bucket_name()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 135 def self.bucket_name ENV["S3_BUCKET_NAME"] end
new(document, options={})
click to toggle source
# File lib/digital_opera/services/s3.rb, line 7 def initialize(document, options={}) throw 'AWS SDK is required' if !defined?(AWS) || AWS.nil? if document.class == String @key = self.get_key(document) else @document = document end @options = { acl: 'authenticated-read' }.merge(options) end
secret_access_key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 143 def self.secret_access_key ENV["S3_SECRET_ACCESS_KEY"] end
Public Instance Methods
access_key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 115 def access_key self.class.access_key end
base_url()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 25 def base_url "https://#{self.bucket_name}.s3.amazonaws.com/" end
bucket()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 107 def bucket ::AWS::S3.new.buckets[self.bucket_name] end
bucket_name()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 111 def bucket_name self.class.bucket_name end
delete()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 66 def delete s3_object.delete end
document()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 21 def document @document end
document_name()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 37 def document_name if key.present? key.downcase.split('/').last else nil end end
expiration(time=10.hours)
click to toggle source
# File lib/digital_opera/services/s3.rb, line 62 def expiration(time=10.hours) (time).from_now.to_time.iso8601 end
get_key(url)
click to toggle source
# File lib/digital_opera/services/s3.rb, line 123 def get_key(url) if url.start_with? self.base_url url.split(self.base_url).last else if url.start_with? '/' url[1..(url.length-1)] else url end end end
key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 29 def key @key ||= if document.s3_key.present? self.get_key document.s3_key else nil end end
policy()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 70 def policy Base64.encode64(self.policy_data.to_json).gsub("\n", "") end
policy_data()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 74 def policy_data { expiration: self.expiration, conditions: [ ["starts-with", "$utf8", ""], ["starts-with", "$key", ""], { bucket: self.bucket_name }, { acl: @options[:acl] } ] } end
private_url()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 53 def private_url if self.s3_object.present? disposition = "attachment; filename=#{document_name.parameterize}" self.s3_object.url_for(:read, :expires => self.expiration(10.minutes), :response_content_disposition => disposition).to_s else nil end end
public_url()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 45 def public_url if self.s3_object.present? self.s3_object.public_url.to_s else nil end end
s3_object()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 86 def s3_object @s3_object ||= if self.key.present? self.bucket.objects[self.key] else nil end end
secret_access_key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 119 def secret_access_key self.class.secret_access_key end
signature()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 94 def signature Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest::Digest.new('sha1'), self.secret_access_key, policy ) ).gsub("\n", "") end
upload_key()
click to toggle source
# File lib/digital_opera/services/s3.rb, line 103 def upload_key 'documents/${filename}' end