seven_zip_ruby 1.0.0-x64-mingw32 → 1.1.0-x64-mingw32

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 333a9e5d4a3ba9d029a31097890385421b26ad6a
4
- data.tar.gz: 88079675cb2082646fd404de167d8f81a4a02f28
3
+ metadata.gz: c6bed3467dce41b8cfaa3806096bf6b2f4a3b5ae
4
+ data.tar.gz: d7daca75c57027da0f9b4f1b164beaff81efdc07
5
5
  SHA512:
6
- metadata.gz: 679357fdb1bd67992b018e59f2da39aec1fce0cab80de6415a67fa7b4d3a6d5dd57792e3825b9c9319e05b14478f1024046b90c56e0b831fde6ec5d0b35895b6
7
- data.tar.gz: 3562b6fc59348f8a8ed4808c6ca37e9b1aa40aa62544188dc31ee7c59d4552242289bbd5304f4a2b2c6875f91f006fd7d1cdf9257833baa7e39237c495c4cd4d
6
+ metadata.gz: 7fc2297a302e79898972e45208afee9edadfec80601755f15497c4d60b61aba88668bf8bc09d44ed8dac0d4d31435fa5fd895f97cc47fc35102f49552aacb28b
7
+ data.tar.gz: 253b962d9aeacbebe4e1919fee7dbf8334671b6229370a1ba03b00843a2a33a0f94ef0c93a75b0a1f87f059ab6b902fd6867cca90a11107a2c4f038f7d2c3024
data/README.md CHANGED
@@ -12,12 +12,8 @@ This extension calls the native library, 7z.dll or 7z.so, internally and it is i
12
12
 
13
13
  ## Examples
14
14
 
15
- **This is a beta version.**
16
- The interfaces may be changed.
17
-
18
- If you have any comments about interface API, let me know please.
19
-
20
15
  ### Extract archive
16
+
21
17
  ```ruby
22
18
  File.open("filename.7z", "rb") do |file|
23
19
  SevenZipRuby::Reader.open(file) do |szr|
@@ -27,6 +23,7 @@ end
27
23
  ```
28
24
 
29
25
  You can also use handy method.
26
+
30
27
  ```ruby
31
28
  File.open("filename.7z", "rb") do |file|
32
29
  SevenZipRuby::Reader.extract_all(file, "path_to_dir")
@@ -34,6 +31,7 @@ end
34
31
  ```
35
32
 
36
33
  ### Show entries in archive
34
+
37
35
  ```ruby
38
36
  File.open("filename.7z", "rb") do |file|
39
37
  SevenZipRuby::Reader.open(file) do |szr|
@@ -45,6 +43,7 @@ end
45
43
  ```
46
44
 
47
45
  ### Extract encrypted archive
46
+
48
47
  ```ruby
49
48
  File.open("filename.7z", "rb") do |file|
50
49
  SevenZipRuby::Reader.open(file, { password: "Password String" }) do |szr|
@@ -53,6 +52,7 @@ File.open("filename.7z", "rb") do |file|
53
52
  end
54
53
  ```
55
54
  or
55
+
56
56
  ```ruby
57
57
  File.open("filename.7z", "rb") do |file|
58
58
  SevenZipRuby::Reader.extract_all(file, "path_to_dir", { password: "Password String" })
@@ -61,6 +61,7 @@ end
61
61
 
62
62
 
63
63
  ### Verify archive
64
+
64
65
  ```ruby
65
66
  File.open("filename.7z", "rb") do |file|
66
67
  SevenZipRuby::Reader.verify(file)
@@ -69,6 +70,7 @@ end
69
70
  ```
70
71
 
71
72
  ### Compress files
73
+
72
74
  ```ruby
73
75
  File.open("filename.7z", "wb") do |file|
74
76
  SevenZipRuby::Writer.open(file) do |szr|
@@ -77,6 +79,7 @@ File.open("filename.7z", "wb") do |file|
77
79
  end
78
80
  ```
79
81
  or
82
+
80
83
  ```ruby
81
84
  File.open("filename.7z", "wb") do |file|
82
85
  SevenZipRuby::Writer.add_directory(file, "dir")
@@ -118,10 +121,11 @@ File.open("filename.7z", "rb") do |file|
118
121
  end
119
122
  p data
120
123
  # => File content is shown.
