Class: AbideDevUtils::CEM::Validate::Strings::BaseValidator
- Inherits:
-
Object
- Object
- AbideDevUtils::CEM::Validate::Strings::BaseValidator
- Defined in:
- lib/abide_dev_utils/cem/validate/strings/base_validator.rb
Overview
Base class for validating Puppet Strings objects. This class can be used directly, but it is recommended to use a subclass of this class to provide more specific validation logic. Each subclass should implement a ‘validate_<type>` method that will be called by the `validate` method of this class. The `validate_<type>` method should contain the validation logic for the corresponding type of Puppet Strings object.
Direct Known Subclasses
Constant Summary collapse
- SAFE_OBJECT_METHODS =
%i[ type name file line docstring tags parameters source ].freeze
- PDK_SUMMARY_REGEX =
%r{^A short summary of the purpose.*}.freeze
- PDK_DESCRIPTION_REGEX =
%r{^A description of what this.*}.freeze
Instance Attribute Summary collapse
-
#findings ⇒ Object
readonly
Returns the value of attribute findings.
Instance Method Summary collapse
- #errors ⇒ Object
- #errors? ⇒ Boolean
- #find_parameter(param_name) ⇒ Object
- #find_tag_name(tag_name) ⇒ Object
-
#initialize(strings_object) ⇒ BaseValidator
constructor
A new instance of BaseValidator.
-
#license_tag? ⇒ Boolean
Checks if the object has a license tag and if it is formatted correctly.
-
#non_generic_description? ⇒ Boolean
Checks if the description is not the default PDK description.
-
#non_generic_summary? ⇒ Boolean
Checks if the summary is not the default PDK summary.
- #select_tag_name(tag_name) ⇒ Object
- #validate ⇒ Object
- #warnings ⇒ Object
- #warnings? ⇒ Boolean
Constructor Details
#initialize(strings_object) ⇒ BaseValidator
Returns a new instance of BaseValidator.
30 31 32 33 34 35 36 37 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 30 def initialize(strings_object) @object = strings_object @findings = [] # Define instance methods for each of the SAFE_OBJECT_METHODS SAFE_OBJECT_METHODS.each do |method| define_singleton_method(method) { safe_method_call(@object, method) } end end |
Instance Attribute Details
#findings ⇒ Object (readonly)
Returns the value of attribute findings.
28 29 30 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 28 def findings @findings end |
Instance Method Details
#errors ⇒ Object
39 40 41 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 39 def errors @findings.select { |f| f.type == :error } end |
#errors? ⇒ Boolean
47 48 49 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 47 def errors? !errors.empty? end |
#find_parameter(param_name) ⇒ Object
65 66 67 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 65 def find_parameter(param_name) parameters&.find { |p| p[0] == param_name } end |
#find_tag_name(tag_name) ⇒ Object
55 56 57 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 55 def find_tag_name(tag_name) &.find { |t| t.tag_name == tag_name } end |
#license_tag? ⇒ Boolean
Checks if the object has a license tag and if it is formatted correctly. Comparison is not case sensitive.
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 78 def license_tag? = select_tag_name('see') if .empty? || .none? { |t| t.name.casecmp('LICENSE.pdf') && t.text.casecmp('for license') } new_finding( :error, :no_license_tag, remediation: 'Add "@see LICENSE.pdf for license" to the class documentation' ) return false end true end |
#non_generic_description? ⇒ Boolean
Checks if the description is not the default PDK description.
104 105 106 107 108 109 110 111 112 113 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 104 def non_generic_description? description = docstring return true if description.nil? if description.match?(PDK_DESCRIPTION_REGEX) new_finding(:warning, :generic_description, remediation: 'Add a more descriptive description') return false end true end |
#non_generic_summary? ⇒ Boolean
Checks if the summary is not the default PDK summary.
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 92 def non_generic_summary? summary = find_tag_name('summary')&.text return true if summary.nil? if summary.match?(PDK_SUMMARY_REGEX) new_finding(:warning, :generic_summary, remediation: 'Add a more descriptive summary') return false end true end |
#select_tag_name(tag_name) ⇒ Object
59 60 61 62 63 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 59 def select_tag_name(tag_name) return [] if .nil? .select { |t| t.tag_name == tag_name } end |
#validate ⇒ Object
69 70 71 72 73 74 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 69 def validate license_tag? non_generic_summary? non_generic_description? send("validate_#{type}".to_sym) if respond_to?("validate_#{type}".to_sym) end |
#warnings ⇒ Object
43 44 45 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 43 def warnings @findings.select { |f| f.type == :warning } end |
#warnings? ⇒ Boolean
51 52 53 |
# File 'lib/abide_dev_utils/cem/validate/strings/base_validator.rb', line 51 def warnings? !warnings.empty? end |