Class: Spaceship::UploadFile

Inherits:
Object
  • Object
show all
Defined in:
spaceship/lib/spaceship/du/upload_file.rb

Overview

a wrapper around the concept of file required to make uploads to DU

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#bytesObject (readonly)

Returns the value of attribute bytes.



13
14
15
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 13

def bytes
  @bytes
end

#content_typeObject (readonly)

Returns the value of attribute content_type.



12
13
14
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 12

def content_type
  @content_type
end

#file_nameObject (readonly)

Returns the value of attribute file_name.



10
11
12
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 10

def file_name
  @file_name
end

#file_pathObject (readonly)

Returns the value of attribute file_path.



9
10
11
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 9

def file_path
  @file_path
end

#file_sizeObject (readonly)

Returns the value of attribute file_size.



11
12
13
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 11

def file_size
  @file_size
end

Class Method Details

.from_path(path) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 16

def from_path(path)
  raise "Image must exists at path: #{path}" unless File.exist?(path)

  # md5 from original. keeping track of md5s allows to skip previously uploaded in deliver
  content_md5 = Spaceship::Utilities.md5digest(path)
  path = remove_alpha_channel(path) if File.extname(path).casecmp('.png').zero?

  content_type = Utilities.content_type(path)
  self.new(
    file_path: path,
    file_name: 'ftl_' + content_md5 + '_' + File.basename(path),
    file_size: File.size(path),
    content_type: content_type,
    bytes: File.read(path)
  )
end

.mac?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 46

def mac?
  (/darwin/ =~ RUBY_PLATFORM) != nil
end

.remove_alpha_channel(original) ⇒ Object

As things like screenshots and app icon shouldn't contain the alpha channel This will copy the image into the temporary directory to remove the alpha channel there. That's done to not edit the original image.



36
37
38
39
40
41
42
43
44
# File 'spaceship/lib/spaceship/du/upload_file.rb', line 36

def remove_alpha_channel(original)
  path = File.join(Dir.tmpdir, "#{Digest::MD5.hexdigest(original)}.png")
  FileUtils.copy(original, path)
  if mac? # sips is only available on macOS
    `sips -s format bmp '#{path}' &> /dev/null` # &> /dev/null since there is warning because of the extension
    `sips -s format png '#{path}'`
  end
  return path
end