class AssetS3::S3

Constants

DEFAULT_GZIP_TYPES

Public Class Methods

cache_headers() click to toggle source
# File lib/asset_s3.rb, line 65
def self.cache_headers
  {"Expires" => (Time.now + (60*60*24*365)).httpdate, "Cache-Control" => "public"} # 1 year expiry
end
connect_to_s3() click to toggle source
# File lib/asset_s3.rb, line 58
def self.connect_to_s3
  AWS::S3::Base.establish_connection!(
    :access_key_id => s3_config["access_key_id"],
    :secret_access_key => s3_config["secret_access_key"]
  )
end
fingerprint(path) click to toggle source
Calls superclass method AssetS3::Base::fingerprint
# File lib/asset_s3.rb, line 81
def self.fingerprint(path)
  super(path)
end
gzip_headers() click to toggle source
# File lib/asset_s3.rb, line 69
def self.gzip_headers
  {"Content-Encoding" => "gzip", "Vary" => "Accept-Encoding"}
end
gzip_types() click to toggle source
# File lib/asset_s3.rb, line 50
def self.gzip_types
  @@gzip_types
end
gzip_types=(types) click to toggle source
# File lib/asset_s3.rb, line 46
def self.gzip_types=(types)
  @@gzip_types = types
end
s3_bucket() click to toggle source
# File lib/asset_s3.rb, line 77
def self.s3_bucket
  s3_config["bucket"]
end
s3_config() click to toggle source
# File lib/asset_s3.rb, line 54
def self.s3_config
  @@config ||= YAML.load_file(File.join(Rails.root, "config/asset_s3.yml"))[Rails.env] rescue nil || {}
end
s3_permissions() click to toggle source
# File lib/asset_s3.rb, line 73
def self.s3_permissions
  :public_read
end
upload(options={}) click to toggle source
# File lib/asset_s3.rb, line 85
def self.upload(options={})
  connect_to_s3
  assets.each do |asset|
    puts "asset_id: Uploading #{asset} as #{fingerprint(asset)}" if options[:debug]
    mime_type = MIME::Types.of(asset).first.to_s

    headers = {
      :content_type => mime_type,
      :access => s3_permissions,
    }.merge(cache_headers)

    if gzip_types.include?(mime_type)
      data = `gzip -c #{asset}`
      headers.merge!(gzip_headers)
    else
      data = File.read(asset)
    end

    puts "asset_id: headers: #{headers.inspect}" if options[:debug]

    AWS::S3::S3Object.store(
      fingerprint(asset),
      data,
      s3_bucket,
      headers
    ) unless options[:dry_run]
  end
end