class CopyCarrierwaveFile::CopyFileService

Constants

NoFileForOriginalResource
UnknowStorage

Attributes

mount_point[R]
original_resource[R]
resource[R]

Public Class Methods

new(original_resource, resource, mount_point) click to toggle source
# File lib/copy_carrierwave_file/copy_file_service.rb, line 8
def initialize(original_resource, resource, mount_point)
  @mount_point       = mount_point.to_sym

  raise "#{original_resource} is not a resource with uploader" unless original_resource.class.respond_to? :uploaders
  raise "#{original_resource} doesn't have mount point #{mount_point}" unless original_resource.class.uploaders[@mount_point]

  raise "#{resource} is not a resource with uploader" unless resource.class.respond_to? :uploaders
  raise "#{resource} doesn't have mount point #{mount_point}" unless resource.class.uploaders[@mount_point]

  @original_resource = original_resource
  @resource          = resource
end

Public Instance Methods

have_file?() click to toggle source
# File lib/copy_carrierwave_file/copy_file_service.rb, line 44
def have_file?
  original_resource_mounter.file.present? || original_resource_mounter.url
end
original_resource_mounter() click to toggle source
# File lib/copy_carrierwave_file/copy_file_service.rb, line 56
def original_resource_mounter
  original_resource.send(mount_point)
end
set_file() click to toggle source

set_file

sets file for given storage type

reason why case is comparing String and not actual storage class is that user may or may not add gem “fog” => this class may not be loaded

# File lib/copy_carrierwave_file/copy_file_service.rb, line 29
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 UnknowStorage
    end
  else
    raise NoFileForOriginalResource
  end
end
set_file_for_local_storage() click to toggle source
# File lib/copy_carrierwave_file/copy_file_service.rb, line 52
def set_file_for_local_storage
  resource.send(:"#{mount_point.to_s}=", File.open(original_resource_mounter.file.file))
end
set_file_for_remote_storage() click to toggle source
# File lib/copy_carrierwave_file/copy_file_service.rb, line 48
def set_file_for_remote_storage
  resource.send(:"remote_#{mount_point.to_s}_url=", original_resource_mounter.url)
end