repub 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,178 +0,0 @@
1
- require 'rubygems'
2
- require 'builder'
3
-
4
- module Repub
5
- module Epub
6
-
7
- class Content
8
-
9
- def initialize(uid)
10
- @metadata = Metadata.new('Untitled', 'en', uid, Date.today.to_s)
11
- @manifest_items = []
12
- @spine_items = []
13
- @manifest_items << ContentItem.new('ncx', 'toc.ncx')
14
- end
15
-
16
- class Metadata < Struct.new(
17
- :title,
18
- :language,
19
- :identifier,
20
- :date,
21
- :subject,
22
- :description,
23
- :relation,
24
- :creator,
25
- :publisher,
26
- :rights
27
- )
28
- end
29
-
30
- attr_reader :metadata
31
-
32
- def add_item(href, id = nil)
33
- item = ContentItem.new(id || "item_#{@manifest_items.size}", href)
34
- @manifest_items << item
35
- @spine_items << item if item.document?
36
- end
37
-
38
- #def add_stylesheet(href, id = nil)
39
- # @manifest_items << ContentItem.new(id || "css_#{@css_counter += 1}", href, 'text/css')
40
- #end
41
- #
42
- #def add_image(href, id = nil)
43
- # image_type = case(href.strip.downcase)
44
- # when /.*\.(jpeg|jpg)$/
45
- # 'image/jpeg'
46
- # when /.*\.png$/
47
- # 'image/png'
48
- # when /.*\.gif$/
49
- # 'image/gif'
50
- # when /.*\.svg$/
51
- # 'image/svg+xml'
52
- # else
53
- # raise 'Unsupported image type'
54
- # end
55
- # @manifest_items << ContentItem.new(id || "img_#{@img_counter += 1}", href, image_type)
56
- #end
57
- #
58
- #def add_document(href, id = nil)
59
- # manifest_item = ContentItem.new(id || "item_#{@html_counter += 1}", href, 'application/xhtml+xml')
60
- # @manifest_items << manifest_item
61
- # @spine_items << manifest_item
62
- #end
63
-
64
- def to_xml
65
- out = ''
66
- builder = Builder::XmlMarkup.new(:target => out)
67
- builder.instruct!
68
- builder.package :xmlns => "http://www.idpf.org/2007/opf",
69
- 'unique-identifier' => "dcidid",
70
- 'version' => "2.0" do
71
- metadata_to_xml(builder)
72
- manifest_to_xml(@manifest_items, builder)
73
- spine_to_xml(@spine_items, builder)
74
- end
75
- out
76
- end
77
-
78
- def save(path = 'content.opf')
79
- File.open(path, 'w') do |f|
80
- f << to_xml
81
- end
82
- end
83
-
84
- private
85
-
86
- def metadata_to_xml(builder)
87
- builder.metadata 'xmlns:dc' => "http://purl.org/dc/elements/1.1/",
88
- 'xmlns:dcterms' => "http://purl.org/dc/terms/",
89
- 'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
90
- 'xmlns:opf' => "http://www.idpf.org/2007/opf" do
91
- # Required elements
92
- builder.dc :title do
93
- builder << @metadata.title
94
- end
95
- builder.dc :language, 'xsi:type' => "dcterms:RFC3066" do
96
- builder << @metadata.language
97
- end
98
- builder.dc :identifier, :id => 'dcidid', 'opf:scheme' => 'URI' do
99
- builder << @metadata.identifier
100
- end
101
- # Optional elements
102
- builder.dc :subject do
103
- builder << @metadata.subject
104
- end if @metadata.subject
105
- builder.dc :description do
106
- builder << @metadata.description
107
- end if @metadata.description
108
- builder.dc :relation do
109
- builder << @metadata.relation
110
- end if @metadata.relation
111
- builder.dc :creator do
112
- builder << @metadata.creator
113
- end if @metadata.creator
114
- builder.dc :publisher do
115
- builder << @metadata.publisher
116
- end if @metadata.publisher
117
- builder.dc :date do
118
- builder << @metadata.date.to_s
119
- end if @metadata.date
120
- builder.dc :rights do
121
- builder << @metadata.rights
122
- end if @metadata.rights
123
- end
124
- end
125
-
126
- class ContentItem < Struct.new(
127
- :id,
128
- :href,
129
- :media_type
130
- )
131
-
132
- def initialize(id, href)
133
- super(id, href)
134
- self.media_type = case href.strip.downcase
135
- when /.*\.html?$/
136
- 'application/xhtml+xml'
137
- when /.*\.css$/
138
- 'text/css'
139
- when /.*\.(jpeg|jpg)$/
140
- 'image/jpeg'
141
- when /.*\.png$/
142
- 'image/png'
143
- when /.*\.gif$/
144
- 'image/gif'
145
- when /.*\.svg$/
146
- 'image/svg+xml'
147
- when /.*\.ncx$/
148
- 'application/x-dtbncx+xml'
149
- else
150
- raise 'Unknown media type'
151
- end
152
- end
153
-
154
- def document?
155
- self.media_type == 'application/xhtml+xml'
156
- end
157
- end
158
-
159
- def manifest_to_xml(manifest_items, builder)
160
- builder.manifest do
161
- manifest_items.each do |i|
162
- builder.item :id => i[:id], :href => i[:href], 'media-type' => i[:media_type]
163
- end
164
- end
165
- end
166
-
167
- def spine_to_xml(spine_items, builder)
168
- builder.spine do
169
- spine_items.each do |i|
170
- builder.itemref :idref => i[:id]
171
- end
172
- end
173
- end
174
-
175
- end
176
-
177
- end
178
- end
@@ -1,15 +0,0 @@
1
- require 'test/unit'
2
- require 'rubygems'
3
- require 'nokogiri'
4
- require 'repub/epub'
5
-
6
- class TestContainer < Test::Unit::TestCase
7
- def test_container_create
8
- c = Repub::Epub::Container.new
9
- s = c.to_xml
10
- doc = Nokogiri::XML.parse(s)
11
- assert_not_nil(doc.at('rootfile'))
12
- assert_equal('content.opf', doc.at('rootfile')['full-path'])
13
- assert_equal('application/oebps-package+xml', doc.at('rootfile')['media-type'])
14
- end
15
- end