class Blufin::YmlErrorHandler

Constants

ANNOTATIONS_NOT_EXPECTED
ANNOTATIONS_ONE_OR_ANOTHER
API_ENDPOINTS_MISSING
API_ENDPOINTS_NOT_ALLOWED
API_METHOD_INVALID_FOR_REQUIRED_OBJECT
ARRAY_HASHES_EXPECTED
ARRAY_KEY_ROGUE
ARRAY_STRING_EXPECTED
ARRAY_VALUE_BLANK
ARRAY_VALUE_REGEX
COLOR_ERROR_MESSAGE
COLOR_TITLE
CONFIG
CRON
DATA_NOT_ALPHABETICAL
DIRECTORY_NOT_EXPECTED
DIRECTORY_NOT_FOUND
EMBEDDED_ANNOTATION_MISSING
EMBEDDED_ANNOTATION_UNNECESSARY
EMBEDDED_CONFIG_CANNOT_BE_ENCRYPTED
EMBEDDED_DATA_TYPE_INVALID
EMBEDDED_EXTRA_VALUE_INVALID
EMBEDDED_FIELD_MISSING
EMBEDDED_FIELD_WRONG_TYPE
EMBEDDED_FKEY_INVALID
EMBEDDED_FLAGS_INVALID
EMBEDDED_MUST_BE_ENCRYPTED
EMBEDDED_OBJECT_DATA_NOT_FOUND
EMBEDDED_OBJECT_INVALID_ABSTRACTION
EMBEDDED_OBJECT_INVALID_EXTENSION
EMBEDDED_OBJECT_INVALID_LINE
EMBEDDED_OBJECT_INVALID_NAME
EMBEDDED_OBJECT_INVALID_REF_LENGTH
EMBEDDED_OBJECT_INVALID_REF_REGEX
EMBEDDED_OBJECT_INVALID_REGEX
EMBEDDED_OBJECT_INVALID_SCHEMA
EMBEDDED_OBJECT_NOT_FOUND

EVERYTHING IN THE 5000 (OR ABOVE) RANGE PRODUCES ERRORS WITHOUT SECTION/FIELD OUTPUT (AS THEY ARE GENERALLY FILE RELATED).

EMBEDDED_OBJECT_NO_ANNOTATION
EMBEDDED_OBJECT_NO_TABLE
EVENT
FIELD_BOOLEAN
FIELD_CANNOT_BE_BLANK
FIELD_FILE
FIELD_INVALID_TYPE
FIELD_INVALID_VALUE
FIELD_MISSING
FIELD_MISSING_EMPTY
FIELD_NAME_TRANSIENT_CONFLICT
FIELD_ORDER
FIELD_REQUIRES_SUB_FIELDS
FIELD_ROGUE
FIELD_TEXT_CAPITALIZED
FIELD_TEXT_NOT_DEFINED
FIELD_TEXT_REGEX
FIELD_UNNECESSARY
FILE_CONTENT_MISMATCH
FILE_EMPTY
FILE_INVALID
FILE_NOT_EXPECTED
FILE_NOT_FOUND
FILE_NOT_FOUND_GITIGNORE
MAVEN_MODULE_DUPLICATE
MAVEN_MODULE_NOT_DEFINED
MAVEN_MODULE_NOT_REGISTERED
MAVEN_MODULE_ORDER
MAVEN_MODULE_UNDEFINED_PARENT
MAVEN_MODULE_UNRECOGNIZED
MAVEN_MODULE_UNUSED_PARENT
MDASH
SCHEMA
SECTION_ALPHABETICAL
SECTION_ORDER
SECTION_TITLE_REGEX
SECTION_VALUE_REGEX
STYLE_MULTIPLE_BLANK_LINES
STYLE_TRAILING_BLANK_LINES
STYLE_UNRECOGNIZED_LINE
TEST_NOT_EXPECTED
TEST_NOT_FOUND
UNEXPECTED_EXCEPTION
WORKER_MESSAGE_TYPE_NOT_FOUND

