class EPUBInfo::Models::Cover

Attributes

content_type[RW]

Content type of cover file @return [String]

Public Class Methods

new(parser) click to toggle source
Calls superclass method
# File lib/epubinfo/models/cover.rb, line 4
def self.new(parser)
  return nil unless EPUBInfo::Parser === parser

  cover = super(parser)

  if cover.exists?
    cover
  else
    nil
  end
end
new(parser) click to toggle source
# File lib/epubinfo/models/cover.rb, line 16
def initialize(parser)
  @parser = parser
  @path   = epub_cover_file_path
  @content_type = epub_cover_content_type
end

Public Instance Methods

exists?() click to toggle source

Cover exists? @return [Boolean] @!visibility private

# File lib/epubinfo/models/cover.rb, line 35
def exists?
  !!@path && @parser.zip_file.find_entry(zip_file_path)
end
original_file_name() click to toggle source

Original name of cover file @return [String]

# File lib/epubinfo/models/cover.rb, line 24
def original_file_name
  File.basename(@path) if @path
end
tempfile() { |tempfile| ... } click to toggle source

Cover file @return [File] Tempfile is used to enable access to cover file If block is passed, the tempfile is passed to it and closed after the block is executed

cover.file do { |f| puts f.size }

Otherwise user is responsible to unlink and close tempfile

file = book.cover.file
file.size
file.close!
# File lib/epubinfo/models/cover.rb, line 49
def tempfile(&block)
  tempfile = Tempfile.new('epubinfo')
  tempfile.binmode

  cover_file = @parser.zip_file.read(zip_file_path)
  tempfile.write(cover_file)

  if block_given?
    yield tempfile
    tempfile.close!
  else
    # user is responsible for closing file
    tempfile
  end
end

Private Instance Methods

epub_cover_content_type() click to toggle source
# File lib/epubinfo/models/cover.rb, line 71
def epub_cover_content_type
  epub_cover_item.attr('media-type') if epub_cover_item
end
epub_cover_file_path() click to toggle source
# File lib/epubinfo/models/cover.rb, line 67
def epub_cover_file_path
  epub_cover_item.attr('href') if epub_cover_item
end
epub_cover_item() click to toggle source
# File lib/epubinfo/models/cover.rb, line 75
def epub_cover_item
  @epub_cover_item ||= begin
    metadata = @parser.metadata_document.css('metadata')
    cover_id = (metadata.css('meta [name=cover]').attr('content').value rescue nil) || 'cover-image'

    manifest = @parser.metadata_document.css('manifest')

    (manifest.css("item [id = \"#{cover_id}\"]").first rescue nil) ||
      (manifest.css("item [properties = \"#{cover_id}\"]").first rescue nil) ||
      (manifest.css("item [property = \"#{cover_id}\"]").first rescue nil) ||
      (manifest.css("item [id = img-bookcover-jpeg]").first rescue nil)
  end
end
zip_file_path() click to toggle source
# File lib/epubinfo/models/cover.rb, line 89
def zip_file_path
  dir = File.dirname(@parser.metadata_path)
  path =
    if dir == '.'
      @path
    else
      File.join(dir, @path)
    end
  CGI::unescape(path)
end