class FileBasedRuleRepo
This is really the traditional implementation for CustomRuleLoader
that looks in cfn-nag/custom_rules and an optional directory of a client's choosing
Public Class Methods
new(rule_directory)
click to toggle source
# File lib/cfn-nag/rule_repos/file_based_rule_repo.rb, line 11 def initialize(rule_directory) @rule_directory = rule_directory validate_extra_rule_directory rule_directory end
Public Instance Methods
discover_rules()
click to toggle source
# File lib/cfn-nag/rule_repos/file_based_rule_repo.rb, line 16 def discover_rules rule_registry = RuleRegistry.new # we look on the file system, and we load from the file system into a Class # that the runtime can refer back to later from the registry which is effectively # just a set of rule definitons discover_rule_classes(@rule_directory).each do |rule_class| rule_registry.definition(rule_class) end rule_registry end
Private Instance Methods
discover_rule_classes(rule_directory)
click to toggle source
# File lib/cfn-nag/rule_repos/file_based_rule_repo.rb, line 50 def discover_rule_classes(rule_directory) rule_classes = [] rule_filenames = discover_rule_filenames(rule_directory) rule_filenames.each do |rule_filename| require(File.absolute_path(rule_filename)) rule_classname = File.basename(rule_filename, '.rb') rule_classes << Object.const_get(rule_classname) end Logging.logger['log'].debug "rule_classes: #{rule_classes}" rule_classes end
discover_rule_filenames(rule_directory)
click to toggle source
# File lib/cfn-nag/rule_repos/file_based_rule_repo.rb, line 37 def discover_rule_filenames(rule_directory) rule_filenames = [] unless rule_directory.nil? rule_filenames += Dir[File.join(rule_directory, '*Rule.rb')].sort end rule_filenames += Dir[File.join(__dir__, '..', 'custom_rules', '*Rule.rb')].sort # Windows fix when running ruby from Command Prompt and not bash rule_filenames.reject! { |filename| filename =~ /_rule.rb$/ } Logging.logger['log'].debug "rule_filenames: #{rule_filenames}" rule_filenames end
validate_extra_rule_directory(rule_directory)
click to toggle source
# File lib/cfn-nag/rule_repos/file_based_rule_repo.rb, line 31 def validate_extra_rule_directory(rule_directory) return true if rule_directory.nil? || File.directory?(rule_directory) raise "Not a real directory #{rule_directory}" end