class Console1984::CommandValidator::ForbiddenReopeningValidation

Validates attempts to reopen classes and modules based on a configured set.

Attributes

banned_class_or_module_names[R]

Public Class Methods

new(banned_classes_or_modules) click to toggle source
# File lib/console1984/command_validator/forbidden_reopening_validation.rb, line 7
def initialize(banned_classes_or_modules)
  @banned_class_or_module_names = banned_classes_or_modules.collect(&:to_s)
end

Public Instance Methods

validate(parsed_command) click to toggle source

Raises a Console1984::Errors::ForbiddenCommandAttempted if an banned class or module reopening is detected.

# File lib/console1984/command_validator/forbidden_reopening_validation.rb, line 13
def validate(parsed_command)
  if contains_invalid_class_or_module_declaration?(parsed_command)
    raise Console1984::Errors::ForbiddenCommandAttempted
  end
end

Private Instance Methods

banned?(class_or_module_name) click to toggle source
# File lib/console1984/command_validator/forbidden_reopening_validation.rb, line 24
def banned?(class_or_module_name)
  @banned_class_or_module_names.find do |banned_class_or_module_name|
    "#{class_or_module_name}::".start_with?("#{banned_class_or_module_name}::")
  end
end
contains_invalid_class_or_module_declaration?(parsed_command) click to toggle source
# File lib/console1984/command_validator/forbidden_reopening_validation.rb, line 20
def contains_invalid_class_or_module_declaration?(parsed_command)
  (parsed_command.declared_classes_or_modules + parsed_command.constant_assignments).find { |class_or_module_name| banned?(class_or_module_name) }
end