ucf 0.5.0 → 0.6.0
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.
- data/Changes.rdoc +5 -0
- data/Rakefile +5 -4
- data/ReadMe.rdoc +8 -1
- data/examples/{create_ucf.rb → create-ucf} +15 -5
- data/examples/ucfinfo +2 -2
- data/examples/{verify_ucf.rb → verify-ucf} +11 -4
- data/lib/ucf.rb +0 -6
- data/lib/ucf/container.rb +22 -433
- data/lib/ucf/meta-inf.rb +9 -5
- data/test/tc_create.rb +4 -5
- data/test/tc_managed_entries.rb +20 -18
- data/test/tc_read.rb +5 -4
- data/test/tc_reserved_names.rb +31 -30
- data/test/ts_ucf.rb +1 -3
- data/ucf.gemspec +8 -14
- data/version.yml +1 -1
- metadata +11 -15
- data/lib/ucf/entries/directory.rb +0 -71
- data/lib/ucf/entries/entry.rb +0 -134
- data/lib/ucf/entries/file.rb +0 -101
- data/lib/ucf/entries/managed.rb +0 -183
- data/lib/ucf/entries/reserved.rb +0 -88
- data/lib/ucf/exceptions.rb +0 -70
data/lib/ucf/meta-inf.rb
CHANGED
@@ -30,12 +30,13 @@
|
|
30
30
|
#
|
31
31
|
# Author: Robert Haines
|
32
32
|
|
33
|
-
|
33
|
+
require 'zip-container'
|
34
|
+
|
34
35
|
module UCF
|
35
36
|
|
36
37
|
# This is a subclass of ManagedDirectory to represent the META-INF directory
|
37
38
|
# in a basic UCF Document.
|
38
|
-
class MetaInf < ManagedDirectory
|
39
|
+
class MetaInf < ZipContainer::ManagedDirectory
|
39
40
|
|
40
41
|
# :call-seq:
|
41
42
|
# new -> MetaInf
|
@@ -43,9 +44,12 @@ module UCF
|
|
43
44
|
# Create a standard META-INF ManagedDirectory.
|
44
45
|
def initialize
|
45
46
|
super("META-INF", false,
|
46
|
-
[ManagedFile.new("container.xml"),
|
47
|
-
ManagedFile.new("
|
48
|
-
ManagedFile.new("
|
47
|
+
[ZipContainer::ManagedFile.new("container.xml"),
|
48
|
+
ZipContainer::ManagedFile.new("manifest.xml"),
|
49
|
+
ZipContainer::ManagedFile.new("metadata.xml"),
|
50
|
+
ZipContainer::ManagedFile.new("signatures.xml"),
|
51
|
+
ZipContainer::ManagedFile.new("encryption.xml"),
|
52
|
+
ZipContainer::ManagedFile.new("rights.xml")])
|
49
53
|
end
|
50
54
|
|
51
55
|
end
|
data/test/tc_create.rb
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#
|
31
31
|
# Author: Robert Haines
|
32
32
|
|
33
|
+
require 'test/unit'
|
33
34
|
require 'tmpdir'
|
34
35
|
require 'ucf'
|
35
36
|
|
@@ -49,7 +50,7 @@ class TestCreation < Test::Unit::TestCase
|
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
|
-
assert_nothing_raised(
|
53
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError, Zip::ZipError) do
|
53
54
|
UCF::Container.verify!(filename)
|
54
55
|
end
|
55
56
|
end
|
@@ -57,8 +58,6 @@ class TestCreation < Test::Unit::TestCase
|
|
57
58
|
|
58
59
|
# Check creation of empty ucf files with a different mimetype.
|
59
60
|
def test_create_mimetype_file
|
60
|
-
mimetype = "application/x-something-really-odd"
|
61
|
-
|
62
61
|
Dir.mktmpdir do |dir|
|
63
62
|
filename = File.join(dir, "test.ucf")
|
64
63
|
|
@@ -71,7 +70,7 @@ class TestCreation < Test::Unit::TestCase
|
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
|
-
assert_nothing_raised(
|
73
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError, Zip::ZipError) do
|
75
74
|
UCF::Container.verify!(filename)
|
76
75
|
end
|
77
76
|
end
|
@@ -114,7 +113,7 @@ class TestCreation < Test::Unit::TestCase
|
|
114
113
|
end
|
115
114
|
end
|
116
115
|
|
117
|
-
assert_nothing_raised(
|
116
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError, Zip::ZipError) do
|
118
117
|
UCF::Container.open(filename) do |ucf|
|
119
118
|
assert(ucf.on_disk?)
|
120
119
|
refute(ucf.in_memory?)
|
data/test/tc_managed_entries.rb
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#
|
31
31
|
# Author: Robert Haines
|
32
32
|
|
33
|
+
require 'test/unit'
|
33
34
|
require 'tmpdir'
|
34
35
|
require 'ucf'
|
35
36
|
|
@@ -40,10 +41,10 @@ class ManagedUCF < UCF::Container
|
|
40
41
|
|
41
42
|
def initialize(filename)
|
42
43
|
super(filename)
|
43
|
-
register_managed_entry(
|
44
|
-
register_managed_entry(
|
45
|
-
register_managed_entry(
|
46
|
-
register_managed_entry(
|
44
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("src", true))
|
45
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("test"))
|
46
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("lib"))
|
47
|
+
register_managed_entry(ZipContainer::ManagedFile.new("index.html", true))
|
47
48
|
end
|
48
49
|
|
49
50
|
end
|
@@ -54,8 +55,8 @@ class ExampleUCF < UCF::Container
|
|
54
55
|
|
55
56
|
def initialize(filename)
|
56
57
|
super(filename)
|
57
|
-
register_managed_entry(
|
58
|
-
register_managed_entry(
|
58
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("dir", true))
|
59
|
+
register_managed_entry(ZipContainer::ManagedFile.new("greeting.txt", true))
|
59
60
|
end
|
60
61
|
|
61
62
|
end
|
@@ -68,7 +69,8 @@ class ExampleUCF2 < UCF::Container
|
|
68
69
|
super(filename)
|
69
70
|
|
70
71
|
valid = Proc.new { |contents| contents.match(/[Hh]ello/) }
|
71
|
-
register_managed_entry(
|
72
|
+
register_managed_entry(ZipContainer::ManagedFile.new("greeting.txt",
|
73
|
+
true, valid))
|
72
74
|
end
|
73
75
|
|
74
76
|
end
|
@@ -79,7 +81,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
79
81
|
def test_fail_verification
|
80
82
|
refute(ManagedUCF.verify($ucf_example))
|
81
83
|
|
82
|
-
assert_raises(
|
84
|
+
assert_raises(ZipContainer::MalformedContainerError) do
|
83
85
|
ManagedUCF.verify!($ucf_example)
|
84
86
|
end
|
85
87
|
end
|
@@ -88,7 +90,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
88
90
|
def test_pass_verification
|
89
91
|
assert(ExampleUCF.verify($ucf_example))
|
90
92
|
|
91
|
-
assert_nothing_raised(
|
93
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
92
94
|
ExampleUCF.verify!($ucf_example)
|
93
95
|
end
|
94
96
|
end
|
@@ -97,7 +99,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
97
99
|
def test_pass_verification_2
|
98
100
|
assert(ExampleUCF2.verify($ucf_example))
|
99
101
|
|
100
|
-
assert_nothing_raised(
|
102
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
101
103
|
ExampleUCF2.verify!($ucf_example)
|
102
104
|
end
|
103
105
|
end
|
@@ -119,7 +121,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
122
|
-
assert_nothing_raised(
|
124
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
123
125
|
UCF::Container.verify!(filename)
|
124
126
|
end
|
125
127
|
end
|
@@ -132,14 +134,14 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
132
134
|
|
133
135
|
assert_nothing_raised do
|
134
136
|
ManagedUCF.create(filename) do |c|
|
135
|
-
assert_raises(
|
137
|
+
assert_raises(ZipContainer::MalformedContainerError) do
|
136
138
|
c.verify!
|
137
139
|
end
|
138
140
|
end
|
139
141
|
end
|
140
142
|
|
141
143
|
refute(ManagedUCF.verify(filename))
|
142
|
-
assert_raises(
|
144
|
+
assert_raises(ZipContainer::MalformedContainerError) do
|
143
145
|
ManagedUCF.verify!(filename)
|
144
146
|
end
|
145
147
|
end
|
@@ -160,7 +162,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
160
162
|
end
|
161
163
|
|
162
164
|
assert(ManagedUCF.verify(filename))
|
163
|
-
assert_nothing_raised(
|
165
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
164
166
|
ManagedUCF.verify!(filename)
|
165
167
|
end
|
166
168
|
end
|
@@ -174,7 +176,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
174
176
|
|
175
177
|
assert_nothing_raised do
|
176
178
|
ExampleUCF2.create(filename) do |c|
|
177
|
-
assert_raises(
|
179
|
+
assert_raises(ZipContainer::MalformedContainerError) do
|
178
180
|
c.verify!
|
179
181
|
end
|
180
182
|
|
@@ -182,7 +184,7 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
182
184
|
f.puts "Goodbye!"
|
183
185
|
end
|
184
186
|
|
185
|
-
assert_raises(
|
187
|
+
assert_raises(ZipContainer::MalformedContainerError) do
|
186
188
|
c.verify!
|
187
189
|
end
|
188
190
|
|
@@ -190,14 +192,14 @@ class TestManagedEntries < Test::Unit::TestCase
|
|
190
192
|
f.puts "Hello, Y'All!"
|
191
193
|
end
|
192
194
|
|
193
|
-
assert_nothing_raised(
|
195
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
194
196
|
c.verify!
|
195
197
|
end
|
196
198
|
end
|
197
199
|
end
|
198
200
|
|
199
201
|
assert(ExampleUCF2.verify(filename))
|
200
|
-
assert_nothing_raised(
|
202
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
201
203
|
ExampleUCF2.verify!(filename)
|
202
204
|
end
|
203
205
|
end
|
data/test/tc_read.rb
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#
|
31
31
|
# Author: Robert Haines
|
32
32
|
|
33
|
+
require 'test/unit'
|
33
34
|
require 'ucf'
|
34
35
|
|
35
36
|
class TestRead < Test::Unit::TestCase
|
@@ -45,7 +46,7 @@ class TestRead < Test::Unit::TestCase
|
|
45
46
|
|
46
47
|
# Check that the empty ucf file does verify.
|
47
48
|
def test_verify_empty_ucf
|
48
|
-
assert_nothing_raised(
|
49
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError, Zip::ZipError) do
|
49
50
|
UCF::Container.verify!($ucf_empty)
|
50
51
|
end
|
51
52
|
|
@@ -54,7 +55,7 @@ class TestRead < Test::Unit::TestCase
|
|
54
55
|
|
55
56
|
# Check that the empty zip file does not verify.
|
56
57
|
def test_verify_empty_zip
|
57
|
-
assert_raise(
|
58
|
+
assert_raise(ZipContainer::MalformedContainerError) do
|
58
59
|
UCF::Container.verify!($zip_empty)
|
59
60
|
end
|
60
61
|
|
@@ -63,7 +64,7 @@ class TestRead < Test::Unit::TestCase
|
|
63
64
|
|
64
65
|
# Check that a compressed mimetype file is detected.
|
65
66
|
def test_verify_compressed_mimetype
|
66
|
-
assert_raise(
|
67
|
+
assert_raise(ZipContainer::MalformedContainerError) do
|
67
68
|
UCF::Container.verify!($ucf_compressed_mimetype)
|
68
69
|
end
|
69
70
|
|
@@ -81,7 +82,7 @@ class TestRead < Test::Unit::TestCase
|
|
81
82
|
|
82
83
|
# Check reading files out of a ucf file and make sure we don't change it.
|
83
84
|
def test_read_files_from_ucf
|
84
|
-
assert_nothing_raised(
|
85
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError, Zip::ZipError) do
|
85
86
|
UCF::Container.open($ucf_example) do |ucf|
|
86
87
|
assert(ucf.on_disk?)
|
87
88
|
refute(ucf.in_memory?)
|
data/test/tc_reserved_names.rb
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
#
|
31
31
|
# Author: Robert Haines
|
32
32
|
|
33
|
+
require 'test/unit'
|
33
34
|
require 'ucf'
|
34
35
|
|
35
36
|
# A class to test the overriding of reserved and managed names.
|
@@ -39,10 +40,10 @@ class NewUCF < UCF::Container
|
|
39
40
|
|
40
41
|
def initialize(filename)
|
41
42
|
super(filename)
|
42
|
-
register_managed_entry(
|
43
|
-
register_managed_entry(
|
44
|
-
register_managed_entry(
|
45
|
-
register_managed_entry(
|
43
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("src"))
|
44
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("test"))
|
45
|
+
register_managed_entry(ZipContainer::ManagedDirectory.new("lib"))
|
46
|
+
register_managed_entry(ZipContainer::ManagedFile.new("index.html"))
|
46
47
|
|
47
48
|
register_reserved_name("reserved_dir")
|
48
49
|
end
|
@@ -55,7 +56,7 @@ class TestReservedNames < Test::Unit::TestCase
|
|
55
56
|
def test_verify_reserved_name
|
56
57
|
assert(NewUCF.verify($ucf_example))
|
57
58
|
|
58
|
-
assert_nothing_raised(
|
59
|
+
assert_nothing_raised(ZipContainer::MalformedContainerError) do
|
59
60
|
NewUCF.verify!($ucf_example)
|
60
61
|
end
|
61
62
|
end
|
@@ -178,7 +179,7 @@ class TestReservedNames < Test::Unit::TestCase
|
|
178
179
|
# name.
|
179
180
|
def test_add_reserved
|
180
181
|
UCF::Container.open($ucf_empty) do |ucf|
|
181
|
-
assert_raises(
|
182
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
182
183
|
ucf.add("META-INF", $zip_empty)
|
183
184
|
end
|
184
185
|
end
|
@@ -188,19 +189,19 @@ class TestReservedNames < Test::Unit::TestCase
|
|
188
189
|
# name to a subclassed container.
|
189
190
|
def test_subclass_add_reserved
|
190
191
|
NewUCF.open($ucf_empty) do |ucf|
|
191
|
-
assert_raises(
|
192
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
192
193
|
ucf.add("mimetype", $zip_empty)
|
193
194
|
end
|
194
195
|
|
195
|
-
assert_raises(
|
196
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
196
197
|
ucf.add("reserved_dir", $zip_empty)
|
197
198
|
end
|
198
199
|
|
199
|
-
assert_raises(
|
200
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
200
201
|
ucf.add("MimeType", $zip_empty)
|
201
202
|
end
|
202
203
|
|
203
|
-
assert_raises(
|
204
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
204
205
|
ucf.add("Reserved_Dir", $zip_empty)
|
205
206
|
end
|
206
207
|
end
|
@@ -230,11 +231,11 @@ class TestReservedNames < Test::Unit::TestCase
|
|
230
231
|
# reserved name.
|
231
232
|
def test_mkdir_reserved
|
232
233
|
UCF::Container.open($ucf_empty) do |ucf|
|
233
|
-
assert_raises(
|
234
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
234
235
|
ucf.mkdir("mimetype")
|
235
236
|
end
|
236
237
|
|
237
|
-
assert_raises(
|
238
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
238
239
|
ucf.mkdir("META-INF/container.xml")
|
239
240
|
end
|
240
241
|
end
|
@@ -244,23 +245,23 @@ class TestReservedNames < Test::Unit::TestCase
|
|
244
245
|
# reserved name in a subclassed container.
|
245
246
|
def test_subclass_mkdir_reserved
|
246
247
|
NewUCF.open($ucf_empty) do |ucf|
|
247
|
-
assert_raises(
|
248
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
248
249
|
ucf.mkdir("mimetype")
|
249
250
|
end
|
250
251
|
|
251
|
-
assert_raises(
|
252
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
252
253
|
ucf.mkdir("index.html")
|
253
254
|
end
|
254
255
|
|
255
|
-
assert_raises(
|
256
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
256
257
|
ucf.mkdir("reserved_dir")
|
257
258
|
end
|
258
259
|
|
259
|
-
assert_raises(
|
260
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
260
261
|
ucf.mkdir("Reserved_Dir")
|
261
262
|
end
|
262
263
|
|
263
|
-
assert_raises(
|
264
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
264
265
|
ucf.mkdir("META-INF/container.xml")
|
265
266
|
end
|
266
267
|
end
|
@@ -269,7 +270,7 @@ class TestReservedNames < Test::Unit::TestCase
|
|
269
270
|
# Check that a file cannot be renamed to one of the reserved names.
|
270
271
|
def test_rename_to_reserved
|
271
272
|
UCF::Container.open($ucf_example) do |ucf|
|
272
|
-
assert_raises(
|
273
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
273
274
|
ucf.rename("dir/code.rb", "mimetype")
|
274
275
|
end
|
275
276
|
end
|
@@ -279,11 +280,11 @@ class TestReservedNames < Test::Unit::TestCase
|
|
279
280
|
# subclassed container.
|
280
281
|
def test_subclass_rename_to_reserved
|
281
282
|
NewUCF.open($ucf_example) do |ucf|
|
282
|
-
assert_raises(
|
283
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
283
284
|
ucf.rename("dir/code.rb", "mimetype")
|
284
285
|
end
|
285
286
|
|
286
|
-
assert_raises(
|
287
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
287
288
|
ucf.rename("dir", "reserved_dir")
|
288
289
|
end
|
289
290
|
end
|
@@ -293,19 +294,19 @@ class TestReservedNames < Test::Unit::TestCase
|
|
293
294
|
# names.
|
294
295
|
def test_file_dir_ops_reserved
|
295
296
|
UCF::Container.open($ucf_empty) do |ucf|
|
296
|
-
assert_raises(
|
297
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
297
298
|
ucf.file.open("META-INF", "w") do |f|
|
298
299
|
f.puts "TESTING"
|
299
300
|
end
|
300
301
|
end
|
301
302
|
|
302
|
-
assert_nothing_raised(
|
303
|
+
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
303
304
|
ucf.file.open("mimetype") do |f|
|
304
305
|
assert_equal("application/epub+zip", f.read)
|
305
306
|
end
|
306
307
|
end
|
307
308
|
|
308
|
-
assert_nothing_raised(
|
309
|
+
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
309
310
|
ucf.file.delete("mimetype")
|
310
311
|
assert(ucf.file.exists?("mimetype"))
|
311
312
|
end
|
@@ -316,38 +317,38 @@ class TestReservedNames < Test::Unit::TestCase
|
|
316
317
|
# subclassed container.
|
317
318
|
def test_subclass_file_dir_ops_reserved
|
318
319
|
NewUCF.open($ucf_empty) do |ucf|
|
319
|
-
assert_raises(
|
320
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
320
321
|
ucf.file.open("META-INF", "w") do |f|
|
321
322
|
f.puts "TESTING"
|
322
323
|
end
|
323
324
|
end
|
324
325
|
|
325
|
-
assert_raises(
|
326
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
326
327
|
ucf.file.open("TEST", "w") do |f|
|
327
328
|
f.puts "TESTING"
|
328
329
|
end
|
329
330
|
end
|
330
331
|
|
331
|
-
assert_nothing_raised(
|
332
|
+
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
332
333
|
ucf.file.open("mimetype") do |f|
|
333
334
|
assert_equal("application/epub+zip", f.read)
|
334
335
|
end
|
335
336
|
end
|
336
337
|
|
337
|
-
assert_nothing_raised(
|
338
|
+
assert_nothing_raised(ZipContainer::ReservedNameClashError) do
|
338
339
|
ucf.file.delete("mimetype")
|
339
340
|
assert(ucf.file.exists?("mimetype"))
|
340
341
|
end
|
341
342
|
|
342
|
-
assert_raises(
|
343
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
343
344
|
ucf.dir.mkdir("index.html")
|
344
345
|
end
|
345
346
|
|
346
|
-
assert_raises(
|
347
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
347
348
|
ucf.dir.mkdir("reserved_dir")
|
348
349
|
end
|
349
350
|
|
350
|
-
assert_raises(
|
351
|
+
assert_raises(ZipContainer::ReservedNameClashError) do
|
351
352
|
ucf.dir.mkdir("Reserved_Dir")
|
352
353
|
end
|
353
354
|
end
|