Public Class Methods

error_type_meta() click to toggle source

Returns a Hash of valid error types with titles/descriptions. Moved to top of file for easier programming. @return Hash

# File lib/core/error_handling/yml_error_handler.rb, line 98
def self.error_type_meta
    {
        FILE_EMPTY                             => ['EMPTY FILE', "The YML parser expected #{Blufin::Terminal::format_action('file(s)')} to contain data:"],
        FILE_INVALID                           => ['INVALID FILE', "The YML parser was unable to parse the following #{Blufin::Terminal::format_action('file(s)')}:", 'Unable to parse: %s'],
        FILE_NOT_FOUND                         => ['FILE NOT FOUND', "The YML parser expected #{Blufin::Terminal::format_action('file(s)')} to exist:", 'File not found: %s'],
        TEST_NOT_FOUND                         => ['TEST NOT FOUND', "The YML parser expected #{Blufin::Terminal::format_action('tests(s)')} to exist (most likely due to missing #{Blufin::SiteServices::ANNOTATION_TEST_REQUIRED}):", 'Test not found: %s'],
        FILE_NOT_FOUND_GITIGNORE               => ['GITIGNORE NOT FOUND', "The YML parser expected #{Blufin::Terminal::format_action('.gitignore')} to exist:", 'File not found in: %s'],
        FILE_NOT_EXPECTED                      => ['FILE NOT EXPECTED', "The YML parser did not expect certain #{Blufin::Terminal::format_action('file(s)')} to exist:", 'Rogue file: %s'],
        TEST_NOT_EXPECTED                      => ['TEST NOT EXPECTED', "The YML parser did not expect certain #{Blufin::Terminal::format_action('test(s)')} to exist (most likely due to missing #{Blufin::SiteServices::ANNOTATION_TEST_NOT_RELATED_TO_CLASS}):", 'Rogue test: %s'],
        FILE_CONTENT_MISMATCH                  => ['FILE CONTENT MISMATCH', "The YML parser expect file(s) to have certain #{Blufin::Terminal::format_action('content(s)')} but it wasn't found:"],
        DIRECTORY_NOT_FOUND                    => ['DIRECTORY NOT FOUND', "The YML parser expected #{Blufin::Terminal::format_action('director(ies)')} to exist:", 'Directory not found: %s'],
        DIRECTORY_NOT_EXPECTED                 => ['DIRECTORY NOT EXPECTED', "The YML parser did not expect certain #{Blufin::Terminal::format_action('director(ies)')} to exist:", 'Rogue directory: %s'],
        SECTION_ORDER                          => ['SECTION ORDER MISMATCH', "The YML parser expected #{Blufin::Terminal::format_action('section(s)')} within a file to be in a certain order:"],
        SECTION_TITLE_REGEX                    => ['SECTION TITLE REGEX MISMATCH', "The YML parser expected section title to match #{Blufin::Terminal::format_action('regex')}:", '%s does not match regex: %s'],
        SECTION_VALUE_REGEX                    => ['SECTION VALUE REGEX MISMATCH', "The YML parser expected section value to match #{Blufin::Terminal::format_action('regex')}:", '%s does not match regex: %s'],
        SECTION_ALPHABETICAL                   => ['SECTION NOT ALPHABETICAL', "The YML parser expected section keys to be in #{Blufin::Terminal::format_action('alphabetical')} order:", '%s is in the wrong position.'],
        ARRAY_KEY_ROGUE                        => ['ROGUE KEY', "The YML parser did not recognize certain #{Blufin::Terminal::format_action('array key(s)')} to exist:", 'Rogue key: %s'],
        ARRAY_VALUE_REGEX                      => ['ARRAY VALUE REGEX MISMATCH', "The YML parser expected section array value to match #{Blufin::Terminal::format_action('regex')}:", '%s does not match regex: %s'],
        ARRAY_VALUE_BLANK                      => ['ARRAY VALUE BLANK', "#{Blufin::Terminal::format_action('Array value(s)')} cannot be blank:", 'Blank key: %s'],
        ARRAY_STRING_EXPECTED                  => ['STRING ARRAY EXPECTED', "The YML parser expected an #{Blufin::Terminal::format_action('Array of Strings')}:", 'Got: %s'],
        ARRAY_HASHES_EXPECTED                  => ['HASH ARRAY EXPECTED', "The YML parser expected an #{Blufin::Terminal::format_action('Array of Hashes')}:", 'Got: %s'],
        ANNOTATIONS_ONE_OR_ANOTHER             => ['ANNOTATIONS MISMATCH', "The YML parser expected either one #{Blufin::Terminal::format_action('annotation')} or another:", '%s cannot be used together.'],
        ANNOTATIONS_NOT_EXPECTED               => ['ANNOTATIONS NOT EXPECTED', "The YML parser did not expect certain #{Blufin::Terminal::format_action('annotation(s)')} to exist in file(s):", '%s cannot be used in this file.'],
        FIELD_MISSING_EMPTY                    => ['MISSING/EMPTY FIELD', "The YML parser expected certain #{Blufin::Terminal::format_action('field(s)')} to exist and not be empty:"],
        FIELD_BOOLEAN                          => ['INVALID VALUE - BOOLEAN', "Boolean fields must be #{Blufin::Terminal::format_action('TRUE')} or #{Blufin::Terminal::format_action('FALSE')}:"],
        FIELD_FILE                             => ['INVALID VALUE - FILE NOT FOUND', "The YML parser expected certain #{Blufin::Terminal::format_action('file(s)')} to exist:", 'File not found: %s'],
        FIELD_TEXT_CAPITALIZED                 => ['VALUE NOT CAPITALIZED', "The YML parser expected text in field(s) to be #{Blufin::Terminal::format_action('capitalized')}:"],
        FIELD_TEXT_REGEX                       => ['VALUE REGEX MISMATCH', "The YML parser expected text in field(s) to match #{Blufin::Terminal::format_action('regex')}:", '%s does not match regex: %s'],
        FIELD_TEXT_NOT_DEFINED                 => ['VALUE NOT DEFINED', "The YML parser expected text in field(s) to match pre-set #{Blufin::Terminal::format_action('values')}:"],
        FIELD_ROGUE                            => ['ROGUE PROPERTY', "The YML parser did not recognize certain #{Blufin::Terminal::format_action('properties')} to exist:", 'Rogue property: %s'],
        FIELD_UNNECESSARY                      => ['UNNECESSARY PROPERTY', "The following #{Blufin::Terminal::format_action('properties')} are unnecessary with the current configuration:", 'Unnecessary field: %s'],
        FIELD_MISSING                          => ['PROPERTY MISSING', "The YML parser expected #{Blufin::Terminal::format_action('properties')} within a section to exist:"],
        FIELD_ORDER                            => ['PROPERTY ORDER MISMATCH', "The YML parser expected #{Blufin::Terminal::format_action('properties')} within a section to be in a certain order:"],
        FIELD_INVALID_VALUE                    => ['PROPERTY INVALID VALUE', "The YML parser expected properties to contain a certain  #{Blufin::Terminal::format_action('value(s)')}:", 'Valid value(s): %s'],
        FIELD_INVALID_TYPE                     => ['PROPERTY INVALID TYPE', "The YML parser expected properties to to be a certain #{Blufin::Terminal::format_action('type')}:"],
        FIELD_REQUIRES_SUB_FIELDS              => ['PROPERTY REQUIRES SUB-FIELDS', "The YML parser expected properties to contain #{Blufin::Terminal::format_action('sub-properties')}:"],
        FIELD_CANNOT_BE_BLANK                  => ['PROPERTY CANNOT BE BLANK', "Optional properties -- if present -- #{Blufin::Terminal::format_action('cannot be empty')}:", 'Empty properties: %s'],
        FIELD_NAME_TRANSIENT_CONFLICT          => ['PROPERTY NAME TRANSIENT CONFLICT', "Property name conflicts with an auto-generated #{Blufin::Terminal::format_action('transient property')}:", 'Conflicting property: %s'],
        STYLE_MULTIPLE_BLANK_LINES             => ['UNNECESSARY BLANK LINE', "Unnecessary #{Blufin::Terminal::format_action('blank line(s)')} found in YML file(s):", 'Line: %s'],
        STYLE_TRAILING_BLANK_LINES             => ['TRAILING BLANK LINE(S)', "#{Blufin::Terminal::format_action('Trailing blank line(s)')} are not allowed in YML files:", 'Line: %s'],
        STYLE_UNRECOGNIZED_LINE                => ['UNRECOGNIZED LINE', "Something is wrong with this #{Blufin::Terminal::format_action('line')}. Perhaps check formatting, key-capitalization or whitespace?", 'Line: %s'],
        API_ENDPOINTS_MISSING                  => ['API END-POINTS MISSING', "The following #{Blufin::Terminal::format_action('table(s)')} require all HTTP method end-points because they are #{Blufin::Terminal::format_action(Blufin::ScannerJavaEmbeddedObjects::EMBEDDED)}:", 'Needs GET, POST, PATCH & DELETE.'],
        API_ENDPOINTS_NOT_ALLOWED              => ['API END-POINTS NOT ALLOWED', "The following #{Blufin::Terminal::format_action('table(s)')} do not allow POST/PUT/PATCH/DELETE HTTP method(s)because they are #{Blufin::Terminal::format_action(Blufin::ScannerJavaEmbeddedObjects::EMBEDDED)}:", 'Found: %s'],
        API_METHOD_INVALID_FOR_REQUIRED_OBJECT => ['API METHOD INVALID FOR REQUIRED OBJECT', "#{Blufin::Terminal::format_action(Blufin::YmlSchemaValidator::REQUIRED)} and #{Blufin::Terminal::format_action(Blufin::YmlSchemaValidator::REQUIRED_IF)} objects cannot have a #{Blufin::Terminal::format_action(Blufin::YmlConfigValidator::POST)} and/or #{Blufin::Terminal::format_action(Blufin::YmlConfigValidator::DELETE)} because they may require a parent:", 'Found: %s'],
        WORKER_MESSAGE_TYPE_NOT_FOUND          => ['INVALID MESSAGE TYPE', "The following #{Blufin::Terminal::format_action('MessageTypes(s)', false)} are not defined in the worker-service:", 'Unrecognized MessageType: %s'],
        DATA_NOT_ALPHABETICAL                  => ['DATA NOT ALPHABETICAL', "The YML parser expected the data in a section to be in #{Blufin::Terminal::format_action('alphabetical')} order:", 'Not in correct order: %s'],
        MAVEN_MODULE_UNRECOGNIZED              => ['MAVEN MODULE UNRECOGNIZED', "A maven module has been defined but #{Blufin::Terminal::format_action('not found within the file system')}:", 'Unrecognized module: %s'],
        MAVEN_MODULE_NOT_DEFINED               => ['MAVEN MODULE NOT DEFINED', "A maven module found within the file system has #{Blufin::Terminal::format_action('no definition')}:", 'Undefined module: %s'],
        MAVEN_MODULE_NOT_REGISTERED            => ['MAVEN MODULE NOT REGISTERED', "A maven module reference has #{Blufin::Terminal::format_action('not been registered')}:", 'Unregistered module: %s'],
        MAVEN_MODULE_DUPLICATE                 => ['DUPLICATE MAVEN MODULE', "A #{Blufin::Terminal::format_action('duplicate')} maven module was found:", 'Duplicate module: %s'],
        MAVEN_MODULE_ORDER                     => ['MAVEN MODULE ORDER MISMATCH', "The YML parser expected maven modules to be in #{Blufin::Terminal::format_action('alphabetical order')}:", 'Not in order: %s'],
        MAVEN_MODULE_UNDEFINED_PARENT          => ['MAVEN MODULE UNDEFINED PARENT', "A maven module parent has #{Blufin::Terminal::format_action('not been defined')}:", 'Undefined parent: %s'],
        MAVEN_MODULE_UNUSED_PARENT             => ['MAVEN MODULE UNUSED PARENT', "A maven module parent has #{Blufin::Terminal::format_action('not been used')}:", 'Unused parent: %s'],
        EMBEDDED_OBJECT_NOT_FOUND              => ['OBJECT NOT FOUND', "Java Scanner expected exactly ONE object to be #{Blufin::Terminal::format_action('embedded')} with annotation/value but it wasn't:", "Missing: #{Blufin::ScannerJavaEmbeddedObjects::EMBEDDED}(\"%s\")"],
        EMBEDDED_OBJECT_NO_ANNOTATION          => ['EMBEDDED ANNOTATION MISSING', "Java Scanner did not find an #{Blufin::Terminal::format_action(Blufin::ScannerJavaEmbeddedObjects::EMBEDDED)} annotation:", "Missing #{Blufin::ScannerJavaEmbeddedObjects::EMBEDDED} annotation:"],
        EMBEDDED_OBJECT_NO_TABLE               => ['TABLE NOT FOUND', "A required #{Blufin::Terminal::format_action('embedded object')} doesn't have a schema counter-part table:", 'Missing table: %s'],
        EMBEDDED_OBJECT_INVALID_SCHEMA         => ['INVALID OBJECT SCHEMA', "Java Scanner was unable to attribute a #{Blufin::Terminal::format_action('valid schema')} to an embedded object:", 'Unrecognized schema: %s'],
        EMBEDDED_OBJECT_INVALID_NAME           => ['INVALID OBJECT NAME', "Java Scanner was unable to resolve a #{Blufin::Terminal::format_action('valid name')} for an embedded object:", "'%s' needs to start with 'Abstract...':"],
        EMBEDDED_OBJECT_INVALID_REF_REGEX      => ['INVALID REFERENCE', "The #{Blufin::Terminal::format_action('reference')} used for an embedded object is invalid:", '%s needs to be lowercase & snake-case.'],
        EMBEDDED_OBJECT_INVALID_REF_LENGTH     => ['INVALID REFERENCE', "The #{Blufin::Terminal::format_action('reference')} used for an embedded object is invalid:", "%s needs to be less than #{Blufin::YmlSchemaValidator::MAX_TABLE_CHARACTERS} characters:"],
        EMBEDDED_OBJECT_INVALID_ABSTRACTION    => ['INVALID OBJECT ABSTRACTION', "Java Scanner expected embedded object(s) NOT to be #{Blufin::Terminal::format_action('abstract', false)}:", '%s cannot be abstract.'],
        EMBEDDED_OBJECT_INVALID_EXTENSION      => ['INVALID OBJECT INTERFACE', "Java Scanner expected embedded object to extend #{Blufin::Terminal::format_action('PersistentDtoEmbedded', false)}:", '%s needs to implement PersistentDtoEmbedded.'],
        EMBEDDED_OBJECT_INVALID_LINE           => ['INVALID LINE', "Embedded Object(s). Something is wrong with the following #{Blufin::Terminal::format_action('line(s)')}:", '%s'],
        EMBEDDED_OBJECT_INVALID_REGEX          => ['INVALID REGEX', "Embedded Object(s). Object name needs to match #{Blufin::Terminal::format_action('regex')}:", '%s does not match regex: %s'],
        EMBEDDED_OBJECT_DATA_NOT_FOUND         => ['NO DATA WITHIN OBJECT', "Java Scanner was unable to resolve #{Blufin::Terminal::format_action('fields')} for an embedded object:", 'No fields in: %s'],
        EMBEDDED_FIELD_MISSING                 => ['MISSING FIELD', "Embedded object(s) is/are missing expected #{Blufin::Terminal::format_action('fields')}:", 'Missing: %s'],
        EMBEDDED_FIELD_WRONG_TYPE              => ['WRONG FIELD TYPE', "Embedded object(s) field(s) are of incorrect #{Blufin::Terminal::format_action('type')}:"],
        EMBEDDED_ANNOTATION_MISSING            => ['MISSING ANNOTATION', "Embedded object(s) are missing expected #{Blufin::Terminal::format_action('annotations')}:", 'Missing: %s'],
        EMBEDDED_ANNOTATION_UNNECESSARY        => ['UNNECESSARY ANNOTATION', "The following embedded object(s) #{Blufin::Terminal::format_action('annotation value(s)')} are not required:", '%s'],
        EMBEDDED_EXTRA_VALUE_INVALID           => ['INVALID EXTRA VALUE', "Embedded object(s) field #{Blufin::Terminal::format_action('extra value')} is invalid:", 'Expected: %s Got: %s'],
        EMBEDDED_DATA_TYPE_INVALID             => ['INVALID DATA TYPE', "Embedded object(s) field #{Blufin::Terminal::format_action('data-type')} is invalid:", 'Expected: %s Got: %s'],
        EMBEDDED_FLAGS_INVALID                 => ['INVALID FLAGS', "Embedded object(s) field has invalid #{Blufin::Terminal::format_action('flags')}:"],
        EMBEDDED_FKEY_INVALID                  => ['INVALID/MISSING FKEY', "Embedded object(s) field has an invalid/missing #{Blufin::Terminal::format_action('fkey')} property:"],
        EMBEDDED_MUST_BE_ENCRYPTED             => ['FIELD MUST BE ENCRYPTED', "Embedded object(s) field must be #{Blufin::Terminal::format_action('encrypted')}:"],
        EMBEDDED_CONFIG_CANNOT_BE_ENCRYPTED    => ['FIELD CANNOT BE ENCRYPTED', "Embedded object(s) within the config schema cannot be #{Blufin::Terminal::format_action('encrypted')}:"],
        UNEXPECTED_EXCEPTION                   => ['UNEXPECTED EXCEPTION', "The YML parser encountered an #{Blufin::Terminal::format_action('unexpected exception')}", '%s']
    }
