class Console1984::CommandValidator::ForbiddenConstantReferenceValidation
Validates references to a configured set of constants.
Public Class Methods
new(shield = Console1984.shield, config)
click to toggle source
config
will be a hash like:
{ always: [ Console1984 ], protected: [ PG, Mysql2 ] }
# File lib/console1984/command_validator/forbidden_constant_reference_validation.rb, line 8 def initialize(shield = Console1984.shield, config) # We make shield an injectable dependency for testing purposes. Everything is frozen # for security purposes, so stubbing won't work. @shield = shield @forbidden_constants_names = config[:always] || [] @constant_names_forbidden_in_protected_mode = config[:protected] || [] end
Public Instance Methods
validate(parsed_command)
click to toggle source
Raises a Console1984::Errors::ForbiddenCommandAttempted
if a banned constant is referenced.
# File lib/console1984/command_validator/forbidden_constant_reference_validation.rb, line 18 def validate(parsed_command) if contains_invalid_const_reference?(parsed_command, @forbidden_constants_names) || (@shield.protected_mode? && contains_invalid_const_reference?(parsed_command, @constant_names_forbidden_in_protected_mode)) raise Console1984::Errors::ForbiddenCommandAttempted end end
Private Instance Methods
contains_invalid_const_reference?(parsed_command, banned_constants)
click to toggle source
# File lib/console1984/command_validator/forbidden_constant_reference_validation.rb, line 26 def contains_invalid_const_reference?(parsed_command, banned_constants) (parsed_command.constants + parsed_command.constant_assignments).find do |constant_name| banned_constants.find { |banned_constant| "#{constant_name}::".start_with?("#{banned_constant}::") } end end