# Report has event loop, knows type of input log it's looking for class Report cattr_reader :header, :combined_log attr_reader :input_log, :output_log class << self def publish(server, out) new(server).process(out) end end def initialize(server) @server = server @input_log = nil @output_log = nil end def process(combined) with_open_file(input_log, 'r') do |in| with_open_file(output_log, 'w') do |out| in.readlines do |line| combined << out << grep_my_ass_off(line) end end end end private def with_open_file(path, mode) if FILE.exists?(path) open(path, mode) do |file| yield file end if block_given? else STDERR.puts("oh shit") "" end end end