master
 1class BlobStorage
 2  attr_reader :bucket_name
 3
 4  def initialize(bucket_name = ENV['FOG_DIRECTORY'])
 5    @bucket_name = bucket_name
 6  end
 7
 8  def upload(key, file)
 9    Rails.logger.info "uploading to #{bucket_name}/#{key}"
10    object = object_for(key)
11    object.write(Pathname.new(file), options_for(file))
12    object.acl = :public_read
13  end
14
15  def download(key)
16    object = object_for(key)
17    File.open("#{Dir.tmpdir}/#{File.basename(key)}", "wb") do |tempfile|
18      object.read do |chunk|
19        tempfile.write(chunk)
20      end
21      yield tempfile
22    end
23  end
24
25  private
26
27  def object_for(key)
28    connection.buckets[bucket_name].objects[key]
29  end
30
31  def connection
32    @connection ||= AWS::S3.new
33  end
34
35  def content_type_for(file)
36    ::MIME::Types.type_for(file).first.to_s
37  end
38
39  def options_for(file)
40    {
41      content_type: content_type_for(file),
42      cache_control: 'public, max-age=315576000',
43    }
44  end
45
46  class Fake
47    def upload(*args)
48    end
49
50    def downlaod(*args)
51    end
52  end
53end