Class Gem::Package::TarWriter
In: lib/rubygems/package/tar_writer.rb
Parent: Object

Allows writing of tar files

Methods

add_file   add_file_simple   check_closed   close   closed?   flush   mkdir   new   new  

Classes and Modules

Class Gem::Package::TarWriter::BoundedStream
Class Gem::Package::TarWriter::FileOverflow
Class Gem::Package::TarWriter::RestrictedStream

Public Class methods

Creates a new TarWriter that will write to io

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 94
94:   def initialize(io)
95:     @io = io
96:     @closed = false
97:   end

Creates a new TarWriter, yielding it if a block is given

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 77
77:   def self.new(io)
78:     writer = super
79: 
80:     return writer unless block_given?
81: 
82:     begin
83:       yield writer
84:     ensure
85:       writer.close
86:     end
87: 
88:     nil
89:   end

Public Instance methods

Adds file name with permissions mode, and yields an IO for writing the file to

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 103
103:   def add_file(name, mode) # :yields: io
104:     check_closed
105: 
106:     raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
107: 
108:     name, prefix = split_name name
109: 
110:     init_pos = @io.pos
111:     @io.write "\0" * 512 # placeholder for the header
112: 
113:     yield RestrictedStream.new(@io) if block_given?
114: 
115:     size = @io.pos - init_pos - 512
116: 
117:     remainder = (512 - (size % 512)) % 512
118:     @io.write "\0" * remainder
119: 
120:     final_pos = @io.pos
121:     @io.pos = init_pos
122: 
123:     header = Gem::Package::TarHeader.new :name => name, :mode => mode,
124:                                          :size => size, :prefix => prefix
125: 
126:     @io.write header
127:     @io.pos = final_pos
128: 
129:     self
130:   end

Add file name with permissions mode size bytes long. Yields an IO to write the file to.

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 136
136:   def add_file_simple(name, mode, size) # :yields: io
137:     check_closed
138: 
139:     name, prefix = split_name name
140: 
141:     header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
142:                                          :size => size, :prefix => prefix).to_s
143: 
144:     @io.write header
145:     os = BoundedStream.new @io, size
146: 
147:     yield os if block_given?
148: 
149:     min_padding = size - os.written
150:     @io.write("\0" * min_padding)
151: 
152:     remainder = (512 - (size % 512)) % 512
153:     @io.write("\0" * remainder)
154: 
155:     self
156:   end

Raises IOError if the TarWriter is closed

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 161
161:   def check_closed
162:     raise IOError, "closed #{self.class}" if closed?
163:   end

Closes the TarWriter

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 168
168:   def close
169:     check_closed
170: 
171:     @io.write "\0" * 1024
172:     flush
173: 
174:     @closed = true
175:   end

Is the TarWriter closed?

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 180
180:   def closed?
181:     @closed
182:   end

Flushes the TarWriter‘s IO

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 187
187:   def flush
188:     check_closed
189: 
190:     @io.flush if @io.respond_to? :flush
191:   end

Creates a new directory in the tar file name with mode

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 196
196:   def mkdir(name, mode)
197:     check_closed
198: 
199:     name, prefix = split_name(name)
200: 
201:     header = Gem::Package::TarHeader.new :name => name, :mode => mode,
202:                                          :typeflag => "5", :size => 0,
203:                                          :prefix => prefix
204: 
205:     @io.write header
206: 
207:     self
208:   end

[Validate]