summaryrefslogtreecommitdiff
path: root/config/initializers/carrierwave_patch.rb
blob: 35ffff03abebc57e709cee138b106a2c8e075bb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# This monkey patches CarrierWave 1.2.3 to make Google Cloud Storage work with
# extra query parameters:
# https://github.com/carrierwaveuploader/carrierwave/pull/2332/files
module CarrierWave
  module Storage
    class Fog < Abstract
      class File
        def authenticated_url(options = {})
          if %w(AWS Google Rackspace OpenStack).include?(@uploader.fog_credentials[:provider])
            # avoid a get by using local references
            local_directory = connection.directories.new(key: @uploader.fog_directory)
            local_file = local_directory.files.new(key: path)
            expire_at = ::Fog::Time.now + @uploader.fog_authenticated_url_expiration
            case @uploader.fog_credentials[:provider]
            when 'AWS', 'Google'
              local_file.url(expire_at, options)
            when 'Rackspace'
              connection.get_object_https_url(@uploader.fog_directory, path, expire_at, options)
            when 'OpenStack'
              connection.get_object_https_url(@uploader.fog_directory, path, expire_at)
            else
              local_file.url(expire_at)
            end
          end
        end
      end
    end
  end
end