hotplate 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +1 -0
  4. data/bin/toast +2 -0
  5. data/hotplate.gemspec +30 -0
  6. data/lib/hotplate/cli/build.rb +51 -0
  7. data/lib/hotplate/cli/init.rb +64 -0
  8. data/lib/hotplate/cli/main.rb +39 -0
  9. data/lib/hotplate/gems/rubyzip-1.1.7/README.md +271 -0
  10. data/lib/hotplate/gems/rubyzip-1.1.7/Rakefile +19 -0
  11. data/lib/hotplate/gems/rubyzip-1.1.7/TODO +15 -0
  12. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/central_directory.rb +208 -0
  13. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/compressor.rb +10 -0
  14. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/constants.rb +63 -0
  15. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/crypto/encryption.rb +11 -0
  16. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/crypto/null_encryption.rb +45 -0
  17. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/crypto/traditional_encryption.rb +99 -0
  18. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/decompressor.rb +13 -0
  19. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/deflater.rb +32 -0
  20. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/dos_time.rb +49 -0
  21. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/entry.rb +696 -0
  22. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/entry_set.rb +86 -0
  23. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/errors.rb +16 -0
  24. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/generic.rb +43 -0
  25. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/ntfs.rb +92 -0
  26. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/old_unix.rb +45 -0
  27. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/universal_time.rb +47 -0
  28. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/unix.rb +38 -0
  29. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/zip64.rb +67 -0
  30. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field/zip64_placeholder.rb +16 -0
  31. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/extra_field.rb +101 -0
  32. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/file.rb +436 -0
  33. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/filesystem.rb +626 -0
  34. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/inflater.rb +66 -0
  35. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/input_stream.rb +164 -0
  36. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/ioextras/abstract_input_stream.rb +115 -0
  37. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/ioextras/abstract_output_stream.rb +45 -0
  38. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/ioextras.rb +38 -0
  39. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/null_compressor.rb +15 -0
  40. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/null_decompressor.rb +27 -0
  41. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/null_input_stream.rb +10 -0
  42. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/output_stream.rb +190 -0
  43. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/pass_thru_compressor.rb +23 -0
  44. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/pass_thru_decompressor.rb +41 -0
  45. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/streamable_directory.rb +15 -0
  46. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/streamable_stream.rb +56 -0
  47. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip/version.rb +3 -0
  48. data/lib/hotplate/gems/rubyzip-1.1.7/lib/zip.rb +63 -0
  49. data/lib/hotplate/gems/rubyzip-1.1.7/samples/example.rb +91 -0
  50. data/lib/hotplate/gems/rubyzip-1.1.7/samples/example_filesystem.rb +33 -0
  51. data/lib/hotplate/gems/rubyzip-1.1.7/samples/example_recursive.rb +48 -0
  52. data/lib/hotplate/gems/rubyzip-1.1.7/samples/gtkRubyzip.rb +86 -0
  53. data/lib/hotplate/gems/rubyzip-1.1.7/samples/qtzip.rb +101 -0
  54. data/lib/hotplate/gems/rubyzip-1.1.7/samples/write_simple.rb +13 -0
  55. data/lib/hotplate/gems/rubyzip-1.1.7/samples/zipfind.rb +74 -0
  56. data/lib/hotplate/gems/rubyzip-1.1.7/test/basic_zip_file_test.rb +64 -0
  57. data/lib/hotplate/gems/rubyzip-1.1.7/test/central_directory_entry_test.rb +73 -0
  58. data/lib/hotplate/gems/rubyzip-1.1.7/test/central_directory_test.rb +104 -0
  59. data/lib/hotplate/gems/rubyzip-1.1.7/test/crypto/null_encryption_test.rb +53 -0
  60. data/lib/hotplate/gems/rubyzip-1.1.7/test/crypto/traditional_encryption_test.rb +80 -0
  61. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/WarnInvalidDate.zip +0 -0
  62. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/file1.txt +46 -0
  63. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/file1.txt.deflatedData +0 -0
  64. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/file2.txt +1504 -0
  65. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/globTest/foo/bar/baz/foo.txt +0 -0
  66. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/globTest/foo.txt +0 -0
  67. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/globTest/food.txt +0 -0
  68. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/globTest.zip +0 -0
  69. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/mimetype +1 -0
  70. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/notzippedruby.rb +7 -0
  71. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/ntfs.zip +0 -0
  72. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/rubycode.zip +0 -0
  73. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/rubycode2.zip +0 -0
  74. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/testDirectory.bin +0 -0
  75. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/zip64-sample.zip +0 -0
  76. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/zipWithDirs.zip +0 -0
  77. data/lib/hotplate/gems/rubyzip-1.1.7/test/data/zipWithEncryption.zip +0 -0
  78. data/lib/hotplate/gems/rubyzip-1.1.7/test/deflater_test.rb +67 -0
  79. data/lib/hotplate/gems/rubyzip-1.1.7/test/encryption_test.rb +42 -0
  80. data/lib/hotplate/gems/rubyzip-1.1.7/test/entry_set_test.rb +138 -0
  81. data/lib/hotplate/gems/rubyzip-1.1.7/test/entry_test.rb +165 -0
  82. data/lib/hotplate/gems/rubyzip-1.1.7/test/errors_test.rb +36 -0
  83. data/lib/hotplate/gems/rubyzip-1.1.7/test/extra_field_test.rb +78 -0
  84. data/lib/hotplate/gems/rubyzip-1.1.7/test/file_extract_directory_test.rb +56 -0
  85. data/lib/hotplate/gems/rubyzip-1.1.7/test/file_extract_test.rb +90 -0
  86. data/lib/hotplate/gems/rubyzip-1.1.7/test/file_split_test.rb +60 -0
  87. data/lib/hotplate/gems/rubyzip-1.1.7/test/file_test.rb +559 -0
  88. data/lib/hotplate/gems/rubyzip-1.1.7/test/filesystem/dir_iterator_test.rb +62 -0
  89. data/lib/hotplate/gems/rubyzip-1.1.7/test/filesystem/directory_test.rb +131 -0
  90. data/lib/hotplate/gems/rubyzip-1.1.7/test/filesystem/file_mutating_test.rb +100 -0
  91. data/lib/hotplate/gems/rubyzip-1.1.7/test/filesystem/file_nonmutating_test.rb +514 -0
  92. data/lib/hotplate/gems/rubyzip-1.1.7/test/filesystem/file_stat_test.rb +66 -0
  93. data/lib/hotplate/gems/rubyzip-1.1.7/test/gentestfiles.rb +134 -0
  94. data/lib/hotplate/gems/rubyzip-1.1.7/test/inflater_test.rb +14 -0
  95. data/lib/hotplate/gems/rubyzip-1.1.7/test/input_stream_test.rb +170 -0
  96. data/lib/hotplate/gems/rubyzip-1.1.7/test/ioextras/abstract_input_stream_test.rb +103 -0
  97. data/lib/hotplate/gems/rubyzip-1.1.7/test/ioextras/abstract_output_stream_test.rb +106 -0
  98. data/lib/hotplate/gems/rubyzip-1.1.7/test/ioextras/fake_io_test.rb +18 -0
  99. data/lib/hotplate/gems/rubyzip-1.1.7/test/local_entry_test.rb +156 -0
  100. data/lib/hotplate/gems/rubyzip-1.1.7/test/output_stream_test.rb +129 -0
  101. data/lib/hotplate/gems/rubyzip-1.1.7/test/pass_thru_compressor_test.rb +31 -0
  102. data/lib/hotplate/gems/rubyzip-1.1.7/test/pass_thru_decompressor_test.rb +15 -0
  103. data/lib/hotplate/gems/rubyzip-1.1.7/test/settings_test.rb +92 -0
  104. data/lib/hotplate/gems/rubyzip-1.1.7/test/test_helper.rb +228 -0
  105. data/lib/hotplate/gems/rubyzip-1.1.7/test/unicode_file_names_and_comments_test.rb +52 -0
  106. data/lib/hotplate/gems/rubyzip-1.1.7/test/zip64_full_test.rb +53 -0
  107. data/lib/hotplate/gems/rubyzip-1.1.7/test/zip64_support_test.rb +15 -0
  108. data/lib/hotplate/java/build.gradle +38 -0
  109. data/lib/hotplate/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  110. data/lib/hotplate/java/gradle/wrapper/gradle-wrapper.properties +6 -0
  111. data/lib/hotplate/java/gradlew +164 -0
  112. data/lib/hotplate/java/gradlew.bat +90 -0
  113. data/lib/hotplate/java/template.java +25 -0
  114. data/lib/hotplate/version.rb +3 -0
  115. data/lib/hotplate.rb +2 -0
  116. metadata +186 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fba850693cc228819c3a4e0e52b62f2d6bbec008
