Class: Cabriolet::CAB::Parser
- Inherits:
-
Object
- Object
- Cabriolet::CAB::Parser
- Defined in:
- lib/cabriolet/cab/parser.rb
Overview
Parser reads and parses CAB file headers
Instance Attribute Summary collapse
-
#io_system ⇒ Object
readonly
Returns the value of attribute io_system.
Instance Method Summary collapse
-
#initialize(io_system) ⇒ Parser
constructor
Initialize a new parser.
-
#parse(filename) ⇒ Models::Cabinet
Parse a CAB file and return a Cabinet model.
-
#parse_handle(handle, filename, offset = 0, salvage = false, quiet = false) ⇒ Models::Cabinet
Parse a CAB from an already-open handle.
Constructor Details
#initialize(io_system) ⇒ Parser
Initialize a new parser
12 13 14 |
# File 'lib/cabriolet/cab/parser.rb', line 12 def initialize(io_system) @io_system = io_system end |
Instance Attribute Details
#io_system ⇒ Object (readonly)
Returns the value of attribute io_system.
7 8 9 |
# File 'lib/cabriolet/cab/parser.rb', line 7 def io_system @io_system end |
Instance Method Details
#parse(filename) ⇒ Models::Cabinet
Parse a CAB file and return a Cabinet model
21 22 23 24 25 26 |
# File 'lib/cabriolet/cab/parser.rb', line 21 def parse(filename) handle = @io_system.open(filename, Constants::MODE_READ) cabinet = parse_handle(handle, filename) @io_system.close(handle) cabinet end |
#parse_handle(handle, filename, offset = 0, salvage = false, quiet = false) ⇒ Models::Cabinet
Parse a CAB from an already-open handle
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/cabriolet/cab/parser.rb', line 37 def parse_handle(handle, filename, offset = 0, salvage = false, quiet = false) @salvage = salvage @quiet = quiet cabinet = Models::Cabinet.new(filename) cabinet.base_offset = offset # Seek to cabinet start @io_system.seek(handle, offset, Constants::SEEK_START) # Read and validate header header, folder_resv = read_header(handle, cabinet) validate_header(header) populate_cabinet_from_header(handle, cabinet, header) # Read folders read_folders(handle, cabinet, header, folder_resv) # Read files read_files(handle, cabinet, header, salvage) cabinet end |