lib/gepub/mime.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
78%
module GEPUB
  #
  # Static Object to hold and operate with OEBPS data MIME types
  #

  class Mime

    # compile mime_types regexp
    def self.compile_mime_types
      @@mime_types_compiled = Hash[@@mime_types.map { |expr, mime| [ /\A\.#{expr}\Z/i, mime ] }]
    end
    
    # media types by file extension regexp seeds to mime types
    @@mime_types =  { 
      '(html|xhtml)' => 'application/xhtml+xml',
      'css' => 'text/css',
      'js' => 'text/javascript',
      '(jpg|jpeg)' => 'image/jpeg',
      'png' => 'image/png',
      'gif' => 'image/gif',
      'svg' => 'image/svg+xml',
      'opf' => 'application/oebps-package+xml',
      'ncx' => 'application/x-dtbncx+xml',
      '(otf|ttf|ttc|eot)' => 'application/vnd.ms-opentype',
      'woff' => 'application/font-woff',
      'mp4' => 'video/mp4',
      'mp3' => 'audio/mpeg'
    }
    compile_mime_types

    # return mime media types => mime types hash
    def self.mime_types
       @@mime_types
    end

    # add new mediatype to @@mediatypes
    def self.add_mimetype(mediatypes)
      mediatypes.each { |expr, mime| @@mime_types[expr] ||= mime }
      compile_mime_types
    end

     #guess mediatype by mime type mask
    def self.guess_mediatype(href)
      ext = File.extname(href)
      @@mime_types_compiled.select { |pattern, _mime| ext =~ pattern }.values[0]
    end
    
  end
end