1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
# frozen_string_literal: true
module ReleaseHighlights
class Validator
attr_reader :errors, :file
def initialize(file:)
@file = file
@errors = []
end
def valid?
document = YAML.parse(File.read(file))
document.root.children.each do |entry|
entry = ReleaseHighlights::Validator::Entry.new(entry)
errors.push(entry.errors.full_messages) unless entry.valid?
end
errors.none?
end
def self.validate_all!
@all_errors = []
ReleaseHighlight.file_paths.each do |file_path|
instance = self.new(file: file_path)
@all_errors.push([instance.errors, instance.file]) unless instance.valid?
end
@all_errors.none?
end
def self.error_message
io = StringIO.new
@all_errors.each do |errors, file|
message = "Validation failed for #{file}"
line = -> { io.puts "-" * message.length }
line.call
io.puts message
line.call
errors.flatten.each { |error| io.puts "* #{error}" }
io.puts
end
io.string
end
end
end
|