module RailsConnector class S3Blob class << self def s3_objects @s3_objects ||= bucket.objects end def bucket s3_api.buckets[bucket_name] end def s3_api AWS::S3.new( :access_key_id => access_key_id, :secret_access_key => secret_access_key ) end def bucket_url @cached_bucket_url ||= bucket.url end def configure(spec) @spec = spec.symbolize_keys # invalidate cache @cached_bucket_url = nil end def find(id, options) new(id) end private attr_reader :spec def bucket_name spec[:bucket_name] end def access_key_id spec[:access_key_id] end def secret_access_key spec[:secret_access_key] end end attr_reader :id def initialize(id) @id = id end def s3_object @s3_object = self.class.s3_objects[id] end def url # the 'official' way to calculate an s3 url is as follows: # s3_object.public_url.to_s # # this is about 25x faster: # assumption: 'id' does not contain any characters that need escaping. # the assumptions is valid for cms blobs. "#{self.class.bucket_url}#{@id}" end def content_type s3_object.content_type end def length s3_object.content_length end end end # module RailsConnector