zip_dir 0.1.3 → 0.1.5
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 +4 -4
- data/README.md +31 -2
- data/lib/zip_dir/dir.rb +83 -0
- data/lib/zip_dir/unzipper.rb +2 -4
- data/lib/zip_dir/version.rb +1 -1
- data/lib/zip_dir/zip.rb +1 -1
- data/lib/zip_dir/zipper.rb +9 -40
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79209ebb4653e9d8ffa94f40c0a0a8ecd7c94d25
|
4
|
+
data.tar.gz: 15c942c938fe5a8bd953242e0beedb278bb187b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeccedb4f408d14756c527a519c676ba435ceb6e36644c5bd02df97b8f4d3f67531790e4bf1abf0da3e0a8bbcce2b8f280f1561140b6c7a8f0676cd5d46a6bf6
|
7
|
+
data.tar.gz: 54d959f438c11135d560c058cc8bec7d48b04f429ffe77077ec90b6091d01a92f420cbc48bea1d3a58d655a817c7800a105963a463cbd85ef3bc10f7368b30ac
|
data/README.md
CHANGED
@@ -38,15 +38,44 @@ end
|
|
38
38
|
|
39
39
|
# to zip __just the paths inside the directory___
|
40
40
|
zip_file = zipper.generate("some/path/to/directory", root_directory: true)
|
41
|
-
|
41
|
+
# for multiple directories again
|
42
42
|
zip_file = zipper.generate do |z|
|
43
43
|
z.add_path "some/path/to/directory", root_directory: true
|
44
44
|
end
|
45
45
|
|
46
|
+
# cleanup temporary directory
|
47
|
+
zipper.cleanup
|
48
|
+
|
46
49
|
#
|
47
50
|
# Unzip
|
48
51
|
#
|
49
|
-
|
52
|
+
ZipDir::Unzipper.new(zip_file.path).unzip_path # => "/var/folders/6c/s4snqy051jqdpbjw7f7tsn940000gn/T/d20151127-22683-a9vrnv"
|
53
|
+
```
|
54
|
+
|
55
|
+
## Dir Interface
|
56
|
+
`ZipDir::Zipper` subclasses `ZipDir::Dir`, which copies paths into a temporary directory to zip. There are several options for copying files and directories:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
ZipDir::Zipper.superclass # => ZipDir::Dir
|
60
|
+
|
61
|
+
dir = ZipDir::Dir.new
|
62
|
+
dir.generate("some/path" options_described_below)
|
63
|
+
dir.generate do |d|
|
64
|
+
d.add_path "some/path", options_described_below
|
65
|
+
end
|
66
|
+
|
67
|
+
dir.cleanup
|
68
|
+
```
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
# Directories
|
72
|
+
{ root_directory: true } # copies each file and directory path within the given directory path
|
73
|
+
{ flatten_directories: true } # copies all file paths with no directory structure copied (may override files)
|
74
|
+
{ extension: :gif || ["gif", "txt"] || "*" } # filters file extensions of paths, used with options listed above (:extensions is an alias)
|
75
|
+
{ glob: "custom_glob" } # copies the paths resulting from the custom glob
|
76
|
+
|
77
|
+
# Files and Directories
|
78
|
+
{ rename: "new_name_with_smart_extension_handling" }
|
50
79
|
```
|
51
80
|
|
52
81
|
## dir_model
|
data/lib/zip_dir/dir.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
module ZipDir
|
2
|
+
class Dir
|
3
|
+
attr_reader :copy_path
|
4
|
+
|
5
|
+
def generated?
|
6
|
+
!!@generated
|
7
|
+
end
|
8
|
+
|
9
|
+
def generate(source_path=nil, options={})
|
10
|
+
cleanup if generated?
|
11
|
+
|
12
|
+
@copy_path = ::Dir.mktmpdir
|
13
|
+
proxy = Proxy.new(copy_path)
|
14
|
+
if source_path
|
15
|
+
raise "Should not give block and source_path: #{source_path}" if block_given?
|
16
|
+
proxy.add_path source_path, options
|
17
|
+
else
|
18
|
+
yield proxy
|
19
|
+
end
|
20
|
+
|
21
|
+
::Dir.new(copy_path)
|
22
|
+
ensure
|
23
|
+
@generated = true
|
24
|
+
end
|
25
|
+
|
26
|
+
def cleanup
|
27
|
+
FileUtils.remove_entry_secure copy_path if copy_path
|
28
|
+
@copy_path = nil
|
29
|
+
@generated = false
|
30
|
+
end
|
31
|
+
|
32
|
+
class Proxy
|
33
|
+
def initialize(copy_path)
|
34
|
+
@copy_path = copy_path
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_path(source_path, options={})
|
38
|
+
options = options.inject({}){|hash,(k,v)| hash[k.to_sym] = v; hash}
|
39
|
+
|
40
|
+
if File.directory?(source_path)
|
41
|
+
add_directory source_path, options
|
42
|
+
elsif File.file?(source_path)
|
43
|
+
add_simple_path source_path, options
|
44
|
+
else
|
45
|
+
raise "Attempting to add non-existent path: #{source_path}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
alias_method :<<, :add_path
|
49
|
+
|
50
|
+
protected
|
51
|
+
def add_directory(source_path, options={})
|
52
|
+
options[:extension] = options[:extensions] unless options[:extension]
|
53
|
+
glob = nil
|
54
|
+
|
55
|
+
if options[:glob]
|
56
|
+
glob = options[:glob]
|
57
|
+
elsif options[:flatten_directories]
|
58
|
+
glob = "#{source_path}/**/*"
|
59
|
+
options[:extension] = '*' unless options[:extension]
|
60
|
+
elsif options[:root_directory]
|
61
|
+
glob = "#{source_path}/*"
|
62
|
+
end
|
63
|
+
|
64
|
+
return add_simple_path source_path, options unless glob
|
65
|
+
|
66
|
+
glob += ".{#{Array[options[:extension]].join(",")}}" if options[:extension]
|
67
|
+
::Dir.glob(glob).each { |path| add_simple_path(path) }
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_simple_path(source_path, options={})
|
71
|
+
copy_path_parts = [@copy_path]
|
72
|
+
|
73
|
+
if options[:rename]
|
74
|
+
rename = options[:rename]
|
75
|
+
rename += File.extname(source_path) if File.extname(rename).empty?
|
76
|
+
copy_path_parts << rename
|
77
|
+
end
|
78
|
+
|
79
|
+
FileUtils.cp_r source_path, copy_path_parts.join("/")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/zip_dir/unzipper.rb
CHANGED
@@ -2,7 +2,7 @@ module ZipDir
|
|
2
2
|
class Unzipper
|
3
3
|
attr_reader :zip_path
|
4
4
|
def initialize(zip_path)
|
5
|
-
@zip_path, @unzip_path = zip_path, Dir.mktmpdir
|
5
|
+
@zip_path, @unzip_path = zip_path, ::Dir.mktmpdir
|
6
6
|
end
|
7
7
|
|
8
8
|
def cleanup
|
@@ -24,9 +24,7 @@ module ZipDir
|
|
24
24
|
zip_file.each do |entry|
|
25
25
|
file_path = "#{@unzip_path}/#{entry.name}"
|
26
26
|
|
27
|
-
# Fixes:
|
28
|
-
# Errno::ENOENT:
|
29
|
-
# No such file or directory @ rb_sysopen - /var/folders/6c/s4snqy051jqdpbjw7f7tsn940000gn/T/d20160209-56123-1o14n5n/Niveaux/Fondations.png
|
27
|
+
# Fixes: spec/fixtures/encoded_differently.zip (in a test)
|
30
28
|
dir_path = File.dirname(file_path).to_s
|
31
29
|
FileUtils.mkdir_p dir_path unless File.exists?(dir_path)
|
32
30
|
|
data/lib/zip_dir/version.rb
CHANGED
data/lib/zip_dir/zip.rb
CHANGED
@@ -24,7 +24,7 @@ module ZipDir
|
|
24
24
|
|
25
25
|
protected
|
26
26
|
def zip_path(zip_io, relative_path="")
|
27
|
-
entries = Dir.entries(relative_path.empty? ? source_path : File.join(source_path, relative_path))
|
27
|
+
entries = ::Dir.entries(relative_path.empty? ? source_path : File.join(source_path, relative_path))
|
28
28
|
entries.delete(".")
|
29
29
|
entries.delete("..")
|
30
30
|
entries.each do |entry|
|
data/lib/zip_dir/zipper.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
require "zip_dir/dir"
|
1
2
|
require "zip_dir/zip"
|
2
3
|
|
3
4
|
module ZipDir
|
4
|
-
class Zipper
|
5
|
-
attr_reader :
|
5
|
+
class Zipper < Dir
|
6
|
+
attr_reader :filename
|
6
7
|
|
7
8
|
DEFAULT_FILENAME = "zipper.zip".freeze
|
8
9
|
|
@@ -10,51 +11,19 @@ module ZipDir
|
|
10
11
|
@filename = filename
|
11
12
|
end
|
12
13
|
|
13
|
-
def generated?
|
14
|
-
!!@generated
|
15
|
-
end
|
16
|
-
|
17
14
|
def generate(source_path=nil, root_directory: false)
|
18
|
-
|
19
|
-
|
20
|
-
@copy_path = Dir.mktmpdir
|
21
|
-
proxy = Proxy.new(copy_path)
|
22
|
-
if source_path
|
23
|
-
raise "should not give block and source_path" if block_given?
|
24
|
-
proxy.add_path source_path, root_directory: root_directory
|
25
|
-
else
|
26
|
-
yield proxy
|
27
|
-
end
|
28
|
-
|
15
|
+
super
|
29
16
|
@file = ZipDir::Zip.new(copy_path, filename).file
|
30
|
-
ensure
|
31
|
-
@generated = true
|
32
|
-
end
|
33
|
-
|
34
|
-
def file
|
35
|
-
return unless generated?
|
36
|
-
@file
|
37
17
|
end
|
38
18
|
|
39
19
|
def cleanup
|
40
|
-
|
41
|
-
@file =
|
42
|
-
@generated = false
|
20
|
+
super
|
21
|
+
@file = nil
|
43
22
|
end
|
44
23
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
def add_path(source_path, root_directory: false)
|
51
|
-
if root_directory
|
52
|
-
Dir.glob("#{source_path}/*").each { |path| add_path(path) }
|
53
|
-
else
|
54
|
-
FileUtils.cp_r source_path, @copy_path
|
55
|
-
end
|
56
|
-
end
|
57
|
-
alias_method :<<, :add_path
|
24
|
+
def file
|
25
|
+
return unless generated?
|
26
|
+
@file
|
58
27
|
end
|
59
28
|
end
|
60
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zip_dir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Chung
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- bin/console
|
42
42
|
- bin/setup
|
43
43
|
- lib/zip_dir.rb
|
44
|
+
- lib/zip_dir/dir.rb
|
44
45
|
- lib/zip_dir/unzipper.rb
|
45
46
|
- lib/zip_dir/version.rb
|
46
47
|
- lib/zip_dir/zip.rb
|