Class | JavaClass::Classpath::TemporaryUnpacker |
In: |
lib/javaclass/classpath/temporary_unpacker.rb
|
Parent: | Object |
Unpack a JAR (ZIP) into a temporary folder.
Author: | Peter Kofler |
COMMANDS | = | [ # 7zip 9.20 '7za x -bd -o<folder> -y <jar> 2>&1', # Unzip 5.42 'unzip -o -qq <jar> -d <folder> 2>&1', # WinZip 8.1 'WinZip32.exe -min -e -o <jar> <folder>', ] | Command templates for external too like 7zip or zip. |
folder | [R] | The temporary folder. This folder will be deleted after Ruby shuts down. |
Set the given jarfile to unpack.
# File lib/javaclass/classpath/temporary_unpacker.rb, line 26 def initialize(jarfile) @jarfile = jarfile if !defined?(@@unpack_strategies) # use unzip first, fallback by hand @@unpack_strategies = COMMANDS.map{ |c| Proc.new{ |jar, folder| TemporaryUnpacker::unpack_shell(c, jar, folder) } } + [ Proc.new{ |jar, folder| TemporaryUnpacker::unpack_ruby(jar, folder) } ] end end
Create the temporary folder where it will be unpacked to.
# File lib/javaclass/classpath/temporary_unpacker.rb, line 37 def create_temporary_folder folder = File.join(find_temp_folder, "temp_#{File.basename(@jarfile)}_#{Time.now.to_i.to_s}") FileUtils.mkdir_p(folder) at_exit { FileUtils.rm_r(folder) } @folder = folder end
Return the temp folder if a variable is set, else returm /tmp.
# File lib/javaclass/classpath/temporary_unpacker.rb, line 62 def find_temp_folder TemporaryUnpacker::escape_folder( if ENV['TEMP'] ENV['TEMP'] # Windows elsif ENV['TMP'] ENV['TMP'] else '/tmp' end ) end
Unpack the given jar file.
# File lib/javaclass/classpath/temporary_unpacker.rb, line 45 def unpack! unless defined?(@folder) && @folder raise IOError, 'no temporary folder created' end # Find the first working strategy and keep it if ! @@unpack_strategies.first.call(@jarfile, @folder) warn("Dropping unpacker for #{@jarfile}. Install 7zip or unzip!") @@unpack_strategies.delete_at(0) if @@unpack_strategies.empty? raise 'no suitable unpack strategy found' end unpack! end end