Class: MiniTarball::Writer
- Inherits:
-
Object
- Object
- MiniTarball::Writer
- Defined in:
- lib/mini_tarball/writer.rb
Constant Summary collapse
- END_OF_TAR_BLOCK_SIZE =
1024
Class Method Summary collapse
Instance Method Summary collapse
- #add_file(name:, mode: 0644, uname: "nobody", gname: "nogroup", uid: nil, gid: nil, mtime: nil) {|@write_only_io| ... } ⇒ Object
- #close ⇒ Object
- #closed? ⇒ Boolean
-
#initialize(io) ⇒ Writer
constructor
A new instance of Writer.
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
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
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
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 |
#close ⇒ Object
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
64 65 66 |
# File 'lib/mini_tarball/writer.rb', line 64 def closed? @closed end |