Class: MiniTarball::Writer

Inherits:
Object
  • Object
show all
Defined in:
lib/mini_tarball/writer.rb

Constant Summary collapse

END_OF_TAR_BLOCK_SIZE =
1024

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io) ⇒ Writer

Returns a new instance of Writer.



29
30
31
32
33
34
35
36
# File 'lib/mini_tarball/writer.rb', line 29

def initialize(io)
  check_io!(io)

  @io = io
  @write_only_io = WriteOnlyStream.new(@io)
  @header_writer = HeaderWriter.new(@write_only_io)
  @closed = false
end

Class Method Details

.create(filename) {|| ... } ⇒ Object

Parameters:

  • filename (String)

Yield Parameters:



9
10
11
12
13
# File 'lib/mini_tarball/writer.rb', line 9

def self.create(filename)
  File.open(filename, "wb") do |file|
    use(file) { |writer| yield(writer) }
  end
end

.use(io) {|| ... } ⇒ Object

Parameters:

  • io (IO)

Yield Parameters:



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mini_tarball/writer.rb', line 17

def self.use(io)
  writer = new(io)

  begin
    yield(writer)
  ensure
    writer.close
  end

  nil
end

Instance Method Details

#add_file(name:, mode: 0644, uname: "nobody", gname: "nogroup", uid: nil, gid: nil, mtime: nil) {|@write_only_io| ... } ⇒ Object

Yields:

  • (@write_only_io)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/mini_tarball/writer.rb', line 38

def add_file(name:, mode: 0644, uname: "nobody", gname: "nogroup", uid: nil, gid: nil, mtime: nil)
  check_closed!

  header_start_position = @io.pos
  @header_writer.write(Header.new(name: name))

  file_start_position = @io.pos
  yield @write_only_io
  file_size = @io.pos - file_start_position
  write_padding

  @io.seek(header_start_position)
  @header_writer.write(Header.new(
    name: name,
    size: file_size,
    mode: mode,
    uid: uid,
    gid: gid,
    uname: uname,
    gname: gname,
    mtime: mtime || Time.now.utc
  ))

  @io.seek(0, IO::SEEK_END)
end

#closeObject



68
69
70
71
72
73
74
# File 'lib/mini_tarball/writer.rb', line 68

def close
  check_closed!

  @io.write("\0" * END_OF_TAR_BLOCK_SIZE)
  @io.close
  @closed = true
end

#closed?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/mini_tarball/writer.rb', line 64

def closed?
  @closed
end