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
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
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
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
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
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
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
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
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
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 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