gepub 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/gepub.gemspec +1 -2
  4. data/lib/gepub/version.rb +1 -1
  5. metadata +4 -110
  6. data/spec/bindings_spec.rb +0 -34
  7. data/spec/book_spec.rb +0 -307
  8. data/spec/builder_spec.rb +0 -614
  9. data/spec/example_spec.rb +0 -192
  10. data/spec/fixtures/builder/img/cover.jpg +0 -0
  11. data/spec/fixtures/builder/resources/noise.m4 +0 -0
  12. data/spec/fixtures/builder/resources/noise_2.m4a +0 -0
  13. data/spec/fixtures/builder/text/cover.xhtml +0 -11
  14. data/spec/fixtures/builder/text/localresource.conf +0 -2
  15. data/spec/fixtures/builder/text/memo.txt +0 -1
  16. data/spec/fixtures/builder/text/nav.xhtml +0 -12
  17. data/spec/fixtures/epubcheck-4.1.1/CHANGELOG.txt +0 -92
  18. data/spec/fixtures/epubcheck-4.1.1/LICENSE.txt +0 -28
  19. data/spec/fixtures/epubcheck-4.1.1/README.txt +0 -101
  20. data/spec/fixtures/epubcheck-4.1.1/THIRD-PARTY.txt +0 -60
  21. data/spec/fixtures/epubcheck-4.1.1/epubcheck.jar +0 -0
  22. data/spec/fixtures/epubcheck-4.1.1/lib/Saxon-HE-9.8.0-8.jar +0 -0
  23. data/spec/fixtures/epubcheck-4.1.1/lib/animal-sniffer-annotations-1.14.jar +0 -0
  24. data/spec/fixtures/epubcheck-4.1.1/lib/checker-compat-qual-2.0.0.jar +0 -0
  25. data/spec/fixtures/epubcheck-4.1.1/lib/common-image-3.4.1.jar +0 -0
  26. data/spec/fixtures/epubcheck-4.1.1/lib/common-io-3.4.1.jar +0 -0
  27. data/spec/fixtures/epubcheck-4.1.1/lib/common-lang-3.4.1.jar +0 -0
  28. data/spec/fixtures/epubcheck-4.1.1/lib/commons-compress-1.18.jar +0 -0
  29. data/spec/fixtures/epubcheck-4.1.1/lib/error_prone_annotations-2.1.3.jar +0 -0
  30. data/spec/fixtures/epubcheck-4.1.1/lib/guava-24.0-android.jar +0 -0
  31. data/spec/fixtures/epubcheck-4.1.1/lib/imageio-core-3.4.1.jar +0 -0
  32. data/spec/fixtures/epubcheck-4.1.1/lib/imageio-jpeg-3.4.1.jar +0 -0
  33. data/spec/fixtures/epubcheck-4.1.1/lib/imageio-metadata-3.4.1.jar +0 -0
  34. data/spec/fixtures/epubcheck-4.1.1/lib/j2objc-annotations-1.1.jar +0 -0
  35. data/spec/fixtures/epubcheck-4.1.1/lib/jackson-core-asl-1.9.12.jar +0 -0
  36. data/spec/fixtures/epubcheck-4.1.1/lib/jackson-mapper-asl-1.9.12.jar +0 -0
  37. data/spec/fixtures/epubcheck-4.1.1/lib/jing-20120724.0.0.jar +0 -0
  38. data/spec/fixtures/epubcheck-4.1.1/lib/jsr305-1.3.9.jar +0 -0
  39. data/spec/fixtures/epubcheck-4.1.1/lib/sac-1.3.jar +0 -0
  40. data/spec/fixtures/epubcheck-4.1.1/licenses/Apache-2.0.txt +0 -201
  41. data/spec/fixtures/epubcheck-4.1.1/licenses/BSD-3-Clause.txt +0 -27
  42. data/spec/fixtures/epubcheck-4.1.1/licenses/MPL-1.0.txt +0 -360
  43. data/spec/fixtures/epubcheck-4.1.1/licenses/W3C.txt +0 -16
  44. data/spec/fixtures/testdata/0.html +0 -12
  45. data/spec/fixtures/testdata/1.html +0 -10
  46. data/spec/fixtures/testdata/image1.jpg +0 -0
  47. data/spec/fixtures/testdata/package_2_0.opf +0 -23
  48. data/spec/fixtures/testdata/test.opf +0 -69
  49. data/spec/fixtures/testdata/test2.opf +0 -63
  50. data/spec/fixtures/testdata/test_with_bindings.opf +0 -67
  51. data/spec/fixtures/testdata/wasteland-20120118.epub +0 -0
  52. data/spec/gepub_deprectad_api_spec.rb +0 -229
  53. data/spec/gepub_spec.rb +0 -229
  54. data/spec/manifest_spec.rb +0 -36
  55. data/spec/metadata_spec.rb +0 -219
  56. data/spec/package_spec.rb +0 -150
  57. data/spec/spec_helper.rb +0 -57
  58. data/spec/spine_spec.rb +0 -55
