Class JavaClass::Classpath::TemporaryUnpacker
In: lib/javaclass/classpath/temporary_unpacker.rb
Parent: Object

Unpack a JAR (ZIP) into a temporary folder.

Author:Peter Kofler

Methods

Constants

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.

Attributes

folder  [R]  The temporary folder. This folder will be deleted after Ruby shuts down.

Public Class methods

Set the given jarfile to unpack.

[Source]

# 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

Public Instance methods

Create the temporary folder where it will be unpacked to.

[Source]

# 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.

[Source]

# 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.

[Source]

# 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

[Validate]