Class: Fae::AssetCloner

Inherits:
Object
  • Object
show all
Defined in:
app/controllers/concerns/fae/asset_cloner.rb

Constant Summary collapse

NoFileForOriginalResource =
Class.new(StandardError)
UnknownStorage =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_resource, resource, mount_point) ⇒ AssetCloner

Returns a new instance of AssetCloner.



8
9
10
11
12
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 8

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

Instance Attribute Details

#mount_pointObject (readonly)

Returns the value of attribute mount_point.



6
7
8
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 6

def mount_point
  @mount_point
end

#original_resourceObject (readonly)

Returns the value of attribute original_resource.



6
7
8
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 6

def original_resource
  @original_resource
end

#resourceObject (readonly)

Returns the value of attribute resource.



6
7
8
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 6

def resource
  @resource
end

Instance Method Details

#have_file?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 29

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

#original_resource_mounterObject



41
42
43
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 41

def original_resource_mounter
  original_resource.send(mount_point)
end

#set_fileObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 14

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

#set_file_for_local_storageObject



37
38
39
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 37

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

#set_file_for_remote_storageObject



33
34
35
# File 'app/controllers/concerns/fae/asset_cloner.rb', line 33

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