@@ -1,229 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.dirname(__FILE__) + '/spec_helper.rb'
3
- require 'rubygems'
4
- require 'nokogiri'
5
-
6
- describe GEPUB::Item do
7
- it "should return atttributes" do
8
- item = GEPUB::Item.new('theid', 'foo/bar.bar', 'application/xhtml+xml')
9
- expect(item.itemid).to eq('theid')
10
- expect(item.href).to eq('foo/bar.bar')
11
- expect(item.mediatype).to eq('application/xhtml+xml')
12
- end
13
-
14
- it "should handle html" do
15
- item = GEPUB::Item.new('id', 'text/foo.html')
16
- expect(item.mediatype).to eq('application/xhtml+xml')
17
- end
18
-
19
- it "should handle xhtml" do
20
- item = GEPUB::Item.new('id', 'text/foo.xhtml')
21
- expect(item.mediatype).to eq('application/xhtml+xml')
22
- end
23
-
24
- it "should handle JPG" do
25
- item = GEPUB::Item.new('id', 'img/foo.JPG')
26
- expect(item.mediatype).to eq('image/jpeg')
27
- end
28
-
29
- it "should handle css" do
30
- item = GEPUB::Item.new('id', 'img/foo.css')
31
- expect(item.mediatype).to eq('text/css')
32
- end
33
-
34
- it "should handle javascript" do
35
- item = GEPUB::Item.new('id', 'js/jQuery.js')
36
- expect(item.mediatype).to eq('text/javascript')
37
- end
38
-
39
- end
40
-
41
- describe GEPUB::Book do
42
- before do
43
- @book = GEPUB::Book.new('OEPBS/package.opf')
44
- @book.title = 'thetitle'
45
- @book.creator = "theauthor"
46
- @book.contributor = "contributors contributors!"
47
- @book.publisher = "thepublisher"
48
- @book.date = "2010-05-05"
49
- @book.identifier = "http://example.jp/foobar/"
50
- @book.language = 'ja'
51
- item1 = @book.add_item('text/foobar.xhtml',nil, id: 'c1', content: StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c1</title></head><body><p>the first page</p></body></html>'))
52
- @book.spine.push(item1)
53
-
54
- item2 = @book.add_ordered_item('text/barbar.xhtml',
55
- content: StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title></head><body><p>second page, whith is test chapter.</p></body></html>'),
56
- id: 'c2',
57
- toc_text: 'test chapter')
58
-
59
- item3 = @book.add_item('text/handler.xhtml',
60
- content: StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title><script>alert("foo");</script></head><body><p>this is scripted item</p></body></html>')
61
- )
62
- item3.add_property('scripted')
63
- item3.is_handler_of('application/x-some-media-type')
64
- @item3_id = item3.id
65
-
66
- nav_string = <<EOF
67
- <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">
68
- <head></head>
69
- <body>
70
- <nav epub:type="toc" id="toc">
71
- <h1>Table of contents</h1>
72
- <ol>
73
- <li><a href="foobar.xhtml">Chapter 1</a> </li>
74
- <li> <a href="barbar.xhtml">Chapter 2</a></li>
75
- </ol>
76
- </nav>
77
- </body>
78
- </html>
79
- EOF
80
- item3 = @book.add_ordered_item('text/nav.xhtml', content: StringIO.new(nav_string), id: 'nav').add_property('nav')
81
- end
82
-
83
- it "should have title" do
84
- expect(@book.title.to_s).to eq('thetitle')
85
- end
86
-
87
- it "should generate correct ncx" do
88
- ncx = Nokogiri::XML.parse(@book.ncx_xml).root
89
- expect(ncx.name).to eq('ncx')
90
- expect(ncx.attributes['version'].value).to eq('2005-1')
91
- ncx.namespaces['xmlns'] == 'http://www.daisy.org/z3986/2005/ncx/'
92
- end
93
-
94
- it "should have correct head in ncx" do
95
- head = Nokogiri::XML.parse(@book.ncx_xml).at_xpath('/xmlns:ncx/xmlns:head')
96
- expect(head).not_to be_nil
97
- expect(head.at_xpath("xmlns:meta[@name='dtb:uid']")['content']).to eq("http://example.jp/foobar/")
98
- expect(head.xpath("xmlns:meta[@name='dtb:depth']").size).to be > 0
99
- expect(head.xpath("xmlns:meta[@name='dtb:totalPageCount']").size).to be > 0
100
- expect(head.xpath("xmlns:meta[@name='dtb:maxPageNumber']").size).to be > 0
101
- end
102
-
103
- it "should have correct ncx doctitle" do
104
- doctitle = Nokogiri::XML.parse(@book.ncx_xml).root
105
-
106
- expect(doctitle.xpath('xmlns:docTitle').size).to be > 0
107
- expect(doctitle.at_xpath('xmlns:docTitle/xmlns:text').text).to eq('thetitle')
108
- end
109
-
110
- it "should correct ncx navmap" do
111
- ncx = Nokogiri::XML::parse(@book.ncx_xml).root
112
-
113
- expect(ncx.xpath('xmlns:navMap').size).to be > 0
114
- nav_point = ncx.at_xpath('xmlns:navMap/xmlns:navPoint')
115
- expect(nav_point['id']).to eq('c2_')
116
- expect(nav_point['playOrder']).to eq('1')
117
-
118
- expect(nav_point.at_xpath('xmlns:navLabel/xmlns:text').content).to eq('test chapter')
119
- nav_point.at_xpath('xmlns:content')['src'] == 'foobar2.html'
120
-
121
- end
122
-
123
- it "should create correct opf" do
124
- opf = Nokogiri::XML.parse(@book.opf_xml).root
125
- expect(opf.name).to eq('package')
126
- expect(opf.namespaces['xmlns']).to eq('http://www.idpf.org/2007/opf')
127
- expect(opf['version']).to eq('3.0')
128
- expect(opf['unique-identifier']).to eq('BookId')
129
- end
130
-
131
- it "should have correct metadata in opf" do
132
- opf = Nokogiri::XML.parse(@book.opf_xml).root
133
- metadata = opf.xpath('xmlns:metadata').first
134
- expect(metadata.at_xpath('dc:language', metadata.namespaces).content).to eq('ja')
135
- #TODO: check metadata
136
- end
137
-
138
- it "should have correct manifest and spine in opf" do
139
- opf = Nokogiri::XML.parse(@book.opf_xml).root
140
-
141
- manifest = opf.at_xpath('xmlns:manifest')
142
- expect(manifest.at_xpath('xmlns:item[@id="c1"]')['href']).to eq('text/foobar.xhtml')
143
- expect(manifest.at_xpath('xmlns:item[@id="c1"]')['media-type']).to eq('application/xhtml+xml')
144
-
145
- spine = opf.at_xpath('xmlns:spine')
146
- expect(spine['toc']).to eq('ncx')
147
- expect(spine.at_xpath('xmlns:itemref')['idref']).to eq('c1')
148
- end
149
-
150
- it "should have correct bindings in opf" do
151
- opf = Nokogiri::XML.parse(@book.opf_xml).root
152
- bindings = opf.at_xpath('xmlns:bindings')
153
- expect(bindings.at_xpath('xmlns:mediaType')['handler']).to eq(@item3_id)
154
- expect(bindings.at_xpath('xmlns:mediaType')['media-type']).to eq('application/x-some-media-type')
155
- end
156
-
157
- it "should have correct cover image id" do
158
- item = @book.add_item("img/img.jpg").cover_image
159
-
160
- opf = Nokogiri::XML.parse(@book.opf_xml).root
161
-
162
- metadata = opf.at_xpath('xmlns:metadata')
163
- meta = metadata.at_xpath("xmlns:meta[@name='cover']")
164
- expect(meta['content']).to eq(item.itemid)
165
- end
166
-
167
- it "should generate correct epub" do
168
- epubname = File.join(File.dirname(__FILE__), 'testepub.epub')
169
- @book.generate_epub(epubname)
170
- epubcheck(epubname)
171
- end
172
- it "should generate correct epub with buffer" do
173
- epubname = File.join(File.dirname(__FILE__), 'testepub_buf.epub')
174
- File.open(epubname, 'wb') {
175
- |io|
176
- io.write @book.generate_epub_stream.string
177
- }
178
- epubcheck(epubname)
179
- end
180
-
181
- it "should generate correct epub2.0" do
182
- epubname = File.join(File.dirname(__FILE__), 'testepub2.epub')
183
- @book = GEPUB::Book.new('OEPBS/package.opf', { 'version' => '2.0'} )
184
- @book.title = 'thetitle'
185
- @book.creator = "theauthor"
186
- @book.contributor = "contributors contributors!"
187
- @book.publisher = "thepublisher"
188
- @book.date = "2010-05-05"
189
- @book.identifier = "http://example.jp/foobar/"
190
- @book.language = 'ja'
191
- item1 = @book.add_item('text/foobar.xhtml',id: 'c1')
192
- item1.add_content(StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c1</title></head><body><p>the first page</p></body></html>'))
193
- @book.spine.push(item1)
194
- item2 = @book.add_ordered_item('text/barbar.xhtml',
195
- content: StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title></head><body><p>second page, whith is test chapter.</p></body></html>'),
196
- id: 'c2')
197
- item2.toc_text 'test chapter'
198
- @book.generate_epub(epubname)
199
- epubcheck(epubname)
200
- end
201
- it 'should generate epub with extra file' do
202
- epubname = File.join(File.dirname(__FILE__), 'testepub3.epub')
203
- @book.add_optional_file('META-INF/foobar.xml', StringIO.new('<foo></foo>'))
204
- @book.generate_epub(epubname)
205
- epubcheck(epubname)
206
- end
207
-
208
- it 'should generate valid EPUB when @toc is empty' do
209
- epubname = File.join(File.dirname(__FILE__), 'testepub4.epub')
210
- @book = GEPUB::Book.new('OEPBS/package.opf', { 'version' => '3.0'} )
211
- @book.title = 'thetitle'
212
- @book.creator = "theauthor"
213
- @book.contributor = "contributors contributors!"
214
- @book.publisher = "thepublisher"
215
- @book.date = "2015-05-05"
216
- @book.identifier = "http://example.jp/foobar/"
217
- @book.language = 'ja'
218
- item1 = @book.add_item('text/foobar.xhtml',id: 'c1')
219
- item1.add_content(StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c1</title></head><body><p>the first page</p></body></html>'))
220
- @book.spine.push(item1)
221
- item2 = @book.add_ordered_item('text/barbar.xhtml',
222
- content: StringIO.new('<html xmlns="http://www.w3.org/1999/xhtml"><head><title>c2</title></head><body><p>second page, whith is test chapter.</p></body></html>'),
223
- id: 'c2')
224
- @book.spine.push(item2)
225
- @book.generate_epub(epubname)
226
- epubcheck(epubname)
227
-
228
- end
229
- end
@@ -1,36 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.dirname(__FILE__) + '/spec_helper.rb'
3
- require 'rubygems'
4
- require 'nokogiri'
5
-
6
- describe GEPUB::Manifest do
7
- context 'parse existing opf' do
8
- before do
9
- @manifest = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf').instance_eval{ @manifest }
10
- end
11
-
12
- it 'should be parsed' do
13
- expect(@manifest.item_list.size).to eq(9)
14
- expect(@manifest.item_list['ncx'].href).to eq('toc.ncx')
15
- expect(@manifest.item_list['ncx'].media_type).to eq('application/x-dtbncx+xml')
16
- expect(@manifest.item_list['cover'].href).to eq('cover/cover.xhtml')
17
- expect(@manifest.item_list['cover'].media_type).to eq('application/xhtml+xml')
18
- expect(@manifest.item_list['cover-image'].href).to eq('img/cover.jpg')
19
- expect(@manifest.item_list['cover-image'].media_type).to eq('image/jpeg')
20
- expect(@manifest.item_list['cover-image'].properties[0]).to eq('cover-image')
21
- end
22
- end
23
- context 'generate new opf' do
24
- it 'should generate xml' do
25
- manifest = GEPUB::Manifest.new
26
- manifest.add_item('ncx', 'toc.ncx', 'application/x-dtbncx+xml')
27
- builder = Nokogiri::XML::Builder.new { |xml|
28
- xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
29
- manifest.to_xml(xml)
30
- }
31
- }
32
- xml = Nokogiri::XML::Document.parse(builder.to_xml)
33
- expect(xml.xpath("//xmlns:item[@id='ncx' and @href='toc.ncx' and @media-type='application/x-dtbncx+xml']").size).to eq(1)
34
- end
35
- end
36
- end
@@ -1,219 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.dirname(__FILE__) + '/spec_helper.rb'
3
- require 'rubygems'
4
- require 'nokogiri'
5
-
6
- describe GEPUB::Metadata do
7
- it 'should be initialized' do
8
- metadata = GEPUB::Metadata.new
9
- expect(metadata.ns_prefix(GEPUB::XMLUtil::DC_NS)).to eq('dc')
10
- expect(metadata.ns_prefix(GEPUB::XMLUtil::OPF_NS)).to be_nil
11
- end
12
- it 'should be initialized with version 2.0' do
13
- metadata = GEPUB::Metadata.new('2.0')
14
- expect(metadata.ns_prefix(GEPUB::XMLUtil::DC_NS)).to eq('dc')
15
- expect(metadata.ns_prefix(GEPUB::XMLUtil::OPF_NS)).to eq('opf')
16
- end
17
-
18
- context 'Parse Existing OPF' do
19
- before do
20
- @metadata = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test.opf'), '/package.opf').instance_eval{ @metadata }
21
- end
22
- it 'should parse title' do
23
- expect(@metadata.main_title).to eq('TheTitle')
24
- expect(@metadata.title_list.size).to eq(2)
25
- expect(@metadata.title.to_s).to eq('TheTitle')
26
- end
27
-
28
- it 'should parse main title with not first display-seq' do
29
- metadata = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/test2.opf'), '/package.opf').instance_eval{ @metadata }
30
- expect(metadata.title.to_s).to eq('TheTitle')
31
- end
32
-
33
- it 'should parse title-type' do
34
- expect(@metadata.title_list[0].refiner_list('title-type').size).to eq(1)
35
- expect(@metadata.title_list[0].refiner_list('title-type')[0].content).to eq('main')
36
- expect(@metadata.title_list[1].refiner_list('title-type').size).to eq(1)
37
- expect(@metadata.title_list[1].refiner_list('title-type')[0].content).to eq('collection')
38
- end
39
-
40
- it 'should parse identifier' do
41
- expect(@metadata.identifier_list.size).to eq(2)
42
- expect(@metadata.identifier.to_s).to eq('urn:uuid:1234567890')
43
- expect(@metadata.identifier_list[0].content).to eq('urn:uuid:1234567890')
44
- expect(@metadata.identifier_list[0].refiner('identifier-type').to_s).to eq('uuid')
45
- expect(@metadata.identifier_list[1].content).to eq('http://example.jp/epub/test/url')
46
- expect(@metadata.identifier_list[1].refiner('identifier-type').to_s).to eq('uri')
47
- end
48
-
49
- it 'should parse OPF2.0 meta node' do
50
- expect(@metadata.oldstyle_meta.size).to eq(1)
51
- expect(@metadata.oldstyle_meta[0].name).to eq 'meta'
52
- expect(@metadata.oldstyle_meta[0]['name']).to eq 'cover'
53
- expect(@metadata.oldstyle_meta[0]['content']).to eq 'cover-image'
54
- end
55
- end
56
-
57
- context 'Should parse OPF2.0' do
58
- before do
59
- @metadata = GEPUB::Package.parse_opf(File.open(File.dirname(__FILE__) + '/fixtures/testdata/package_2_0.opf'), '/package.opf').instance_eval{ @metadata }
60
- end
61
- it 'should parse title' do
62
- expect(@metadata.main_title).to eq('thetitle')
63
- expect(@metadata.title_list.size).to eq(1)
64
- end
65
- it 'should parse OPF2.0 meta node' do
66
- expect(@metadata.oldstyle_meta.size).to eq(1)
67
- expect(@metadata.oldstyle_meta[0].name).to eq 'meta'
68
- expect(@metadata.oldstyle_meta[0]['name']).to eq 'cover'
69
- expect(@metadata.oldstyle_meta[0]['content']).to eq 'cover-image'
70
- end
71
- end
72
-
73
- context 'Generate New OPF' do
74
- it 'should write and read identifier' do
75
- metadata = GEPUB::Metadata.new
76
- metadata.add_identifier 'the_set_identifier', 'pub-id'
77
- expect(metadata.identifier.to_s).to eq('the_set_identifier')
78
- expect(metadata.identifier_list[0]['id']).to eq('pub-id')
79
- end
80
-
81
- it 'should write and read identifier with identifier-type' do
82
- metadata = GEPUB::Metadata.new
83
- metadata.add_identifier 'http://example.jp/book/url', 'pub-id', 'uri'
84
- expect(metadata.identifier.to_s).to eq('http://example.jp/book/url')
85
- expect(metadata.identifier_list[0]['id']).to eq('pub-id')
86
- expect(metadata.identifier_list[0].identifier_type.to_s).to eq('uri')
87
- end
88
-
89
- it 'should write and read title' do
90
- metadata = GEPUB::Metadata.new
91
- metadata.add_title('The Main Title')
92
- expect(metadata.title.to_s).to eq('The Main Title')
93
- end
94
-
95
- it 'should write and read title with type' do
96
- metadata = GEPUB::Metadata.new
97
- metadata.add_title('The Main Title', id: 'maintitle', title_type: GEPUB::TITLE_TYPE::MAIN)
98
- expect(metadata.title.to_s).to eq('The Main Title')
99
- expect(metadata.title.title_type.to_s).to eq('main')
100
- end
101
-
102
- it 'should write and read multipletitle with type' do
103
- metadata = GEPUB::Metadata.new
104
- metadata.add_title('The Main Title', id: 'maintitle', title_type: GEPUB::TITLE_TYPE::MAIN)
105
- metadata.add_title('The Book Series', id: 'series', title_type: GEPUB::TITLE_TYPE::COLLECTION).group_position(1)
106
- expect(metadata.title.to_s).to eq('The Main Title')
107
- expect(metadata.title.title_type.to_s).to eq('main')
108
-
109
- expect(metadata.title_list[1].to_s).to eq('The Book Series')
110
- expect(metadata.title_list[1].title_type.to_s).to eq('collection')
111
- expect(metadata.title_list[1].group_position.to_s).to eq('1')
112
- end
113
-
114
- it 'should handle alternate-script metadata of creator, not using method chain' do
115
- metadata = GEPUB::Metadata.new
116
- metadata.add_creator('TheCreator', id: 'author', role: 'aut').display_seq(1).file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
117
- expect(metadata.creator.to_s).to eq('TheCreator')
118
- expect(metadata.creator.to_s('ja')).to eq('作成者')
119
- end
120
-
121
- it 'should handle alternate-script metadata of creator, not using method chain' do
122
- metadata = GEPUB::Metadata.new
123
- m = metadata.add_creator('TheCreator', id: 'author', role: 'aut')
124
- m.display_seq = 1
125
- m.file_as = 'Creator, The'
126
- m.add_alternates({ 'ja-JP' => '作成者' })
127
-
128
- expect(metadata.creator.to_s).to eq('TheCreator')
129
- expect(metadata.creator.to_s('ja')).to eq('作成者')
130
- end
131
-
132
- it 'should detect duplicate id' do
133
- metadata = GEPUB::Metadata.new
134
- metadata.add_creator('TheCreator', id: 'id', role: 'aut')
135
- expect { metadata.add_title('TheTitle', 'id') }.to raise_error(RuntimeError, "id 'id' is already in use.")
136
- end
137
-
138
- it 'should generate empty metadata xml' do
139
- metadata = GEPUB::Metadata.new
140
- builder = Nokogiri::XML::Builder.new { |xml|
141
- xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
142
- metadata.to_xml(xml)
143
- }
144
- }
145
- xml = Nokogiri::XML::Document.parse(builder.to_xml).at_xpath('//xmlns:metadata', { 'xmlns' => GEPUB::XMLUtil::OPF_NS})
146
- expect(xml.namespaces['xmlns:dc']).to eq(GEPUB::XMLUtil::DC_NS)
147
- end
148
-
149
- it 'should handle date with Time object' do
150
- metadata = GEPUB::Metadata.new
151
- a = Time.parse '2012-02-27 20:00:00 UTC'
152
- metadata.add_date(a, 'date')
153
- expect(metadata.date.to_s).to eq('2012-02-27T20:00:00Z')
154
- end
155
-
156
- it 'should handle date with `date=` method and Time object' do
157
- metadata = GEPUB::Metadata.new
158
- a = Time.parse '2012-02-27 20:00:00 UTC'
159
- metadata.date = a
160
- expect(metadata.date.to_s).to eq('2012-02-27T20:00:00Z')
161
- end
162
-
163
- it 'should handle date with Time object by content = ' do
164
- metadata = GEPUB::Metadata.new
165
- a = Time.parse '2012-02-27 20:00:00 UTC'
166
- metadata.add_date('2011-01-01', 'date')
167
- metadata.date.content = a
168
- expect(metadata.date.to_s).to eq('2012-02-27T20:00:00Z')
169
- end
170
-
171
- it 'should handle date with a not W3C-DTF string' do
172
- metadata = GEPUB::Metadata.new
173
- metadata.add_date('2012-02-28 05:00:00 +0900', 'date')
174
- expect(metadata.date.to_s).to eq('2012-02-27T20:00:00Z')
175
- end
176
-
177
- it 'should generate metadata with id xml' do
178
- metadata = GEPUB::Metadata.new
179
- metadata.add_identifier('the_uid', nil)
180
- builder = Nokogiri::XML::Builder.new { |xml|
181
- xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
182
- metadata.to_xml(xml)
183
- }
184
- }
185
- expect(Nokogiri::XML::Document.parse(builder.to_xml).at_xpath('//dc:identifier', metadata.instance_eval {@namespaces}).content).to eq('the_uid')
186
- end
187
-
188
- it 'should generate metadata with creator refiner' do
189
- metadata = GEPUB::Metadata.new
190
- metadata.add_creator('TheCreator', role: 'aut').display_seq(1).file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
191
- builder = Nokogiri::XML::Builder.new { |xml|
192
- xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
193
- metadata.to_xml(xml)
194
- }
195
- }
196
- xml = Nokogiri::XML::Document.parse(builder.to_xml)
197
- ns = metadata.instance_eval { @namespaces }
198
- expect(xml.at_xpath('//dc:creator', ns).content).to eq('TheCreator')
199
- id = xml.at_xpath('//dc:creator', ns)['id']
200
- expect(xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='role']").content).to eq('aut')
201
- expect(xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='display-seq']").content).to eq('1')
202
- expect(xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='file-as']").content).to eq('Creator, The')
203
- expect(xml.at_xpath("//xmlns:meta[@refines='##{id}' and @property='alternate-script' and @xml:lang='ja-JP']").content).to eq('作成者')
204
- end
205
-
206
- it 'should generate metadata with old style meta tag' do
207
- metadata = GEPUB::Metadata.new
208
- metadata.add_creator('TheCreator', role: 'aut').display_seq(1).file_as('Creator, The').add_alternates({ 'ja-JP' => '作成者' })
209
- metadata.add_oldstyle_meta(nil, { 'name' => 'cover', 'content' => 'cover.jpg' })
210
- builder = Nokogiri::XML::Builder.new { |xml|
211
- xml.package('xmlns' => "http://www.idpf.org/2007/opf",'version' => "3.0",'unique-identifier' => "pub-id",'xml:lang' => "ja") {
212
- metadata.to_xml(xml)
213
- }
214
- }
215
- xml = Nokogiri::XML::Document.parse(builder.to_xml)
216
- expect(xml.xpath("//xmlns:meta[@name='cover' and @content='cover.jpg']").size).to eq(1)
217
- end
218
- end
219
- end