class Covered::Policy

def call(...)

def call(...)
	@reports.each do |report|
		report.call(self, ...)
	end
end

def capture

def capture
	@capture ||= Forks.new(
		Capture.new(@output)
	)
end

def finish

def finish
	capture.finish
end

def freeze

def freeze
	return self if frozen?
	
	capture
	@reports.freeze
	
	super
end

def include(...)

def include(...)
	@output = Include.new(@output, ...)
end

def initialize

def initialize
	super(Files.new)
	
	@reports = []
	@capture = nil
end

def only(...)

def only(...)
	@output = Only.new(@output, ...)
end

def persist!(...)

def persist!(...)
	@output = Persist.new(@output, ...)
end

def reports!(reports)

def reports!(reports)
	if reports.is_a?(String)
		names = reports.split(",")
		
		names.each do |name|
			begin
				klass = Covered.const_get(name)
				@reports << klass.new
			rescue NameError
				@reports << Autoload.new(name)
			end
		end
	elsif reports == true
		@reports << Covered::BriefSummary.new
	elsif reports == false
		@reports.clear
	elsif reports.is_a?(Array)
		@reports.concat(reports)
	else
		@reports << reports
	end
end

def root(...)

def root(...)
	@output = Root.new(@output, ...)
end

def skip(...)

def skip(...)
	@output = Skip.new(@output, ...)
end

def start

def start
	capture.start
end