class ProcOptValidator

Attributes

validator_rules[R]

Public Class Methods

new( ) click to toggle source
# File lib/statsailr/block_to_r/proc_setting_support/proc_opt_validator.rb, line 4
def initialize( )
  @validator_rules = {}
end

Public Instance Methods

check_and_modify( param_manager ) click to toggle source
# File lib/statsailr/block_to_r/proc_setting_support/proc_opt_validator.rb, line 12
def check_and_modify( param_manager )
  if ( ! @validator_rules.nil? ) && (! @validator_rules.empty?)
    @validator_rules.each{| opt_name, validator |
      class_name_in_param_manager = param_manager.param_hash[opt_name].class.name.split('::').last
      if validator["required"] == true
        if ! param_manager.param_hash.has_key?(opt_name)
          raise "#{opt_name} is required for this PROC option"
        end
      end
      if ! validator["is_a"].nil?
        if validator["is_a"].is_a?(Array)
          if ! validator["is_a"].include? class_name_in_param_manager
            raise "#{opt_name} needs to be one of #{validator["is_a"].join("|")}, but #{class_name_in_param_manager} is assigned"
          end
        else
          if validator["is_a"] != class_name_in_param_manager
            raise "#{opt_name} needs to be #{validator["is_a"]}, but #{class_name_in_param_manager} is assigned"
          end
        end

      end
      if ! validator["as"].nil?
        if validator["as"] != class_name_in_param_manager
          case validator["as"]
          when "SymbolR"
            param_manager.param_hash[opt_name] = RBridge::SymbolR.new(param_manager.param_hash[opt_name])
          when "String"
            param_manager.param_hash[opt_name] = param_manager.param_hash[opt_name].to_s
          when "Integer"
            param_manager.param_hash[opt_name] = param_manager.param_hash[opt_name].to_i
          when "Float"
            param_manager.param_hash[opt_name] = param_manager.param_hash[opt_name].to_f
          else
            raise "We need to convert type but do not know how to do it. #{class_name_in_param_manager} => #{validator["as"]}"
          end
        end
      end
    }
  end
end
rule( option_name , is_a: nil, as: nil , required: false) click to toggle source
# File lib/statsailr/block_to_r/proc_setting_support/proc_opt_validator.rb, line 8
def rule( option_name , is_a: nil, as: nil , required: false)
  @validator_rules[option_name] = {"is_a" => is_a , "as" => as, "required" => required }
end