Class: Zip::FileSystem::ZipFileNameMapper

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/zip/filesystem/zip_file_name_mapper.rb

Overview

All access to Zip::File from FileSystem::File and FileSystem::Dir goes through a ZipFileNameMapper, which has one responsibility: ensure

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(zip_file) ⇒ ZipFileNameMapper

Returns a new instance of ZipFileNameMapper.



10
11
12
13
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 10

def initialize(zip_file)
  @zip_file = zip_file
  @pwd = '/'
end

Instance Attribute Details

#pwdObject

Returns the value of attribute pwd.



15
16
17
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 15

def pwd
  @pwd
end

Instance Method Details

#eachObject

Turns entries into strings and adds leading / and removes trailing slash on directories



61
62
63
64
65
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 61

def each
  @zip_file.each do |e|
    yield("/#{e.to_s.chomp('/')}")
  end
end

#expand_path(path) ⇒ Object



67
68
69
70
71
72
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 67

def expand_path(path)
  expanded = path.start_with?('/') ? path.dup : ::File.join(@pwd, path)
  expanded.gsub!(/\/\.(\/|$)/, '')
  expanded.gsub!(/[^\/]+\/\.\.(\/|$)/, '')
  expanded.empty? ? '/' : expanded
end

#find_entry(filename) ⇒ Object



17
18
19
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 17

def find_entry(filename)
  @zip_file.find_entry(expand_to_entry(filename))
end

#get_entry(filename) ⇒ Object



21
22
23
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 21

def get_entry(filename)
  @zip_file.get_entry(expand_to_entry(filename))
end

#get_input_stream(filename, &a_proc) ⇒ Object



25
26
27
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 25

def get_input_stream(filename, &a_proc)
  @zip_file.get_input_stream(expand_to_entry(filename), &a_proc)
end

#get_output_stream(filename, permissions = nil, &a_proc) ⇒ Object



29
30
31
32
33
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 29

def get_output_stream(filename, permissions = nil, &a_proc)
  @zip_file.get_output_stream(
    expand_to_entry(filename), permissions: permissions, &a_proc
  )
end

#glob(pattern, *flags, &block) ⇒ Object



35
36
37
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 35

def glob(pattern, *flags, &block)
  @zip_file.glob(expand_to_entry(pattern), *flags, &block)
end

#mkdir(filename, permissions = 0o755) ⇒ Object



55
56
57
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 55

def mkdir(filename, permissions = 0o755)
  @zip_file.mkdir(expand_to_entry(filename), permissions)
end

#read(filename) ⇒ Object



39
40
41
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 39

def read(filename)
  @zip_file.read(expand_to_entry(filename))
end

#remove(filename) ⇒ Object



43
44
45
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 43

def remove(filename)
  @zip_file.remove(expand_to_entry(filename))
end

#rename(filename, new_name, &continue_on_exists_proc) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/zip/filesystem/zip_file_name_mapper.rb', line 47

def rename(filename, new_name, &continue_on_exists_proc)
  @zip_file.rename(
    expand_to_entry(filename),
    expand_to_entry(new_name),
    &continue_on_exists_proc
  )
end