require 'cucumber/messages' require 'cucumber/html_formatter/template_writer' require 'cucumber/html_formatter/assets_loader' module Cucumber module HTMLFormatter class Formatter attr_reader :out def initialize(out) @out = out @pre_message_written = false @first_message = true end def process_messages(messages) write_pre_message messages.each { |message| write_message(message) } write_post_message end def write_pre_message return if @pre_message_written out.puts(pre_message) @pre_message_written = true end def write_message(message) unless @first_message out.puts(',') end out.print(message.to_json) @first_message = false end def write_post_message out.print(post_message) end private def assets_loader @assets_loader ||= AssetsLoader.new end def pre_message [ template_writer.write_between(nil, '{{css}}'), assets_loader.css, template_writer.write_between('{{css}}', '{{messages}}') ].join("\n") end def post_message [ template_writer.write_between('{{messages}}', '{{script}}'), assets_loader.script, template_writer.write_between('{{script}}', nil) ].join("\n") end def template_writer @template_writer ||= TemplateWriter.new(assets_loader.template) end end end end