Sha256: 55769a95fffc02efc80658c16d0cdd51f794b064b94f58c05254886e829ea1ed

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 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)
      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

3 entries across 3 versions & 1 rubygems

Version Path
infopark_cloud_connector-6.8.0.210.ed204b0 lib/rails_connector/s3_blob.rb
infopark_cloud_connector-6.8.0.110.6570b45 lib/rails_connector/s3_blob.rb
infopark_cloud_connector-6.8.0.72.d18d096 lib/rails_connector/s3_blob.rb