Class: GEPUB::Spine

Inherits:
Object
  • Object
show all
Includes:
XMLUtil
Defined in:
lib/gepub/spine.rb

Defined Under Namespace

Classes: Itemref

Constant Summary

Constants included from XMLUtil

XMLUtil::DC_NS, XMLUtil::OPF_NS

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from XMLUtil

#attr_to_hash, #ns_prefix, #raw_prefix

Constructor Details

#initialize(opf_version = '3.0', id_pool = Package::IDPool.new) {|_self| ... } ⇒ Spine

Returns a new instance of Spine.

Yields:

  • (_self)

Yield Parameters:

  • _self (GEPUB::Spine)

    the object that the method was called on



81
82
83
84
85
86
87
88
# File 'lib/gepub/spine.rb', line 81

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

Instance Attribute Details

#opf_versionObject

Returns the value of attribute opf_version.



6
7
8
# File 'lib/gepub/spine.rb', line 6

def opf_version
  @opf_version
end

Class Method Details

.parse(spine_xml, opf_version = '3.0', id_pool = Package::IDPool.new) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/gepub/spine.rb', line 64

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

Instance Method Details

#<<(item) ⇒ Object



111
112
113
# File 'lib/gepub/spine.rb', line 111

def <<(item)
  push item
end

#itemref_by_idObject



101
102
103
# File 'lib/gepub/spine.rb', line 101

def itemref_by_id
  @itemref_by_id.dup
end

#itemref_listObject



97
98
99
# File 'lib/gepub/spine.rb', line 97

def itemref_list
  @item_refs.dup
end

#push(item) ⇒ Object



105
106
107
108
109
# File 'lib/gepub/spine.rb', line 105

def push(item)
  @item_refs << i = Itemref.new(item.id, self)
  @itemref_by_id[item.id] = i
  i
end

#register_itemref(itemref) ⇒ Object



124
125
126
127
# File 'lib/gepub/spine.rb', line 124

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) ⇒ Object



134
135
136
137
138
139
# File 'lib/gepub/spine.rb', line 134

def remove_with_idlist(ids)
  @item_refs = @item_refs.select {
    |ref|
    !ids.member? ref.idref
  }
end

#to_xml(builder) ⇒ Object



115
116
117
118
119
120
121
122
# File 'lib/gepub/spine.rb', line 115

def to_xml(builder)
  builder.spine(@attributes) {
    @item_refs.each {
      |ref|
      ref.to_xml(builder, @opf_version)
    }
  }
end

#unregister_itemref(itemref) ⇒ Object



129
130
131
132
# File 'lib/gepub/spine.rb', line 129

def unregister_itemref(itemref)
  @item_refs.delete itemref
  @id_pool[itemref.id] = nil
end