| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  | module Zip | 
					
						
							|  |  |  |   class Deflater < Compressor #:nodoc:all | 
					
						
							| 
									
										
										
										
											2013-06-03 02:33:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-31 00:03:17 +08:00
										 |  |  |     def initialize(output_stream, level = Zip.default_compression, encrypter = NullEncrypter.new) | 
					
						
							| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  |       super() | 
					
						
							| 
									
										
										
										
											2013-06-03 02:33:03 +08:00
										 |  |  |       @output_stream = output_stream | 
					
						
							|  |  |  |       @zlib_deflater = ::Zlib::Deflate.new(level, -::Zlib::MAX_WBITS) | 
					
						
							| 
									
										
										
										
											2015-01-07 09:45:01 +08:00
										 |  |  |       @size          = 0
 | 
					
						
							| 
									
										
										
										
											2013-08-15 06:00:27 +08:00
										 |  |  |       @crc           = ::Zlib.crc32 | 
					
						
							| 
									
										
										
										
											2014-12-31 00:03:17 +08:00
										 |  |  |       @encrypter     = encrypter | 
					
						
							| 
									
										
										
										
											2015-01-04 21:49:58 +08:00
										 |  |  |       @buffer_stream = ::StringIO.new('') | 
					
						
							| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-06-03 02:33:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  |     def << (data) | 
					
						
							| 
									
										
										
										
											2013-06-03 02:33:03 +08:00
										 |  |  |       val   = data.to_s | 
					
						
							|  |  |  |       @crc  = Zlib::crc32(val, @crc) | 
					
						
							| 
									
										
										
										
											2015-01-04 21:49:58 +08:00
										 |  |  |       @size += val.bytesize | 
					
						
							|  |  |  |       @buffer_stream << @zlib_deflater.deflate(data) | 
					
						
							| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def finish | 
					
						
							| 
									
										
										
										
											2015-01-04 21:49:58 +08:00
										 |  |  |       @output_stream << @encrypter.encrypt(@buffer_stream.string) | 
					
						
							| 
									
										
										
										
											2014-12-31 00:03:17 +08:00
										 |  |  |       @output_stream << @encrypter.encrypt(@zlib_deflater.finish) until @zlib_deflater.finished? | 
					
						
							| 
									
										
										
										
											2010-11-30 16:27:59 +08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     attr_reader :size, :crc | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Copyright (C) 2002, 2003 Thomas Sondergaard | 
					
						
							|  |  |  | # rubyzip is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the ruby license. |