class GZippedTar::Tar::Header
A header for a tar file
Constants
- BLANK
- ChecksumField
- FIELDS
rubocop:disable Layout/ExtraSpacing
- Field
- HEADER_LENGTH
- PACK_FORMAT
rubocop:enable Layout/ExtraSpacing
- UNPACK_FORMAT
Attributes
values[R]
Public Class Methods
from(stream)
click to toggle source
Creates a tar header from IO stream
# File lib/gzipped_tar/tar/header.rb, line 72 def self.from(stream) header = stream.read HEADER_LENGTH return new(BLANK) if header.nil? empty = (header == "\0" * HEADER_LENGTH) new values_from_array(header.unpack(UNPACK_FORMAT)).merge(:empty => empty) end
new(values)
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 91 def initialize(values) validate values @empty = values[:empty] @values = FIELDS.inject({}) do |hash, field| hash[field.name] = field.translate values[field.name] hash end @values[:typeflag] = "0" if @values[:typeflag].empty? end
values_from_array(values)
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 81 def self.values_from_array(values) hash = {} FIELDS.each_with_index do |field, index| hash[field.name] = field.translate values[index] end hash end
Public Instance Methods
empty?()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 108 def empty? @empty end
name()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 112 def name @values[:name] end
prefix()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 116 def prefix @values[:prefix] end
size()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 120 def size values[:size] end
Private Instance Methods
build_header()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 139 def build_header header = header_values.pack PACK_FORMAT header + ("\0" * ((HEADER_LENGTH - header.size) % HEADER_LENGTH)) end
calculate_checksum(header)
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 135 def calculate_checksum(header) header.unpack("C*").inject { |a, b| a + b } end
header_values()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 145 def header_values FIELDS.collect { |field| field.to_s values[field.name] }.flatten end
update_checksum()
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 149 def update_checksum values[:checksum] = nil values[:checksum] = calculate_checksum(build_header) end
validate(values)
click to toggle source
# File lib/gzipped_tar/tar/header.rb, line 154 def validate(values) FIELDS.select(&:required?).each do |field| next if values[field.name] raise ArgumentError, ":name, :size, :prefix and :mode required" end end