Sha256: 863d38bde2935535302544fa04d468cd22bc373863fdbb775bccbb85de2ed1a3

Contents?: true

Size: 1.28 KB

Versions: 3

Compression:

Stored size: 1.28 KB

Contents

require 'epub/constants'
require 'epub/ocf'
require 'nokogiri'

module EPUB
  class Parser
    class OCF
      DIRECTORY = 'META-INF'
      EPUB::OCF::MODULES.each {|m| self.const_set "#{m.upcase}_FILE", "#{m}.xml"}

      class << self
        def parse(root_directory)
          new(root_directory).parse
        end
      end

      def initialize(root_directory)
        @dir = root_directory
        @ocf = EPUB::OCF.new
      end

      def parse
        EPUB::OCF::MODULES.each do |m|
          @ocf.send "#{m}=", send("parse_#{m}")
        end
        @ocf
      end

      def parse_container
        container = EPUB::OCF::Container.new
        doc = Nokogiri.XML open(File.join @dir, DIRECTORY, CONTAINER_FILE)

        doc.xpath('/container:container/container:rootfiles/container:rootfile', EPUB::NAMESPACES).each do |elem|
          rootfile = EPUB::OCF::Container::Rootfile.new
          %w[full-path media-type].each do |attr|
            rootfile.send(attr.gsub(/-/, '_') + '=', elem[attr])
            container.rootfiles << rootfile
          end
        end

        container
      end

      def parse_encryption
      end

      def parse_manifest
      end

      def parse_metadata
      end

      def parse_rights
      end

      def parse_signatures
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
epub-parser-0.0.4 lib/epub/parser/ocf.rb
epub-parser-0.0.3 lib/epub/parser/ocf.rb
epub-parser-0.0.2 lib/epub/parser/ocf.rb