end
new(site) click to toggle source

Initializes the Error Handler. @return void

# File lib/core/error_handling/yml_error_handler.rb, line 179
def initialize(site)

    @site      = Blufin::SiteResolver::validate_site(site)
    @site_path = Blufin::SiteResolver::get_site_location(@site)
    @errors    = []

end

Private Class Methods

error_expected_actual(expected, actual) click to toggle source

Used for creating a consistent way of displaying Expected/Actual output in errors. @return Array

# File lib/core/error_handling/yml_error_handler.rb, line 427
def self.error_expected_actual(expected, actual)
    [
        "Expected: \x1B[38;5;118m#{expected}\x1B[38;5;#{COLOR_ERROR_MESSAGE}m",
        "  Actual: \x1B[38;5;196m#{actual}",
        nil
    ]
end
get_error_message(error) click to toggle source

Gets the error message (or a default message if one is defined). @return Array

# File lib/core/error_handling/yml_error_handler.rb, line 410
def self.get_error_message(error)
    message = error.message
    begin
        raise nil if error_type_meta[error.type][2].nil?
        error_values = nil
        error_values = [error.message] unless error.message.is_a?(Array)
        error_values = error.message if error.message.is_a?(Array)
        error_values = error_values.map { |value| "\x1B[38;5;196m#{value}\x1B[38;5;#{COLOR_ERROR_MESSAGE}m" } unless error_values.nil?
        message      = [error_type_meta[error.type][2] % error_values]
    rescue
    end
    message = [MDASH] if message.nil?
    message
