Sha256: fc7d28217dea1bb4e84604d15e66e00605a7cca4f7f9343cee186242a2586365

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

require 'epub/constants'
require 'epub/parser/version'
require 'epub/parser/ocf'
require 'epub/parser/publication'
require 'epub/parser/content_document'
require 'shellwords'
require 'nokogiri'

module EPUB
  class Parser
    class << self
      def parse(file, dir, options = {})
        new(file, dir, options).parse
      end
    end

    def initialize(filepath, root_directory, options = {})
      raise "File #{filepath} not readable" unless File.readable_real? filepath
      raise "File #{root_directory} already exists" if File.file? root_directory
        
      @filepath = File.realpath filepath
      Dir.mkdir(root_directory) unless File.directory? root_directory
      @dir = File.realpath root_directory

      @book = create_book options

      unzip_cmd = options['unzip-command'] || 'unzip'
      unzip_cmd << " #{@filepath.to_s.shellescape} -d #{@dir.to_s.shellescape} 1>/dev/null"
      system unzip_cmd
    end

    def parse
      @book.ocf = parse_ocf
      @book.package = parse_publication
      # @book.content_document =??? parse_content_document
      # ...

      @book
    end

    def parse_ocf
      OCF.parse @dir
    end

    def parse_publication
      Publication.parse File.join(@dir, @book.rootfile_path)
    end

    def parse_content_document
      # ContentDocument.parse @dir
    end

    private

    def create_book(params)
      case
      when params[:book]
        options[:book]
      when params[:class]
        options[:class].new
      else
        require 'epub/book'
        Book.new
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
epub-parser-0.0.8 lib/epub/parser.rb