Sha256: c357fd4fc12e2017b8b2eded7238ec16458978affde3611d6890d67ea42129c0
Contents?: true
Size: 1.58 KB
Versions: 6
Compression:
Stored size: 1.58 KB
Contents
module NFAgent class Payload < Struct.new(:data, :checksum, :filename) def initialize yield self end def attempt @attempt || 1 end def attempt=(value) @attempt = value.to_i end def increment_attempt! @attempt ||= 1 @attempt += 1 end def size (self.data || "").size + 1 end def write_to_disk(directory) File.open(File.join(directory, "#{self.checksum}-#{self.attempt}"), "w") do |file| file << self.data end end def lock return if locked? FileUtils.touch(lockfile) if filename yield FileUtils.rm_f(lockfile) if filename end def locked? filename && File.exists?(lockfile) end def self.read_from_file(filename) # Ensure the file is only relative filename = File.basename(filename) self.new do |payload| payload.filename = filename payload.checksum, payload.attempt = filename.split("-") payload.data = "" ref = File.join(Config.dump_dir, filename) File.open(ref, "r") do |file| payload.data << file.read end end end def destroy! FileUtils.rm_f(File.join(Config.dump_dir, self.filename)) if self.filename end def try_again_later # TODO: Move the file to a new name with a later timetamp FileUtils.mv(File.join(Config.dump_dir, self.filename), File.join(Config.dump_dir, "#{self.checksum}-#{self.attempt}")) end private def lockfile File.join(Config.dump_dir, "#{filename}.lock") if filename end end end
Version data entries
6 entries across 6 versions & 1 rubygems