Class: Glark::ZipFile

Inherits:
ArchiveFile show all
Includes:
Logue::Loggable
Defined in:
lib/glark/io/file/zip_file.rb

Instance Method Summary collapse

Methods inherited from ArchiveFile

#each, #list, #search, #search_archive_file, #search_list

Constructor Details

#initialize(fname, range, &blk) ⇒ ZipFile

Returns a new instance of ZipFile.



12
13
14
15
16
# File 'lib/glark/io/file/zip_file.rb', line 12

def initialize fname, range, &blk
  super fname, range
  
  check_rubyzip
end

Instance Method Details

#check_rubyzipObject



30
31
32
33
# File 'lib/glark/io/file/zip_file.rb', line 30

def check_rubyzip
  check_rubyzip_exists
  check_rubyzip_version
end

#check_rubyzip_existsObject



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/glark/io/file/zip_file.rb', line 35

def check_rubyzip_exists
  # Given that this is a gem, I'm not sure if it is installed with other
  # package managers. So the require is down here, used only if needed.
  begin
    require 'zip'
  rescue LoadError => e
    msg = "error loading zip gem: #{e}\n"
    msg << "to install this dependency, run 'gem install rubyzip'"
    info Rainbow::Presenter.new("msg: #{msg}").color(:red)
    raise msg
  end
  check_rubyzip_version
end

#check_rubyzip_versionObject



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/glark/io/file/zip_file.rb', line 49

def check_rubyzip_version
  require 'zip/version'
  reqver = '1.1.4'
  reqnum = version_to_number reqver
  currnum = version_to_number Zip::VERSION
  if currnum < reqnum
    msg = "error: support for zip files requires rubyzip version >= #{reqver}; current version is #{Zip::VERSION}"
    info Rainbow::Presenter.new("msg: #{msg}").color(:red)
    raise msg
  end        
end

#entry_name(entry) ⇒ Object



26
27
28
# File 'lib/glark/io/file/zip_file.rb', line 26

def entry_name entry
  entry.name
end

#get_readerObject



18
19
20
# File 'lib/glark/io/file/zip_file.rb', line 18

def get_reader 
  @zipfile = Zip::File.new @fname
end

#read(entry) ⇒ Object



22
23
24
# File 'lib/glark/io/file/zip_file.rb', line 22

def read entry
  @zipfile.read entry
end

#version_to_number(ver) ⇒ Object



61
62
63
64
# File 'lib/glark/io/file/zip_file.rb', line 61

def version_to_number ver
  vernums = ver.split('.')
  num = vernums.inject(0) { |s, n| 1000 * s + n.to_i }
end