class AmpkWriter
Public Class Methods
new(path, private_key) { |self| ... }
click to toggle source
# File lib/ampk/writer.rb, line 4 def initialize(path, private_key, &block) @fp = File.open(path,'wb') write("AMPK") @private_key = private_key if block_given? begin yield(self) ensure close() end end end
Public Instance Methods
add_entity(name, data, options = {})
click to toggle source
# File lib/ampk/writer.rb, line 16 def add_entity(name, data, options = {}) write_entry("NAME", name) write_entry("DLEN", size(data).to_s) if data.respond_to?(:encoding) write_entry("ENCD", data.encoding.name) data = data.force_encoding("ASCII-8BIT") end write_entry("TYPE", options[:type] || 'application/octet-stream') if options[:sign] || options[:signature] write_entry("SIGN", options[:signature] || @private_key.sign(data)) end filter = "" if options[:encrypt] || options[:crypt] filter << "C" data = @private_key.encrypt(data) end orig_size = size(data) if options[:compress] and size(data) > 256 filter << "Z" data = Zlib::Deflate.deflate(data) end unless filter.empty? write_entry('FILT', filter) end write_size = size(data) write_entry("DATA", data) end
close()
click to toggle source
# File lib/ampk/writer.rb, line 46 def close write('ENDS') @fp.close() end
Protected Instance Methods
size(data)
click to toggle source
# File lib/ampk/writer.rb, line 52 def size(data) sz = data.size sz = data.bytesize if data.respond_to?(:bytesize) sz end
write(str)
click to toggle source
# File lib/ampk/writer.rb, line 57 def write(str) @fp.write(str) end
write_data(data)
click to toggle source
# File lib/ampk/writer.rb, line 60 def write_data(data) write("#{size(data)}\0") write(data) end
write_entry(name, data)
click to toggle source
# File lib/ampk/writer.rb, line 64 def write_entry(name, data) write(name) write_data(data) end