124
+ ```
121
125
 
122
126
  ### Create archive manually
123
127
 
124
- ```
128
+ ```ruby
125
129
  File.open("filename.7z", "rb") do |file|
126
130
  SevenZipRuby::Writer.open(file) do |szr|
127
131
  szr.add_file "entry1.txt"
@@ -174,3 +178,10 @@ p(Time.now - start)
174
178
  ## License
175
179
  LGPL and unRAR license. Please refer to LICENSE.txt.
176
180
 
181
+ ## Releases
182
+
183
+ * 1.1.0
184
+ Raise error when wrong password is specified.
185
+ * 1.0.0
186
+ Initial release.
187
+
@@ -3,5 +3,8 @@
3
3
  module SevenZipRuby
4
4
  class InvalidOperation < StandardError
5
5
  end
6
+
7
+ class InvalidArchive < StandardError
8
+ end
6
9
  end
7
10
 
@@ -1,11 +1,100 @@
1
1
  require("stringio")
2
2
 
3
3
  module SevenZipRuby
4
+
5
+ # SevenZipReader reads 7zip archive and extract it.
6
+ #
7
+ # == Examples
8
+ # === Get archive information
9
+ # # Archive property
10
+ # File.open("filename.7z", "rb") do |file|
11
+ # SevenZipRuby::Reader.open(file) do |szr|
12
+ # info = szr.archive_property # Return ArchiveInfo instance.
13
+ # end
14
+ # end
15
+ #
16
+ # # Entry information
17
+ # File.open("filename.7z", "rb") do |file|
18
+ # SevenZipRuby::Reader.open(file) do |szr|
19
+ # entries = szr.entries
20
+ # end
21
+ # end
22
+ #
23
+ # === Extract 7zip archive.
24
+ # # Extract archive
25
+ # File.open("filename.7z", "rb") do |file|
26
+ # SevenZipRuby::Reader.open(file) do |szr|
27
+ # szr.extract(:all, "path_to_dir")
28
+ # end
29
+ # end
30
+ #
31
+ # # Extract encrypted archive
32
+ # File.open("filename.7z", "rb") do |file|
33
+ # SevenZipRuby::Reader.open(file, password: "Password String") do |szr|
34
+ # szr.extract(:all, "path_to_dir")
35
+ # end
36
+ # end
37
+ #
38
+ # # Extract only small files
39
+ # File.open("filename.7z", "rb") do |file|
40
+ # SevenZipRuby::Reader.open(file) do |szr|
41
+ # small_files = szr.entries.select{ |i| i.file? && i.size < 1024 }
42
+ # szr.extract(small_files, "path_to_dir")
43
+ # end
44
+ # end
45
+ #
46
+ # # Extract archive on memory
47
+ # archive_data = "....."
48
+ # stream = StringIO.new(archive_data)
49
+ # SevenZipRuby::Reader.open(stream) do |szr|
50
+ # entry_data = szr.extract_data(:all)
51
+ # # => [ "data", ... ]
52
+ # end
53
+ #
54
+ # === Verify archive
55
+ # File.open("filename.7z", "rb") do |file|
56
+ # SevenZipRuby::Reader.verify(file)
57
+ # # => true/false
58
+ # end
4
59
  class SevenZipReader
5
60
  class << self
6
- def open(*args, &block)
61
+ # Open 7zip archive to read.
62
+ #
63
+ # ==== Args
64
+ # +stream+ :: Input stream to read 7zip archive. <tt>stream.seek</tt> and <tt>stream.read</tt> are needed.
65
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
66
+ #
67
+ # ==== Examples
68
+ # # Open archive
69
+ # File.open("filename.7z", "rb") do |file|
70
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
71
+ # # Read and extract archive.
72
+ # end
73
+ # end
74
+ #
75
+ # # Open encrypted archive
76
+ # File.open("filename.7z", "rb") do |file|
77
+ # SevenZipRuby::SevenZipReader.open(file, password: "PasswordOfArchive") do |szr|
78
+ # # Read and extract archive.
79
+ # end
80
+ # end
81
+ #
82
+ # # Open without block.
83
+ # File.open("filename.7z", "rb") do |file|
84
+ # szr = SevenZipRuby::SevenZipReader.open(file)
85
+ # # Read and extract archive.
86
+ # szr.close
87
+ # end
88
+ #
89
+ # # Open archive on memory.
90
+ # archive_data = "....."
91
+ # stream = StringIO.new(archive_data)
92
+ # SevenZipRuby::Reader.open(stream) do |szr|
93
+ # szr.extract(:all, "path_to_dir")
94
+ # end
95
+ def open(stream, param = {}, &block) # :yield: szr
7
96
  szr = self.new
8
- szr.open(*args)
97
+ szr.open(stream, param)
9
98
  if (block)
10
99
  block.call(szr)
11
100
  szr.close
@@ -14,6 +103,26 @@ module SevenZipRuby
14
103
  end
15
104
  end
16
105
 
106
+ # Open and extract 7zip archive.
107
+ #
108
+ # ==== Args
109
+ # +stream+ :: Input stream to read 7zip archive. <tt>stream.seek</tt> and <tt>stream.read</tt> are needed, such as <tt>File</tt> and <tt>StringIO</tt>.
110
+ # +index+ :: Index of the entry to extract. Integer or Array of Integer can be specified.
111
+ # +dir+ :: Directory to extract the archive to.
112
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
113
+ #
114
+ # ==== Examples
115
+ # File.open("filename.7z", "rb") do |file|
116
+ # SevenZipRuby::SevenZipReader.extract(file, 1, "path_to_dir")
117
+ # end
118
+ #
119
+ # File.open("filename.7z", "rb") do |file|
120
+ # SevenZipRuby::SevenZipReader.extract(file, [1, 2, 4], "path_to_dir", password: "PasswordOfArchive")
121
+ # end
122
+ #
123
+ # File.open("filename.7z", "rb") do |file|
124
+ # SevenZipRuby::SevenZipReader.extract(file, :all, "path_to_dir")
125
+ # end
17
126
  def extract(stream, index, dir = ".", param = {})
18
127
  password = { password: param.delete(:password) }
19
128
  self.open(stream, password) do |szr|
@@ -21,6 +130,17 @@ module SevenZipRuby
21
130
  end
22
131
  end
23
132
 
133
+ # Open and extract 7zip archive.
134
+ #
135
+ # ==== Args
136
+ # +stream+ :: Input stream to read 7zip archive. <tt>stream.seek</tt> and <tt>stream.read</tt> are needed.
137
+ # +dir+ :: Directory to extract the archive to.
138
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
139
+ #
140
+ # ==== Examples
141
+ # File.open("filename.7z", "rb") do |file|
142
+ # SevenZipRuby::SevenZipReader.extract_all(file, "path_to_dir")
143
+ # end
24
144
  def extract_all(stream, dir = ".", param = {})
25
145
  password = { password: param.delete(:password) }
26
146
  self.open(stream, password) do |szr|
@@ -28,14 +148,38 @@ module SevenZipRuby
28
148
  end
29
149
  end
30
150
 
31
- def verify(*args)
32
- szr = self.open(*args)
151
+ # Open and verify 7zip archive.
152
+ #
153
+ # ==== Args
154
+ # +stream+ :: Input stream to read 7zip archive. <tt>stream.seek</tt> and <tt>stream.read</tt> are needed.
155
+ # +opt+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
156
+ #
157
+ # ==== Examples
158
+ # File.open("filename.7z", "rb") do |file|
159
+ # ret = SevenZipRuby::SevenZipReader.verify(file)
160
+ # # => true/false
161
+ # end
162
+ def verify(stream, opt = {})
163
+ szr = self.open(stream, opt)
33
164
  ret = szr.verify
34
165
  szr.close
35
166
  return ret
36
167
  end
37
168
  end
38
169
 
170
+ # Open 7zip archive.
171
+ #
172
+ # ==== Args
173
+ # +stream+ :: Input stream to read 7zip archive. <tt>stream.seek</tt> and <tt>stream.read</tt> are needed.
174
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
175
+ #
176
+ # ==== Examples
177
+ # File.open("filename.7z", "rb") do |file|
178
+ # szr = SevenZipRuby::SevenZipReader.new
179
+ # szr.open(file)
180
+ # # ...
181
+ # szr.close
182
+ # end
39
183
  def open(stream, param = {})
40
184
  param[:password] = param[:password].to_s if (param[:password])
41
185
  stream.set_encoding(Encoding::ASCII_8BIT)
@@ -43,61 +187,18 @@ module SevenZipRuby
43
187
  return self
44
188
  end
45
189
 
46
-
47
- def file_proc(base_dir)
48
- base_dir = base_dir.to_s
49
- return Proc.new do |type, arg|
50
- case(type)
51
- when :stream
52
- ret = nil
53
- if (arg.anti?)
54
- arg.path.rmtree if (arg.path.exist?)
55
- elsif (arg.file?)
56
- path = arg.path.expand_path(base_dir)
57
- path.parent.mkpath
58
- ret = File.open(path, "wb")
59
- else
60
- path = arg.path.expand_path(base_dir)
61
- path.mkpath
62
- set_file_attribute(path.to_s, arg.attrib) if (arg.attrib)
63
- path.utime(arg.atime || path.atime, arg.mtime || path.mtime)
64
- end
65
- next ret
66
-
67
- when :result
68
- arg[:stream].close
69
- unless (arg[:info].anti?)
70
- path = arg[:info].path.expand_path(base_dir)
71
- set_file_attribute(path.to_s, arg[:info].attrib) if (arg[:info].attrib)
72
- path.utime(arg[:info].atime || path.atime, arg[:info].mtime || path.mtime)
73
- end
74
- end
75
- end
76
- end
77
- private :file_proc
78
-
79
- def data_proc(output, idx_prj)
80
- return Proc.new do |type, arg|
81
- case(type)
82
- when :stream
83
- ret = (arg.has_data? ? StringIO.new("".b) : nil)
84
- unless (arg.has_data?)
85
- output[idx_prj[arg.index]] = nil
86
- end
87
- next ret
88
-
89
- when :result
90
- arg[:stream].close
91
- if (arg[:info].has_data?)
92
- output[idx_prj[arg[:info].index]] = arg[:stream].string
93
- end
94
-
95
- end
96
- end
97
- end
98
- private :data_proc
99
-
100
-
190
+ # Verify 7zip archive.
191
+ #
192
+ # ==== Args
193
+ # none
194
+ #
195
+ # ==== Examples
196
+ # File.open("filename.7z", "rb") do |file|
197
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
198
+ # ret = szr.verify
199
+ # # => true/false
200
+ # end
201
+ # end
101
202
  def test
102
203
  begin
103
204
  return test_all_impl(nil)
@@ -107,6 +208,18 @@ module SevenZipRuby
107
208
  end
108
209
  alias verify test
109
210
 
211
+ # Verify 7zip archive and return the result of each entry.
212
+ #
213
+ # ==== Args
214
+ # none
215
+ #
216
+ # ==== Examples
217
+ # File.open("filename.7z", "rb") do |file|
218
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
219
+ # ret = szr.verify_detail
220
+ # # => [ true, :DataError, :DataError, ... ]
221
+ # end
222
+ # end
110
223
  def verify_detail
111
224
  begin
112
225
  return test_all_impl(true)
@@ -115,6 +228,24 @@ module SevenZipRuby
115
228
  end
116
229
  end
117
230
 
231
+ # Extract some entries of 7zip archive to local directory.
232
+ #
233
+ # ==== Args
234
+ # +index+ :: Index of the entry to extract. Integer or Array of Integer can be specified.
235
+ # +dir+ :: Directory to extract the archive to.
236
+ #
237
+ # ==== Examples
238
+ # File.open("filename.7z", "rb") do |file|
239
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
240
+ # szr.extract([ 1, 2, 4 ], "path_to_dir")
241
+ # end
242
+ # end
243
+ #
244
+ # File.open("filename.7z", "rb") do |file|
245
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
246
+ # szr.extract(:all, "path_to_dir")
247
+ # end
248
+ # end
118
249
  def extract(index, dir = ".")
119
250
  path = File.expand_path(dir)
120
251
  case(index)
@@ -129,14 +260,62 @@ module SevenZipRuby
129
260
  end
130
261
  end
131
262
 
263
+ # Extract all entries of 7zip archive to local directory.
264
+ #
265
+ # ==== Args
266
+ # +dir+ :: Directory to extract the archive to.
267
+ #
268
+ # ==== Examples
269
+ # File.open("filename.7z", "rb") do |file|
270
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
271
+ # szr.extract_all("path_to_dir")
272
+ # end
273
+ # end
132
274
  def extract_all(dir = ".")
133
275
  extract_all_impl(file_proc(File.expand_path(dir)))
134
276
  end
135
277
 
136
- def extract_if(dir = ".", &block)
278
+ # Extract entires of 7zip archive to local directory based on the block return value.
279
+ #
280
+ # ==== Args
281
+ # +dir+ :: Directory to extract the archive to.
282
+ #
283
+ # ==== Examples
284
+ # # Extract files whose size is less than 1024.
285
+ # File.open("filename.7z", "rb") do |file|
286
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
287
+ # szr.extract_if("path_to_dir") do |entry|
288
+ # next entry.size < 1024
289
+ # end
290
+ # end
291
+ # end
292
+ def extract_if(dir = ".", &block) # :yield: entry_info
137
293
  extract(entries.select(&block).map(&:index), dir)
138
294
  end
139
295
 
296
+ # Extract some entries of 7zip archive and return the extracted data.
297
+ #
298
+ # ==== Args
299
+ # +index+ :: Index of the entry to extract. :all, Integer or Array of Integer can be specified.
300
+ #
301
+ # ==== Examples
302
+ # File.open("filename.7z", "rb") do |file|
303
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
304
+ # small_entries = szr.entries.select{ |i| i.size < 1024 }
305
+ #
306
+ # data_list = szr.extract_data(small_entries)
307
+ # # => [ "file contents1", "file contents2", ... ]
308
+ # end
309
+ # end
310
+ #
311
+ # File.open("filename.7z", "rb") do |file|
312
+ # SevenZipRuby::SevenZipReader.open(file) do |szr|
313
+ # largest_entry = szr.entries.max_by{ |i| i.file? ? i.size : 0 }
314
+ #
315
+ # data_list = szr.extract_data(largest_entry)
316
+ # # => "file contents..."
317
+ # end
318
+ # end
140
319
  def extract_data(index)
141
320
  case(index)
142
321
  when :all
@@ -173,8 +352,67 @@ module SevenZipRuby
173
352
 
174
353
  end
175
354
  end
355
+
356
+
357
+ def file_proc(base_dir) # :nodoc:
358
+ base_dir = base_dir.to_s
359
+ return Proc.new do |type, arg|
360
+ case(type)
361
+ when :stream
362
+ ret = nil
363
+ if (arg.anti?)
364
+ arg.path.rmtree if (arg.path.exist?)
365
+ elsif (arg.file?)
366
+ path = arg.path.expand_path(base_dir)
367
+ path.parent.mkpath
368
+ ret = File.open(path, "wb")
369
+ else
370
+ path = arg.path.expand_path(base_dir)
371
+ path.mkpath
372
+ set_file_attribute(path.to_s, arg.attrib) if (arg.attrib)
373
+ path.utime(arg.atime || path.atime, arg.mtime || path.mtime)
374
+ end
375
+ next ret
376
+
377
+ when :result
378
+ arg[:stream].close
379
+ raise InvalidArchive.new("Corrupted archive or invalid password") unless (arg[:success])
380
+
381
+ unless (arg[:info].anti?)
382
+ path = arg[:info].path.expand_path(base_dir)
383
+ set_file_attribute(path.to_s, arg[:info].attrib) if (arg[:info].attrib)
384
+ path.utime(arg[:info].atime || path.atime, arg[:info].mtime || path.mtime)
385
+ end
386
+ end
387
+ end
388
+ end
389
+ private :file_proc
390
+
391
+ def data_proc(output, idx_prj) # :nodoc:
392
+ return Proc.new do |type, arg|
393
+ case(type)
394
+ when :stream
395
+ ret = (arg.has_data? ? StringIO.new("".b) : nil)
396
+ unless (arg.has_data?)
397
+ output[idx_prj[arg.index]] = nil
398
+ end
399
+ next ret
400
+
401
+ when :result
402
+ arg[:stream].close
403
+ raise InvalidArchive.new("Corrupted archive or invalid password") unless (arg[:success])
404
+
405
+ if (arg[:info].has_data?)
406
+ output[idx_prj[arg[:info].index]] = arg[:stream].string
407
+ end
408
+
409
+ end
410
+ end
411
+ end
412
+ private :data_proc
176
413
  end
177
414
 
178
415
 
416
+ # +Reader+ is an alias of +SevenZipReader+.
179
417
  Reader = SevenZipReader
180
418
  end
@@ -1,11 +1,77 @@
1
1
  require("stringio")
2
2
 
3
3
  module SevenZipRuby
4
+
5
+ # SevenZipWriter creates 7zip archive.
6
+ #
7
+ # == Properties
8
+ # +method+ :: Compression method. "LZMA", "LZMA2", "PPMd", "BZIP2", "DEFLATE" or "COPY". Default value is "LZMA".
9
+ # +level+ :: Compression level. 0, 1, 3, 5, 7 or 9. Default value is 5.
10
+ # +solid+ :: Solid compression. <tt>true</tt> or <tt>false</tt>. Default value is <tt>true</tt>.
11
+ # +header_compression+ :: Header compression. <tt>true</tt> or <tt>false</tt>. Default value is <tt>true</tt>.
12
+ # +header_encryption+ :: Header encryption. <tt>true</tt> or <tt>false</tt>. Default value is <tt>false</tt>.
13
+ # +multi_threading+ :: Multi threading. <tt>true</tt> or <tt>false</tt>. Default value is <tt>true</tt>.
14
+ #
15
+ # == Examples
16
+ # === Compress files
17
+ # # Compress files
18
+ # File.open("filename.7z", "wb") do |file|
19
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
20
+ # szw.add_directory("test_dir")
21
+ # szw.add_file("test.txt")
22
+ # end
23
+ # end
24
+ #
25
+ # stream = StringIO.new("")
26
+ # SevenZipRuby::SevenZipWriter.open(stream) do |szw|
27
+ # szw.add_file("test.txt")
28
+ # szw.add_data(data, "test.bin")
29
+ # end
30
+ # # p stream.string
31
+ #
32
+ # === Set various properties
33
+ # File.open("filename.7z", "wb") do |file|
34
+ # SevenZipRuby::SevenZipWriter.open(file, password: "Password") do |szw|
35
+ # szw.method = "LZMA"
36
+ # szw.level = 9
37
+ # szw.solid = false
38
+ # szw.header_compression = false
39
+ # szw.header_encryption = true
40
+ # szw.multi_threading = false
41
+ #
42
+ # szw.add_directory("test_dir")
43
+ # end
44
+ # end
4
45
  class SevenZipWriter
46
+ # Encoding used for path string in 7zip archive.
5
47
  PATH_ENCODING = Encoding::UTF_8
6
48
 
7
49
  class << self
8
- def open(stream, param = {}, &block)
50
+ # Open 7zip archive to write.
51
+ #
52
+ # ==== Args
53
+ # +stream+ :: Output stream to write 7zip archive. <tt>stream.write</tt> is needed.
54
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
55
+ #
56
+ # ==== Examples
57
+ # # Open archive
58
+ # File.open("filename.7z", "wb") do |file|
59
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
60
+ # # Create archive.
61
+ # # ...
62
+ # # You don't have to call szw.compress. Of cource, you may call it.
63
+ # # szw.compress
64
+ # end
65
+ # end
66
+ #
67
+ # # Open without block.
68
+ # File.open("filename.7z", "wb") do |file|
69
+ # szw = SevenZipRuby::SevenZipWriter.open(file)
70
+ # # Create archive.
71
+ # szw.compress # Compress must be called in this case.
72
+ # szw.close
73
+ # end
74
+ def open(stream, param = {}, &block) # :yield: szw
9
75
  szw = self.new
10
76
  szw.open(stream, param)
11
77
  if (block)
@@ -17,14 +83,38 @@ module SevenZipRuby
17
83
  end
18
84
  end
19
85
 
86
+ # Create 7zip archive which includes the specified directory recursively.
87
+ #
88
+ # ==== Args
89
+ # +stream+ :: Output stream to write 7zip archive. <tt>stream.write</tt> is needed.
90
+ # +dir+ :: Directory to be added to the 7zip archive. <b><tt>dir</tt></b> must be a <b>relative path</b>.
91
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
92
+ #
93
+ # ==== Examples
94
+ # # Create 7zip archive which includes 'dir'.
95
+ # File.open("filename.7z", "wb") do |file|
96
+ # SevenZipRuby::SevenZipWriter.add_directory(file, 'dir')
97
+ # end
20
98
  def add_directory(stream, dir, param = {})
21
99
  password = { password: param.delete(:password) }
22
100
  self.open(stream, password) do |szw|
23
101
  szw.add_directory(dir, param)
24
102
  end
25
103
  end
26
- alias add_dir add_directory
104
+ alias add_dir add_directory # +add_dir+ is an alias of +add_directory+.
27
105
 
106
+ # Create 7zip archive which includes the specified file recursively.
107
+ #
108
+ # ==== Args
109
+ # +stream+ :: Output stream to write 7zip archive. <tt>stream.write</tt> is needed.
110
+ # +file+ :: File to be added to the 7zip archive. <b><tt>file</tt></b> must be a <b>relative path</b>.
111
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
112
+ #
113
+ # ==== Examples
114
+ # # Create 7zip archive which includes 'file.txt'.
115
+ # File.open("filename.7z", "wb") do |file|
116
+ # SevenZipRuby::SevenZipWriter.add_file(file, 'file.txt')
117
+ # end
28
118
  def add_file(stream, filename, param = {})
29
119
  password = { password: param.delete(:password) }
30
120
  self.open(stream, password) do |szw|
@@ -33,17 +123,69 @@ module SevenZipRuby
33
123
  end
34
124
  end
35
125
 
126
+ # Open 7zip archive to create.
127
+ #
128
+ # ==== Args
129
+ # +stream+ :: Output stream to write 7zip archive. <tt>stream.write</tt> is needed.
130
+ # +param+ :: Optional hash parameter. <tt>:password</tt> key represents password of this archive.
131
+ #
132
+ # ==== Examples
133
+ # File.open("filename.7z", "wb") do |file|
134
+ # szw = SevenZipRuby::SevenZipWriter.open(file)
135
+ # # ...
136
+ # szw.compress
137
+ # szw.close
138
+ # end
36
139
  def open(stream, param = {})
37
140
  stream.set_encoding(Encoding::ASCII_8BIT)
38
141
  open_impl(stream, param)
39
142
  return self
40
143
  end
41
144
 
145
+ # Compress and output data to archive file.
146
+ # You don't have to call this method when you use block-style SevenZipWriter.open.
147
+ #
148
+ # ==== Examples
149
+ # # Open archive
150
+ # File.open("filename.7z", "wb") do |file|
151
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
152
+ # # Create archive.
153
+ # # ...
154
+ # # You don't have to call szw.compress. Of cource, you may call it.
155
+ # # szw.compress
156
+ # end
157
+ # end
158
+ #
159
+ # # Open without block.
160
+ # File.open("filename.7z", "wb") do |file|
161
+ # szw = SevenZipRuby::SevenZipWriter.open(file)
162
+ # # Create archive.
163
+ # szw.compress # Compress must be called in this case.
164
+ # szw.close
165
+ # end
42
166
  def compress
43
167
  compress_impl(compress_proc)
44
168
  return self
45
169
  end
46
170
 
171
+ # Add file entry to 7zip archive.
172
+ #
173
+ # ==== Args
174
+ # +filename+ :: File to be added to the 7zip archive. <tt>file</tt> must be a <b>relative path</b> if <tt>:as</tt> option is not specified.
175
+ # +opt+ :: Optional hash parameter. <tt>:as</tt> key represents filename used in this archive.
176
+ #
177
+ # ==== Examples
178
+ # File.open("filename.7z", "wb") do |file|
179
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
180
+ # # Add file entry 'test.txt' in 7zip archive.
181
+ # # This entry has the contents of the local file 'test.txt'.
182
+ # szw.add_file("test.txt")
183
+ #
184
+ # # Add file entry 'desk/test.txt' in 7zip archive.
185
+ # # This entry has the contents of the local file 'C:/Users/test/Desktop/test2.txt'.
186
+ # szw.add_file("C:/Users/test/Desktop/test2.txt", as: "desk/test.txt")
187
+ # end
188
+ # end
47
189
  def add_file(filename, opt={})
48
190
  path = Pathname(filename)
49
191
  check_option(opt, [ :as ])
@@ -60,6 +202,23 @@ module SevenZipRuby
60
202
  return self
61
203
  end
62
204
 
205
+ # Add file entry to 7zip archive.
206
+ #
207
+ # ==== Args
208
+ # +data+ :: Data to be added to the 7zip archive.
209
+ # +filename+ :: File name of the entry to be added to the 7zip archive. <tt>filename</tt> must be a <b>relative path</b>.
210
+ # +opt+ :: Optional hash parameter. <tt>:ctime</tt>, <tt>:atime</tt> and <tt>:mtime</tt> keys can be specified as timestamp.
211
+ #
212
+ # ==== Examples
213
+ # File.open("filename.7z", "wb") do |file|
214
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
215
+ # data = "1234567890"
216
+ #
217
+ # # Add file entry 'data.bin' in 7zip archive.
218
+ # # This entry has the contents "1234567890".
219
+ # szw.add_data(data, "data.bin")
220
+ # end
221
+ # end
63
222
  def add_data(data, filename, opt={})
64
223
  path = Pathname(filename)
65
224
  raise ArgumentError.new("filename should be relative") if (path.absolute?)
@@ -70,6 +229,22 @@ module SevenZipRuby
70
229
  return self
71
230
  end
72
231
 
232
+ # Add directory and files recursively to 7zip archive.
233
+ #
234
+ # ==== Args
235
+ # +directory+ :: Directory to be added to the 7zip archive. <tt>directory</tt> must be a <b>relative path</b> if <tt>:as</tt> option is not specified.
236
+ # +opt+ :: Optional hash parameter. <tt>:as</tt> key represents directory name used in this archive.
237
+ #
238
+ # ==== Examples
239
+ # File.open("filename.7z", "wb") do |file|
240
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
241
+ # # Add "dir1" and entries under "dir" recursively.
242
+ # szw.add_directory("dir1")
243
+ #
244
+ # # Add "C:/Users/test/Desktop/dir" and entries under it recursively.
245
+ # szw.add_directory("C:/Users/test/Desktop/dir", as: "test/dir")
246
+ # end
247
+ # end
73
248
  def add_directory(directory, opt={})
74
249
  directory = Pathname(directory).cleanpath
75
250
  check_option(opt, [ :as ])
@@ -100,8 +275,21 @@ module SevenZipRuby
100
275
 
101
276
  return self
102
277
  end
103
- alias add_dir add_directory
278
+ alias add_dir add_directory # +add_dir+ is an alias of +add_directory+.
104
279
 
280
+ # Add an entry of empty directory to 7zip archive.
281
+ #
282
+ # ==== Args
283
+ # +directory_name+ :: Directory name to be added to 7z archive.
284
+ # +opt+ :: Optional hash parameter. <tt>:ctime</tt>, <tt>:atime</tt> and <tt>:mtime</tt> keys can be specified as timestamp.
285
+ #
286
+ # ==== Examples
287
+ # File.open("filename.7z", "wb") do |file|
288
+ # SevenZipRuby::SevenZipWriter.open(file) do |szw|
289
+ # # Add an empty directory "dir1".
290
+ # szw.mkdir("dir1")
291
+ # end
292
+ # end
105
293
  def mkdir(directory_name, opt={})
106
294
  path = Pathname(directory_name)
107
295
  raise ArgumentError.new("directory_name should be relative") if (path.absolute?)
@@ -113,13 +301,13 @@ module SevenZipRuby
113
301
  end
114
302
 
115
303
 
116
- def check_option(opt, keys)
304
+ def check_option(opt, keys) # :nodoc:
117
305
  invalid_keys = opt.keys - keys
118
306
  raise ArgumentError.new("invalid option: " + invalid_keys.join(", ")) unless (invalid_keys.empty?)
119
307
  end
308
+ private :check_option
120
309
 
121
-
122
- def compress_proc
310
+ def compress_proc # :nodoc:
123
311
  return Proc.new do |type, info|
124
312
  case(type)
125
313
  when :stream
@@ -139,5 +327,6 @@ module SevenZipRuby
139
327
  end
140
328
 
141
329
 
330
+ # +Writer+ is an alias of +SevenZipWriter+.
142
331
  Writer = SevenZipWriter
143
332
  end
@@ -1,3 +1,3 @@
1
1
  module SevenZipRuby
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -158,6 +158,16 @@ describe SevenZipRuby do
158
158
  end
159
159
  end
160
160
 
161
+ example "invalid password" do
162
+ File.open(SevenZipRubySpecHelper::SEVEN_ZIP_PASSWORD_FILE, "rb") do |file|
163
+ expect{ SevenZipRuby::Reader.open(file){ |szr| szr.extract_data(1) } }.to raise_error
164
+ end
165
+
166
+ File.open(SevenZipRubySpecHelper::SEVEN_ZIP_PASSWORD_FILE, "rb") do |file|
167
+ expect{ SevenZipRuby::Reader.open(file, password: "a"){ |szr| szr.extract_data(1) } }.to raise_error
168
+ end
169
+ end
170
+
161
171
  example "raise error in open" do
162
172
  error = StandardError.new
163
173
 
@@ -265,6 +275,7 @@ describe SevenZipRuby do
265
275
  szw.add_data("This is hoge.txt content.", "hoge.txt")
266
276
  szw.add_data("This is hoge2.txt content.", "hoge2.txt")
267
277
  szw.mkdir("hoge/hoge/hoge")
278
+ szw.compress
268
279
  end
269
280
  end
270
281
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seven_zip_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: x64-mingw32
6
6
  authors:
7
7
  - Masamitsu MURASE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-30 00:00:00.000000000 Z
11
+ date: 2013-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler