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

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

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 59
59:   def initialize(io)
60:     @io = io
61:     @closed = false
62:   end

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 45
45:   def self.new(io)
46:     writer = super
47: 
48:     return writer unless block_given?
49: 
50:     begin
51:       yield writer
52:     ensure
53:       writer.close
54:     end
55: 
56:     nil
57:   end

Public Instance methods

[Source]

    # File lib/rubygems/package/tar_writer.rb, line 64
64:   def add_file(name, mode)
65:     check_closed
66: 
67:     raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
68: 
69:     name, prefix = split_name name
70: 
71:     init_pos = @io.pos
72:     @io.write "\0" * 512 # placeholder for the header
73: 
74:     yield RestrictedStream.new(@io) if block_given?
75: 
76:     size = @io.pos - init_pos - 512
77: 
78:     remainder = (512 - (size % 512)) % 512
79:     @io.write "\0" * remainder
80: 
81:     final_pos = @io.pos
82:     @io.pos = init_pos
83: 
84:     header = Gem::Package::TarHeader.new :name => name, :mode => mode,
85:                                          :size => size, :prefix => prefix
86: 
87:     @io.write header
88:     @io.pos = final_pos
89: 
90:     self
91:   end

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 93
 93:   def add_file_simple(name, mode, size)
 94:     check_closed
 95: 
 96:     name, prefix = split_name name
 97: 
 98:     header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
 99:                                          :size => size, :prefix => prefix).to_s
100: 
101:     @io.write header
102:     os = BoundedStream.new @io, size
103: 
104:     yield os if block_given?
105: 
106:     min_padding = size - os.written
107:     @io.write("\0" * min_padding)
108: 
109:     remainder = (512 - (size % 512)) % 512
110:     @io.write("\0" * remainder)
111: 
112:     self
113:   end

[Source]

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

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 119
119:   def close
120:     check_closed
121: 
122:     @io.write "\0" * 1024
123:     flush
124: 
125:     @closed = true
126:   end

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 128
128:   def closed?
129:     @closed
130:   end

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 132
132:   def flush
133:     check_closed
134: 
135:     @io.flush if @io.respond_to? :flush
136:   end

[Source]

     # File lib/rubygems/package/tar_writer.rb, line 138
138:   def mkdir(name, mode)
139:     check_closed
140: 
141:     name, prefix = split_name(name)
142: 
143:     header = Gem::Package::TarHeader.new :name => name, :mode => mode,
144:                                          :typeflag => "5", :size => 0,
145:                                          :prefix => prefix
146: 
147:     @io.write header
148: 
149:     self
150:   end

[Validate]