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 93
93:   def initialize(io)
94:     @io = io
95:     @closed = false
96:   end

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

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 76
76:   def self.new(io)
77:     writer = super
78: 
79:     return writer unless block_given?
80: 
81:     begin
82:       yield writer
83:     ensure
84:       writer.close
85:     end
86: 
87:     nil
88:   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 102
102:   def add_file(name, mode) # :yields: io
103:     check_closed
104: 
105:     raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
106: 
107:     name, prefix = split_name name
108: 
109:     init_pos = @io.pos
110:     @io.write "\0" * 512 # placeholder for the header
111: 
112:     yield RestrictedStream.new(@io) if block_given?
113: 
114:     size = @io.pos - init_pos - 512
115: 
116:     remainder = (512 - (size % 512)) % 512
117:     @io.write "\0" * remainder
118: 
119:     final_pos = @io.pos
120:     @io.pos = init_pos
121: 
122:     header = Gem::Package::TarHeader.new :name => name, :mode => mode,
123:                                          :size => size, :prefix => prefix
124: 
125:     @io.write header
126:     @io.pos = final_pos
127: 
128:     self
129:   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 135
135:   def add_file_simple(name, mode, size) # :yields: io
136:     check_closed
137: 
138:     name, prefix = split_name name
139: 
140:     header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
141:                                          :size => size, :prefix => prefix).to_s
142: 
143:     @io.write header
144:     os = BoundedStream.new @io, size
145: 
146:     yield os if block_given?
147: 
148:     min_padding = size - os.written
149:     @io.write("\0" * min_padding)
150: 
151:     remainder = (512 - (size % 512)) % 512
152:     @io.write("\0" * remainder)
153: 
154:     self
155:   end

Raises IOError if the TarWriter is closed

[Source]

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

Closes the TarWriter

[Source]

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

Is the TarWriter closed?

[Source]

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

Flushes the TarWriter‘s IO

[Source]

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

Creates a new directory in the tar file name with mode

[Source]

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

[Validate]