end
output_errors(errors, site_path, exit = false) click to toggle source

Must be static because of Columnist. @return void

# File lib/core/error_handling/yml_error_handler.rb, line 222
def self.output_errors(errors, site_path, exit = false)

    return false unless errors.any?

    puts

    errors_schema         = []
    errors_groups         = {}
    errors_groups_non_yml = {}

    errors.each do |error|
        if error.class.to_s == 'Blufin::YmlError'
            if error.type >= 5000
                errors_groups_non_yml[error.type] = [] if errors_groups_non_yml[error.type].nil?
                errors_groups_non_yml[error.type] << error
            else
                errors_groups[error.type] = [] if errors_groups[error.type].nil?
                errors_groups[error.type] << error
            end
        elsif error.class.to_s == 'Blufin::SchemaError'
            errors_schema << error
        end
    end

    wc1 = 4
    wc2 = 32
    wc3 = 16
    wc4 = 38
    wc5 = Blufin::Terminal::get_terminal_width - (wc1 + wc2 + wc3 + wc4 + 6)

    # Renders NORMAL errors.
    errors_groups.each do |error_type, error_group|
        Blufin::Terminal::custom(error_type_meta[error_type][0], 88, error_type_meta[error_type][1])
        table(:border => false) do
            row do
                column('', :align => 'left', :width => wc1)
                column('File', :align => 'left', :width => wc2, :color => COLOR_TITLE)
                column('Section', :align => 'left', :width => wc3, :color => COLOR_TITLE)
                column('Field(s)', :align => 'left', :width => wc4, :color => COLOR_TITLE)
                column('Error', :align => 'left', :width => wc5, :color => COLOR_TITLE)
            end
            error_group.each do |error|
                file = error.file.nil? ? MDASH : error.file
                unless file == MDASH
                    paf  = Blufin::YmlCommon::split_to_path_file(file, site_path)
                    file = "#{paf[0]}/#{paf[1]}"
                    file = paf[1] if file.length > wc2 - 4
                end
                section = error.section.nil? ? MDASH : error.section
                begin
                    field = error.field.nil? ? MDASH : error.field.gsub('|', '.')
                rescue
                    # In case field is not a String.
                    field = "BUG - Expected String but got: #{error.field.class}"
                end
                message = get_error_message(error)
                row do
                    column('', :align => 'left', :width => 4)
                    column("#{file}", :color => COLOR_ERROR_MESSAGE)
                    column(section, :color => COLOR_ERROR_MESSAGE)
                    column(field, :color => COLOR_ERROR_MESSAGE)
                    column(message.length > 0 ? message[0] : '', :color => COLOR_ERROR_MESSAGE)
                end
                if message.length > 1
                    message.each_with_index do |message, idx|
                        next if idx == 0
                        row do
                            column('')
                            column('')
                            column('')
                            column('')
                            column(message, :color => COLOR_ERROR_MESSAGE)
                        end
                    end
                end
            end
        end
        puts
    end

    wc1 = 4
    wc2 = 88
    wc3 = Blufin::Terminal::get_terminal_width - (wc1 + wc2 + 6)

    # Renders NORMAL (non-YML) errors.
    errors_groups_non_yml.each do |error_type, error_group|
        Blufin::Terminal::custom(error_type_meta[error_type][0], 88, error_type_meta[error_type][1])
        table(:border => false) do
            row do
                column('', :align => 'left', :width => wc1)
                column('File', :align => 'left', :width => wc2, :color => COLOR_TITLE)
                column('Error', :align => 'left', :width => wc3, :color => COLOR_TITLE)
            end

            error_group.each do |error|
                file = error.file.nil? ? MDASH : error.file
                unless file == MDASH
                    file.gsub!(Blufin::Config::get_path('Paths', 'BlufinJava'), '')
                    file.gsub!(/\A\//, '')
                end
                message = get_error_message(error)
                row do
                    column('', :align => 'left', :width => 4)
                    column("#{file}", :color => COLOR_ERROR_MESSAGE)
                    column(message.length > 0 ? message[0] : '', :color => COLOR_ERROR_MESSAGE)
                end
                if message.length > 1
                    message.each_with_index do |message, idx|
                        next if idx == 0
                        row do
                            column('')
                            column('')
                            column(message, :color => COLOR_ERROR_MESSAGE)
                        end
                    end
                end
            end
        end
        puts
    end

    wc1 = 4
    wc2 = 32
    wc3 = 16
    wc4 = 38
    wc6 = 32
    wc5 = Blufin::Terminal::get_terminal_width - (wc1 + wc2 + wc3 + wc4 + 6 + wc6)

    # Renders SCHEMA (legacy) errors.
    if errors_schema.length > 0
        Blufin::Terminal::custom('SCHEMA ERROR(S)', 88, 'There are problems with your schema definition(s):')
        table(:border => false) do
            row do
                column('', :align => 'left', :width => wc1)
                column('File', :align => 'left', :width => wc2, :color => COLOR_TITLE)
                column('Section', :align => 'left', :width => wc3, :color => COLOR_TITLE)
                column('Field(s)', :align => 'left', :width => wc4, :color => COLOR_TITLE)
                column('Error', :align => 'left', :width => wc5, :color => COLOR_TITLE)
                column('Detail', :align => 'left', :width => wc6, :color => COLOR_TITLE)
            end
            errors_schema.each do |error|
                if error.file.nil? || error.file == MDASH || error.file == '' || error.file == '—'
                    file_output = MDASH
                else
                    file        = Blufin::YmlCommon::split_to_path_file(error.file, site_path)
                    file_output = file[1]
                end
                section = error.section
                field   = error.schema_address[2].nil? ? MDASH : error.schema_address[2]
                row do
                    column('', :align => 'left', :width => 4)
                    column(file_output, :color => COLOR_ERROR_MESSAGE)
                    column(section, :color => COLOR_ERROR_MESSAGE)
                    column(field, :color => COLOR_ERROR_MESSAGE)
                    column(error.error_message, :color => COLOR_ERROR_MESSAGE)
                    column(error.error_detail, :color => COLOR_ERROR_MESSAGE)
                end
                multi_content = error.multi_line_content
                if !multi_content.nil? && multi_content.length > 0
                    # row { column(''); column(''); column(''); column(''); column(''); column('') }
                    multi_content.each do |line|
                        row do
                            column('')
                            column('')
                            column('')
                            column('')
                            column("\x1B[38;5;154m#{line}", :color => COLOR_ERROR_MESSAGE)
                            column('')
                        end
                    end
                    row { column(''); column(''); column(''); column(''); column(''); column('') }
                end

            end
        end
        puts
    end

    puts

    exit 1 if exit

    true

end

Public Instance Methods

add_error(type, file, section, field, message = nil) click to toggle source

Adds an YmlError object to the @error Array. @return void

# File lib/core/error_handling/yml_error_handler.rb, line 189
def add_error(type, file, section, field, message = nil)
    @errors << Blufin::YmlError.new(validate_error_type(type), file, section, field, message)
end
add_error_schema(error_object) click to toggle source

Adds an SchemaError object to the @error Array. @return void

# File lib/core/error_handling/yml_error_handler.rb, line 195
def add_error_schema(error_object)
    @errors << error_object
end
display_errors_if_any(exit = false) click to toggle source

Displays errors (if any) and halts the script if so. @return Boolean

# File lib/core/error_handling/yml_error_handler.rb, line 201
def display_errors_if_any(exit = false)
    self.class.output_errors(@errors, @site_path, exit)
end
get_error_count() click to toggle source

Returns a count of how many errors are currently stored. @return Integer

# File lib/core/error_handling/yml_error_handler.rb, line 207
def get_error_count
    @errors.size
end

Private Instance Methods

validate_error_type(type) click to toggle source

Validate the error type. @return String

# File lib/core/error_handling/yml_error_handler.rb, line 215
def validate_error_type(type)
    raise RuntimeError, "Invalid error type: #{type} \xe2\x80\x94 perhaps you forgot to add it to the valid type array in Blufin::YmlErrorHandler ?" unless self.class.error_type_meta.keys.include?(type)
    type
end