Class: GEPUB::Spine
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.
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_version ⇒ Object
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_id ⇒ Object
101
102
103
|
# File 'lib/gepub/spine.rb', line 101
def itemref_by_id
@itemref_by_id.dup
end
|
#itemref_list ⇒ Object
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
|