Sha256: 2de5563928d37774d741538478c873faf8b25289f22ecb3d7dd96a3fe19185d2

Contents?: true

Size: 1.26 KB

Versions: 8

Compression:

Stored size: 1.26 KB

Contents

module Fae
  class AssetCloner
    NoFileForOriginalResource  = Class.new(StandardError)
    UnknownStorage             = Class.new(StandardError)

    attr_reader :original_resource, :resource, :mount_point

    def initialize(original_resource, resource, mount_point)
      @mount_point       = mount_point.to_sym
      @original_resource = original_resource
      @resource          = resource
    end

    def set_file
      if have_file?
        case original_resource_mounter.send(:storage).class.name
        when 'CarrierWave::Storage::File'
          set_file_for_local_storage
        when 'CarrierWave::Storage::Fog', 'CarrierWave::Storage::AWS'
          set_file_for_remote_storage
        else
          raise UnknownStorage
        end
      else
        raise NoFileForOriginalResource
      end
    end

    def have_file?
      original_resource_mounter.file.present? || original_resource_mounter.url
    end

    def set_file_for_remote_storage
      resource.send(:"remote_#{mount_point.to_s}_url=", original_resource_mounter.url)
    end

    def set_file_for_local_storage
      resource.send(:"#{mount_point.to_s}=", ::File.open(original_resource_mounter.file.file))
    end

    def original_resource_mounter
      original_resource.send(mount_point)
    end

  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
fae-rails-3.0.0 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-2.2.0 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-2.1.0 app/controllers/concerns/fae/asset_cloner.rb
fae-railsz-2.1.0 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-2.0.0 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-1.7.1 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-1.7.0 app/controllers/concerns/fae/asset_cloner.rb
fae-rails-1.6.0 app/controllers/concerns/fae/asset_cloner.rb