module ChronosAuthz::Validations::OptionsValidator

Public Class Methods

included(base) click to toggle source
# File lib/chronos_authz/validations/options_validator.rb, line 5
def self.included base
  base.extend OptionsValidatorClassMethods
end

Public Instance Methods

validate!() click to toggle source
# File lib/chronos_authz/validations/options_validator.rb, line 23
def validate!

  # Required options
  if !self.class.required_options.nil?
    self.class.required_options.each do |required_option|
      option_value = send(required_option) if respond_to?(required_option)
      raise ChronosAuthz::Validations::ValidationError.new("Missing option #{required_option} in #{self.class}") if option_value.blank?
    end
  end

  # Check constraint
  if !self.class.predefined_value_map.nil?
    self.class.predefined_value_map.each do |key, value|
      option_values = send(key) 
      check_values = value[:check_values]

      if !option_values.is_a? Array
        option_values = [option_values]
      end

      if value[:constraint_options][:case_sensitive].nil? || !value[:constraint_options][:case_sensitive]
        option_values = option_values.map{|option_value| option_value.to_s.upcase }
        check_values = check_values.map{|check_value| check_value.to_s.upcase }
      end

      option_values.each do |option_value|
        next if value[:constraint_options][:allow_nil] && (option_value.nil? || option_value.empty?)
        raise ChronosAuthz::Validations::ValidationError.new("Invalid option value #{option_value} for #{key} in #{self.class}. Valid values are #{check_values}.") if !check_values.include?(option_value) 
      end
    end
  end

  self
end