Sha256: 1649e41088e054b9b717112eeab2aaf267d4c210747eec003c604a6c5e390742

Contents?: true

Size: 1.32 KB

Versions: 4

Compression:

Stored size: 1.32 KB

Contents

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
infopark_cloud_connector-6.8.0.23.da7f96b lib/rails_connector/s3_blob.rb
infopark_cloud_connector-6.8.0.16.def5e85 lib/rails_connector/s3_blob.rb
infopark_cloud_connector-6.8.0.15.a24f5ff lib/rails_connector/s3_blob.rb
infopark_cloud_connector-6.8.0.beta.200.891.647580e lib/rails_connector/s3_blob.rb