Sha256: b489ada9f0b97802c48f1beb1dee635ad1cceb3c24561851007e6896f519cc6a

Contents?: true

Size: 1.47 KB

Versions: 3

Compression:

Stored size: 1.47 KB

Contents

module EPUB
  module Publication
    class Package
      class Spine
        attr_accessor :package,
                      :id, :toc, :page_progression_direction
        attr_reader :itemrefs

        def <<(itemref)
          @itemrefs ||= []
          itemref.spine = self
          @itemrefs << itemref
        end

        # @yield [itemref]
        # @yieldparam [Itemref] itemref
        # @yieldreturn [Object] returns the last value of block
        # @return [Object, Enumerator]
        #   returns the last value of block when block given, Enumerator when not
        def each_itemref
          if block_given?
            itemrefs.each {|itemref| yield itemref}
          else
            enum_for :each_itemref
          end
        end

        # @return [Enumerator] Enumerator which yeilds {Manifest::Item}
        #   referred by each of {#itemrefs}
        def items
          itemrefs.collector {|itemref| itemref.item}
        end

        class Itemref
          attr_accessor :spine,
                        :idref, :linear, :id, :properties
          alias linear? linear

          # @return [Package::Manifest::Item] item referred by this object
          def item
            @item ||= @spine.package.manifest[idref]
          end

          def ==(other)
            [:spine, :idref, :linear, :id].all? {|meth|
              self.__send__(meth) == other.__send__(meth)
            } and (other.properties - properties).empty?
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
epub-parser-0.1.3 lib/epub/publication/package/spine.rb
epub-parser-0.1.2 lib/epub/publication/package/spine.rb
epub-parser-0.1.1 lib/epub/publication/package/spine.rb