workspace-archive 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/workspace-archive.rb +94 -0
  3. metadata +74 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c9cafc792e7c9b1f4f2abefab134000d7816bf61
4
+ data.tar.gz: 37bab581365788c630ab0169e71ba386d4131a0b
5
+ SHA512:
6
+ metadata.gz: 44d6e60460918686513c646bc56d293d18f6decc8757bbdf5fcaa1090aa42916fe7784b6db9643dbbd2e9cedb8e6ca118294c692b5bf94e3c438187f337d7155
7
+ data.tar.gz: c5bab876577ea6fc9c34dc1b83d0e2185f78964f09db3343ff70e1e85bee3fc6e519646a4b02134cf86134fe99ab7a423921ee150201d3bf7b7475cb92e83b07
@@ -0,0 +1,94 @@
1
+ require "zip"
2
+ require 'rubygems/package'
3
+
4
+ module Workspace
5
+ class Dir
6
+ def compress(target_file)
7
+ target_file.delete
8
+ if target_file.extension == "gz"
9
+ compress_gz(target_file)
10
+ else
11
+ compress_zip(target_file)
12
+ end
13
+ self
14
+ end
15
+
16
+ private
17
+
18
+ def compress_gz(target_file)
19
+ ::File.open(target_file.to_s, "wb") do |gzfile|
20
+ Zlib::GzipWriter.wrap(gzfile) do |gz|
21
+ Gem::Package::TarWriter.new(gz) do |tar|
22
+ children("**/*") do |child|
23
+ mode = ::File.stat(child.to_s).mode
24
+ if child.kind_of?(File)
25
+ tar.add_file_simple(child.relative_path, mode, child.read.length) do |io|
26
+ io.write(child.read)
27
+ end
28
+ elsif child.kind_of?(Dir)
29
+ tar.mkdir(child.relative_path, mode)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ target_file
36
+ end
37
+
38
+ def compress_zip(target_file)
39
+ Zip::File.open(target_file.to_s, 'w') do |zipfile|
40
+ ::Dir["#{self}/**/**"].each do |file|
41
+ path = file.sub("#{self}/", '')
42
+ zipfile.add(path, file) unless block_given? and !yield(path)
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ class File
49
+ def compress(target_file)
50
+ target_file.delete
51
+ Zip::File.open(target_file.to_s, 'w') do |zipfile|
52
+ zipfile.add(name, absolute_path)
53
+ end
54
+ self
55
+ end
56
+
57
+ def extract(target_dir)
58
+ target_dir.create
59
+ if extension == "gz"
60
+ extract_gz(target_dir)
61
+ else
62
+ extract_zip(target_dir)
63
+ end
64
+ self
65
+ end
66
+
67
+ private
68
+
69
+ def extract_zip(target_dir)
70
+ Zip::File.open(to_s) do |archive|
71
+ archive.each do |entry|
72
+ extract_dir = target_dir.file(entry.name).dir
73
+ extract_dir.create unless extract_dir.exists?
74
+ entry.extract(::File.join(target_dir.to_s, entry.name))
75
+ end
76
+ end
77
+ end
78
+
79
+ def extract_gz(target_dir)
80
+ archive = Gem::Package::TarReader.new(Zlib::GzipReader.open(to_s))
81
+ archive.rewind
82
+ archive.each do |entry|
83
+ if entry.directory?
84
+ archive_dir = target_dir.dir(entry.full_name)
85
+ archive_dir.create
86
+ elsif entry.file?
87
+ archive_file = target_dir.file(entry.full_name)
88
+ archive_file.write(entry.read)
89
+ end
90
+ end
91
+ archive.close
92
+ end
93
+ end
94
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: workspace-archive
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Strebitzer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: workspace
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ description: Workspace makes it a breeze to work with files and directories
42
+ email:
43
+ - tobias.strebitzer@magloft.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - workspace-archive.rb
49
+ homepage: https://github.com/magloft/workspace
50
+ licenses:
51
+ - BSD-3-Clause
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - "."
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.4'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.6.10
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Workspace gem extension to allow compression and extraction of zip and gz
73
+ archives
74
+ test_files: []