class GEPUB::Spine

Attributes

opf_version[RW]

Public Class Methods

new(opf_version = '3.0', id_pool = Package::IDPool.new) { |self| ... } click to toggle source
# File lib/gepub/spine.rb, line 102
def initialize(opf_version = '3.0', id_pool  = Package::IDPool.new)
  @id_pool = id_pool
  @attributes = {}
  @item_refs = []
  @itemref_by_id = {}
  @opf_version = opf_version
  yield self if block_given?
end
parse(spine_xml, opf_version = '3.0', id_pool = Package::IDPool.new) click to toggle source
# File lib/gepub/spine.rb, line 85
def self.parse(spine_xml, opf_version = '3.0', id_pool  = Package::IDPool.new)
  Spine.new(opf_version, id_pool) {
    |spine|
    spine.instance_eval {
      @xml = spine_xml
      @namespaces = @xml.namespaces
      @attributes = attr_to_hash(@xml.attributes)
      @item_refs = []
      @xml.xpath("//#{ns_prefix(OPF_NS)}:spine/#{ns_prefix(OPF_NS)}:itemref", @namespaces).map {
        |itemref|
        i = Itemref.create(self, attr_to_hash(itemref.attributes))
        @item_refs << i
      }
    }
  }
end

Public Instance Methods

<<(item) click to toggle source
# File lib/gepub/spine.rb, line 132
def <<(item)
  push item
end
itemref_by_id() click to toggle source
# File lib/gepub/spine.rb, line 122
def itemref_by_id
  @itemref_by_id.dup
end
itemref_list() click to toggle source
# File lib/gepub/spine.rb, line 118
def itemref_list
  @item_refs.dup
end
push(item) click to toggle source
# File lib/gepub/spine.rb, line 126
def push(item)
  @item_refs << i = Itemref.new(item.id, self)
  @itemref_by_id[item.id] = i
  i
end
register_itemref(itemref) click to toggle source
# File lib/gepub/spine.rb, line 149
def register_itemref(itemref)
  raise "id '#{itemref.id}' is already in use." if @id_pool[itemref.id]
  @id_pool[itemref.id] = true unless itemref.id.nil?
end
remove_with_idlist(ids) click to toggle source
# File lib/gepub/spine.rb, line 159
def remove_with_idlist(ids)
  @item_refs = @item_refs.select {
    |ref|
    !ids.member? ref.idref
  }
end
rendition_specified?() click to toggle source
# File lib/gepub/spine.rb, line 136
def rendition_specified?
  @item_refs.select { |itemref| itemref.rendition_specified? }.size > 0
end
to_xml(builder) click to toggle source
# File lib/gepub/spine.rb, line 140
def to_xml(builder)
  builder.spine(@attributes) {
    @item_refs.each {
      |ref|
      ref.to_xml(builder, @opf_version)
    }
  }
end
unregister_itemref(itemref) click to toggle source
# File lib/gepub/spine.rb, line 154
def unregister_itemref(itemref)
  @item_refs.delete itemref
  @id_pool[itemref.id] = nil
end