Class: Omnizip::Formats::Iso::DirectoryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/omnizip/formats/iso/directory_builder.rb

Overview

ISO 9660 Directory Structure Builder

Builds the hierarchical directory structure for an ISO image, allocating sectors for directories and files.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files, directories, options = {}) ⇒ DirectoryBuilder

Initialize directory builder

Parameters:

  • files (Array<Hash>)

    Files to include

  • directories (Array<Hash>)

    Directories to include

  • options (Hash) (defaults to: {})

    Builder options



28
29
30
31
32
33
34
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 28

def initialize(files, directories, options = {})
  @files = files
  @directories = directories
  @level = options.fetch(:level, 2)
  @rock_ridge = options.fetch(:rock_ridge, false)
  @current_sector = 22 # After volume descriptors and path tables
end

Instance Attribute Details

#directoriesArray<Hash> (readonly)

Returns Directories to add.

Returns:

  • (Array<Hash>)

    Directories to add



15
16
17
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 15

def directories
  @directories
end

#filesArray<Hash> (readonly)

Returns Files to add.

Returns:

  • (Array<Hash>)

    Files to add



12
13
14
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 12

def files
  @files
end

#levelInteger (readonly)

Returns ISO level.

Returns:

  • (Integer)

    ISO level



18
19
20
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 18

def level
  @level
end

#rock_ridgeBoolean (readonly)

Returns Rock Ridge enabled.

Returns:

  • (Boolean)

    Rock Ridge enabled



21
22
23
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 21

def rock_ridge
  @rock_ridge
end

Instance Method Details

#buildHash

Build directory structure

Returns:

  • (Hash)

    Complete directory structure with allocations



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/omnizip/formats/iso/directory_builder.rb', line 39

def build
  # Build directory tree
  tree = build_directory_tree

  # Allocate sectors for directories and files
  allocate_sectors(tree)

  # Build path table
  path_table = build_path_table(tree)

  {
    root: tree,
    directories: flatten_directories(tree),
    files: @files,
    path_table: path_table,
    path_table_size: path_table.bytesize,
    total_sectors: @current_sector,
  }
end