Class: FilterRename::FilenameFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/filter_rename/filename_factory.rb

Overview

Factory class that returns the related file handler depending from its file type.

Class Method Summary collapse

Class Method Details

.create(fname, cfg) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/filter_rename/filename_factory.rb', line 15

def self.create(fname, cfg)
  return Filename.new(fname, cfg) if File.directory?(fname) || !cfg.mimemagic

  magic = MimeMagic.by_magic(File.open(fname))
  mediatype, type, subtype = magic.nil? ? %w[unknown unknown unknown] : [magic.mediatype, magic.type, magic.subtype]

  if (File.read(fname, 3) == "ID3") && (mediatype == "audio")
    require "filter_rename/filetype/mp3_filename"
    res = Mp3Filename.new(fname, cfg)
  elsif ((mediatype == "audio") && (subtype == "mp4")) || (%w[flac ogg].include? subtype)
    require "filter_rename/filetype/audio_filename"
    res = AudioFilename.new(fname, cfg)
  elsif (mediatype == "image") && (!["vnd.djvu+multipage"].include? type.split("/")[1])
    # supported types: jpeg, png
    require "filter_rename/filetype/image_filename"
    res = ImageFilename.new(fname, cfg)
  elsif type == "application/pdf"
    require "filter_rename/filetype/pdf_filename"
    res = PdfFilename.new(fname, cfg)
  else
    res = Filename.new(fname, cfg)
  end

  res
end