4
+ data.tar.gz: 7b8636e8846d340bd2feb44198cdeafbf42d0c98
5
+ SHA512:
6
+ metadata.gz: f29ba82dadbacc47cdb18130728cae5475cfcb71dee43c54858a9a77099bda47ccd340812244a9afd209381c7291c62e1bad1170f50ac94a89d18d812258aee2
7
+ data.tar.gz: e6b3dad697fb6826601f9794e2cd05874c61b948420f08b83371c23d57a438c701a60f33d781fcc8e162eb0d6e1cea74ea937d5753c1cb3f31619cc9ea648cfd
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hotplate.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/toast ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hotplate'
data/hotplate.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hotplate/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hotplate"
8
+ spec.version = HotPlate::VERSION
9
+ spec.authors = ["Jaci R"]
10
+ spec.email = ["jaci.brunning@gmail.com"]
11
+
12
+ spec.summary = %q{Toast module deployment made easy}
13
+ spec.homepage = "http://github.com/Open-RIO/HotPlate"
14
+
15
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
16
+ # delete this section to allow pushing this gem to any host.
17
+ # if spec.respond_to?(:metadata)
18
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
19
+ # else
20
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
21
+ # end
22
+
23
+ spec.bindir = "bin"
24
+ spec.files = Dir.glob("lib/**/*") + ['Rakefile', 'hotplate.gemspec', 'Gemfile', 'Rakefile']
25
+ spec.executables = ["toast"]
26
+ spec.require_paths = ["lib"]
27
+
28
+ spec.add_development_dependency "bundler"
29
+ spec.add_development_dependency "rake"
30
+ end
@@ -0,0 +1,51 @@
1
+ if File.exist? "#{dir}/build.gradle"
2
+ puts "Attempting to build Java Project"
3
+ if os == :windows
4
+ system("(cd #{dir} && gradlew build)")
5
+ else
6
+ system("(cd #{dir} && ./gradlew build)")
7
+ end
8
+ elsif File.exist? "#{dir}/module.json"
9
+ prebuild = File.absolute_path(File.join(dir, "prebuild.rb"))
10
+ build = File.absolute_path(File.join(dir, "build.rb"))
11
+
12
+ require prebuild if File.exist? prebuild
13
+
14
+ require 'zip'
15
+ puts "Attempting to build JavaScript project"
16
+ exppath = File.expand_path(".", dir)
17
+ buildfiles = Dir[exppath + "/**/*"]
18
+ exclusions = ["build", "build/*.jsm"]
19
+ exclusions << File.read("#{dir}/exclude.build").split(/\r?\n/) if File.exist? "#{dir}/exclude.build"
20
+ exclusion_list = []
21
+ exclusions = exclusions.flatten
22
+ exclusions.each {|excl| exclusion_list << Dir[exppath + "/" + excl]}
23
+ file_list = buildfiles - exclusion_list.flatten
24
+
25
+ moduleconfig = File.read(File.join(dir, "module.json"))
26
+ archive_name = moduleconfig.scan(/"name"\s*:\s*"(.*)"/)[0][0]
27
+ version_match = moduleconfig.scan(/"version"\s*:\s*"(.*)"/)
28
+ archive_name += "_#{version_match[0][0]}" if version_match.length > 0
29
+
30
+ archive_name += ".jsm"
31
+ FileUtils.mkdir "#{dir}/build" unless File.exist? "#{dir}/build"
32
+ archive_path = "#{dir}/build/#{archive_name}"
33
+
34
+ require build if File.exist? build
35
+
36
+ puts "Building Archive: #{archive_name}"
37
+ puts "Including Files: "
38
+ puts file_list.map {|x| "\t#{x.gsub(/\\/, "/").gsub(dir.gsub(/\\/, "/"), "")}\n"}
39
+
40
+ FileUtils.rm_rf archive_path if File.exist? archive_path
41
+ Zip::File.open(archive_path, Zip::File::CREATE) do |zipfile|
42
+ file_list.each do |fn|
43
+ relative = fn.gsub(/\\/, "/").gsub(dir.gsub(/\\/, "/"), "")
44
+ zipfile.add(relative[1..relative.length], fn)
45
+ end
46
+ end
47
+
48
+ puts "Build Complete"
49
+ else
50
+ puts "Can't build: not a valid Toast Project"
51
+ end
@@ -0,0 +1,64 @@
1
+ require 'FileUtils'
2
+
3
+ def java
4
+ puts "What is your Team Number? (0000)"
5
+ team = gets.chop!.to_i.to_s # Ensures it's a proper number :)
6
+ clazz = "#{@path}/src/main/java/frc/team#{team}/#{@name}/RobotModule.java"
7
+ jin = File.expand_path "../../java", __FILE__
8
+ FileUtils.cp_r "#{jin}/.", @path
9
+
10
+ build = File.read File.join(@path, "build.gradle")
11
+ build = build.gsub "%%TEAM", team
12
+ build = build.gsub "%%NAME", @name
13
+ File.write File.join(@path, "build.gradle"), build
14
+
15
+ templ = File.join(@path, "template.java")
16
+ template = File.read templ
17
+ template = template.gsub "%%TEAM", team
18
+ template = template.gsub "%%NAMED", @name.downcase
19
+ template = template.gsub "%%NAME", @name
20
+ FileUtils.mkdir_p File.expand_path("..", clazz)
21
+ File.write clazz, template
22
+ File.delete templ
23
+
24
+ begin
25
+ FileUtils.chmod 0777, %w(build.gradle, gradlew)
26
+ rescue; end
27
+ end
28
+
29
+ def javascript
30
+ puts "What is your main script class name? [main.js]"
31
+ name = gets.chop!
32
+ name = "main.js" if name == ""
33
+ name += ".js" unless name =~ /^(.*)\.js$/
34
+ File.write("#{@path}/module.json", "{\n\t\"name\": \"#{@name}\",\n\t\"script\": \"#{name}\"\n}")
35
+ File.write("#{@path}/#{name}", "console.log('Hello Toast!');")
36
+ end
37
+
38
+ puts "Creating a new Toast Module."
39
+
40
+ puts "What is the name of your Module?"
41
+ @name = gets.chop!
42
+ @path = File.join dir, @name
43
+ if File.exist? @path
44
+ puts "Module already exists? Want to override? (THIS CANNOT BE UNDONE) [y/n]"
45
+ inp = gets.chop!
46
+ if inp =~ /(y(es)?)|1|(t(rue)?)/i
47
+ puts "Overriding..."
48
+ FileUtils.rm_rf @path
49
+ else
50
+ puts "Aborting..."
51
+ exit
52
+ end
53
+ end
54
+ FileUtils.mkdir @path
55
+
56
+ puts "What kind of Toast Module would you like to create? [java/javascript] (java)"
57
+ option = gets.chop!
58
+ if option =~ /javas(cript)?/i
59
+ javascript
60
+ else
61
+ java
62
+ end
63
+
64
+ puts "Toast Module Created! #{@name}"
@@ -0,0 +1,39 @@
1
+ require 'optparse'
2
+
3
+ trap("INT"){exit}
4
+
5
+ OptionParser.new do |o|
6
+ o.on("-d DIRECTORY", "--directory", "The directory to start in") {|dir| @dir = dir}
7
+ end.parse!
8
+
9
+ def dir
10
+ @dir ||= "."
11
+ File.absolute_path @dir
12
+ end
13
+
14
+ def os
15
+ if (/Windows/ =~ ENV['OS']) != nil
16
+ return :windows
17
+ elsif (/darwin/ =~ RUBY_PLATFORM) != nil
18
+ return :darwin
19
+ else
20
+ return :linux
21
+ end
22
+ end
23
+
24
+ def gemload name
25
+ libroot = File.expand_path "../../gems", __FILE__
26
+ $:.unshift Dir[libroot + "/#{name}-*/lib"][0]
27
+ end
28
+
29
+ gemload "rubyzip"
30
+
31
+ puts "Error: No option selected!" unless ARGV.length > 0
32
+ first_arg = ARGV.shift
33
+
34
+ begin
35
+ (puts "recursion is a bad idea idea idea idea"; exit;) if first_arg == 'main'
36
+ require_relative "#{first_arg}"
37
+ rescue LoadError
38
+ puts "Invalid Option: #{first_arg}"
39
+ end
@@ -0,0 +1,271 @@
1
+ # rubyzip
2
+ [![Gem Version](https://badge.fury.io/rb/rubyzip.svg)](http://badge.fury.io/rb/rubyzip)
3
+ [![Build Status](https://secure.travis-ci.org/rubyzip/rubyzip.svg)](http://travis-ci.org/rubyzip/rubyzip)
4
+ [![Code Climate](https://codeclimate.com/github/rubyzip/rubyzip.svg)](https://codeclimate.com/github/rubyzip/rubyzip)
5
+ [![Coverage Status](https://img.shields.io/coveralls/rubyzip/rubyzip.svg)](https://coveralls.io/r/rubyzip/rubyzip?branch=master)
6
+
7
+ rubyzip is a ruby library for reading and writing zip files.
8
+
9
+ ## Important note
10
+
11
+ Rubyzip interface changed!!! No need to do `require "zip/zip"` and `Zip` prefix in class names removed.
12
+
13
+ If you have issues with any third-party gems that require an old version of rubyzip, you can use this workaround:
14
+
15
+ ```ruby
16
+ gem 'rubyzip', '>= 1.0.0' # will load new rubyzip version
17
+ gem 'zip-zip' # will load compatibility for old rubyzip API.
18
+ ```
19
+
20
+ ## Requirements
21
+
22
+ * Ruby 1.9.2 or greater
23
+
24
+ ## Installation
25
+ rubyzip is available on RubyGems, so:
26
+
27
+ ```
28
+ gem install rubyzip
29
+ ```
30
+
31
+ Or in your Gemfile:
32
+
33
+ ```ruby
34
+ gem 'rubyzip'
35
+ ```
36
+
37
+ ## Usage
38
+
39
+ ### Basic zip archive creation
40
+
41
+ ```ruby
42
+ require 'rubygems'
43
+ require 'zip'
44
+
45
+ folder = "Users/me/Desktop/stuff_to_zip"
46
+ input_filenames = ['image.jpg', 'description.txt', 'stats.csv']
47
+
48
+ zipfile_name = "/Users/me/Desktop/archive.zip"
49
+
50
+ Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
51
+ input_filenames.each do |filename|
52
+ # Two arguments:
53
+ # - The name of the file as it will appear in the archive
54
+ # - The original file, including the path to find it
55
+ zipfile.add(filename, folder + '/' + filename)
56
+ end
57
+ zipfile.get_output_stream("myFile") { |os| os.write "myFile contains just this" }
58
+ end
59
+ ```
60
+
61
+ ### Zipping a directory recursively
62
+ Copy from [here](https://github.com/rubyzip/rubyzip/blob/05916bf89181e1955118fd3ea059f18acac28cc8/samples/example_recursive.rb )
63
+
64
+ ```ruby
65
+ require 'rubygems'
66
+ require 'zip'
67
+ # This is a simple example which uses rubyzip to
68
+ # recursively generate a zip file from the contents of
69
+ # a specified directory. The directory itself is not
70
+ # included in the archive, rather just its contents.
71
+ #
72
+ # Usage:
73
+ # require /path/to/the/ZipFileGenerator/Class
74
+ # directoryToZip = "/tmp/input"
75
+ # outputFile = "/tmp/out.zip"
76
+ # zf = ZipFileGenerator.new(directoryToZip, outputFile)
77
+ # zf.write()
78
+
79
+ class ZipFileGenerator
80
+ # Initialize with the directory to zip and the location of the output archive.
81
+ def initialize(inputDir, outputFile)
82
+ @inputDir = inputDir
83
+ @outputFile = outputFile
84
+ end
85
+ # Zip the input directory.
86
+ def write()
87
+ entries = Dir.entries(@inputDir); entries.delete("."); entries.delete("..")
88
+ io = Zip::File.open(@outputFile, Zip::File::CREATE);
89
+ writeEntries(entries, "", io)
90
+ io.close();
91
+ end
92
+ # A helper method to make the recursion work.
93
+ private
94
+ def writeEntries(entries, path, io)
95
+ entries.each { |e|
96
+ zipFilePath = path == "" ? e : File.join(path, e)
97
+ diskFilePath = File.join(@inputDir, zipFilePath)
98
+ puts "Deflating " + diskFilePath
99
+ if File.directory?(diskFilePath)
100
+ io.mkdir(zipFilePath)
101
+ subdir =Dir.entries(diskFilePath); subdir.delete("."); subdir.delete("..")
102
+ writeEntries(subdir, zipFilePath, io)
103
+ else
104
+ io.get_output_stream(zipFilePath) { |f| f.print(File.open(diskFilePath, "rb").read())}
105
+ end
106
+ }
107
+ end
108
+ end
109
+ ```
110
+
111
+ ### Save zip archive entries in sorted by name state
112
+
113
+ To saving zip archives in sorted order like below you need to set `::Zip.sort_entries` to `true`
114
+
115
+ ```
116
+ Vegetable/
117
+ Vegetable/bean
118
+ Vegetable/carrot
119
+ Vegetable/celery
120
+ fruit/
121
+ fruit/apple
122
+ fruit/kiwi
123
+ fruit/mango
124
+ fruit/orange
125
+ ```
126
+
127
+ After this entries in zip archive will be saved in ordered state.
128
+
129
+ ### Reading a Zip file
130
+
131
+ ```ruby
132
+ Zip::File.open('foo.zip') do |zip_file|
133
+ # Handle entries one by one
134
+ zip_file.each do |entry|
135
+ # Extract to file/directory/symlink
136
+ puts "Extracting #{entry.name}"
137
+ entry.extract(dest_file)
138
+
139
+ # Read into memory
140
+ content = entry.get_input_stream.read
141
+ end
142
+
143
+ # Find specific entry
144
+ entry = zip_file.glob('*.csv').first
145
+ puts entry.get_input_stream.read
146
+ end
147
+ ```
148
+
149
+ ### Password Protection (Experimental)
150
+
151
+ RubyZip supports reading/writing zip files with traditional zip encryption (a.k.a. "ZipCrypto"). AES encryption is not yet supported. It can be used with buffer streams, e.g.:
152
+
153
+ ```ruby
154
+ Zip::OutputStream.write_buffer(::StringIO.new(''), Zip::TraditionalEncrypter.new('password')) do |out|
155
+ out.put_next_entry("my_file.txt")
156
+ out.write my_data
157
+ end.string
158
+ ```
159
+
160
+ This is an experimental feature and the interface for encryption may change in future versions.
161
+
162
+ ## Known issues
163
+
164
+ ### Modify docx file with rubyzip
165
+
166
+ Use `write_buffer` instead `open`. Thanks to @jondruse
167
+
168
+ ```ruby
169
+ buffer = Zip::OutputStream.write_buffer do |out|
170
+ @zip_file.entries.each do |e|
171
+ unless [DOCUMENT_FILE_PATH, RELS_FILE_PATH].include?(e.name)
172
+ out.put_next_entry(e.name)
173
+ out.write e.get_input_stream.read
174
+ end
175
+ end
176
+
177
+ out.put_next_entry(DOCUMENT_FILE_PATH)
178
+ out.write xml_doc.to_xml(:indent => 0).gsub("\n","")
179
+
180
+ out.put_next_entry(RELS_FILE_PATH)
181
+ out.write rels.to_xml(:indent => 0).gsub("\n","")
182
+ end
183
+
184
+ File.open(new_path, "w") {|f| f.write(buffer.string) }
185
+ ```
186
+
187
+ ## Configuration
188
+
189
+ By default, rubyzip will not overwrite files if they already exist inside of the extracted path. To change this behavior, you may specify a configuration option like so:
190
+
191
+ ```ruby
192
+ Zip.on_exists_proc = true
193
+ ```
194
+
195
+ If you're using rubyzip with rails, consider placing this snippet of code in an initializer file such as `config/initializers/rubyzip.rb`
196
+
197
+ Additionally, if you want to configure rubyzip to overwrite existing files while creating a .zip file, you can do so with the following:
198
+
199
+ ```ruby
200
+ Zip.continue_on_exists_proc = true
201
+ ```
202
+
203
+ If you want to store non english names and want to open properly file on Windows(pre 7) you need to set next option:
204
+
205
+ ```ruby
206
+ Zip.unicode_names = true
207
+ ```
208
+
209
+ In some zip date of files stored in incorrect format. You can hide warning about it by using:
210
+
211
+ ```ruby
212
+ Zip.warn_invalid_date = false
213
+ ```
214
+
215
+ You can set the default compression level like so:
216
+
217
+ ```ruby
218
+ Zip.default_compression = Zlib::DEFAULT_COMPRESSION
219
+ ```
220
+ It defaults to `Zlib::DEFAULT_COMPRESSION`. Possible values are `Zlib::BEST_COMPRESSION`, `Zlib::DEFAULT_COMPRESSION` and `Zlib::NO_COMPRESSION`
221
+
222
+ All settings in same time
223
+
224
+ ```ruby
225
+ Zip.setup do |c|
226
+ c.on_exists_proc = true
227
+ c.continue_on_exists_proc = true
228
+ c.unicode_names = true
229
+ c.default_compression = Zlib::BEST_COMPRESSION
230
+ end
231
+ ```
232
+
233
+ By default Zip64 support is disabled for writing. To enable it do next:
234
+
235
+ ```ruby
236
+ Zip.write_zip64_support = true
237
+ ```
238
+
239
+ _NOTE_: If you will enable Zip64 writing then you will need zip extractor with Zip64 support to extract archive.
240
+
241
+ ## Developing
242
+
243
+ To run tests you need run next commands:
244
+
245
+ ```
246
+ bundle install
247
+ rake
248
+ ```
249
+
250
+ ## Website and Project Home
251
+
252
+ http://github.com/rubyzip/rubyzip
253
+
254
+ http://rdoc.info/github/rubyzip/rubyzip/master/frames
255
+
256
+ ## Authors
257
+
258
+ Alexander Simonov ( alex at simonov.me)
259
+
260
+ Alan Harper ( alan at aussiegeek.net)
261
+
262
+ Thomas Sondergaard (thomas at sondergaard.cc)
263
+
264
+ Technorama Ltd. (oss-ruby-zip at technorama.net)
265
+
266
+ extra-field support contributed by Tatsuki Sugiura (sugi at nemui.org)
267
+
268
+ ## License
269
+
270
+ rubyzip is distributed under the same license as ruby. See
271
+ http://www.ruby-lang.org/en/LICENSE.txt
@@ -0,0 +1,19 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new(:test) do |test|
7
+ test.libs << 'lib'
8
+ test.libs << 'test'
9
+ test.pattern = 'test/**/*_test.rb'
10
+ test.verbose = true
11
+ end
12
+
13
+ #Rake::TestTask.new(:zip64_full_test) do |test|
14
+ # test.libs << File.join(File.dirname(__FILE__), 'lib')
15
+ # test.libs << File.join(File.dirname(__FILE__), 'test')
16
+ # test.pattern = File.join(File.dirname(__FILE__), 'test/zip64_full_test.rb')
17
+ # test.verbose = true
18
+ #end
19
+
@@ -0,0 +1,15 @@
1
+
2
+ * ZipInputStream: Support zip-files with trailing data descriptors
3
+ * Adjust rdoc stylesheet to advertise inherited methods if possible
4
+ * Suggestion: Add ZipFile/ZipInputStream example that demonstrates extracting all entries.
5
+ * Suggestion: ZipFile#extract destination should default to "."
6
+ * Suggestion: ZipEntry should have extract(), get_input_stream() methods etc
7
+ * (is buffering used anywhere with write?)
8
+ * Inflater.sysread should pass the buffer to produce_input.
9
+ * Implement ZipFsDir.glob
10
+ * ZipFile.checkIntegrity method
11
+ * non-MSDOS permission attributes
12
+ ** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2"
13
+ * Packager version, required unpacker version in zip headers
14
+ ** See mail from Ned Konz to ruby-talk subj. "Re: SV: [ANN] Archive 0.2"
15
+ * implement storing attributes and ownership information