class ParamsChecker::BaseParamsChecker
Attributes
context[RW]
custom_check_errors[RW]
formatted_params_after_custom_fields_check[RW]
formatted_params_after_custom_overall_check[RW]
formatted_params_after_default_fields_check[RW]
is_outest_hash[RW]
params[RW]
Public Class Methods
init(required: true, many: false, default: nil, allow_nil: false)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 19 def self.init(required: true, many: false, default: nil, allow_nil: false) raise "This field's type must be boolean." if [required, many, allow_nil].any? { |value| !value.in? [true, false] } type = many ? 'nested_hashs' : 'nested_hash' { type: type, required: required, default: default, allow_nil: allow_nil, many: many, class: self } end
new(params: {}, context: {}, is_outest_hash: true)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 9 def initialize(params: {}, context: {}, is_outest_hash: true) @params = params @context = context @is_outest_hash = is_outest_hash @formatted_params_after_default_fields_check = {} @formatted_params_after_custom_fields_check = {} @formatted_params_after_custom_overall_check = {} @custom_check_errors = {} end
Public Instance Methods
add_error(message, key = nil)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 38 def add_error(message, key = nil) raise ParamsChecker::FieldError.new({ message: message, key: key, }) end
add_errors()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 230 def add_errors # only add errors at the outest hash # return unless is_outest_hash field_errors = errors.each_with_object({}) do |error, hash| key, value = error value = value.is_a?(Array) ? value[0] : value hash[key] = value errors.delete(key) end @custom_check_errors.each do |key, value| field_errors[key] = value end errors.add( :errors, { message: DEFAULT_MESSAGE_ERROR, error_type: 'fields_errors', field_errors: field_errors } ) end
all_fields_of_params_are_valid?()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 84 def all_fields_of_params_are_valid? @all_fields_of_params_are_valid ||= field_valids.all?(true) end
call()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 45 def call default_fields_check && custom_check error_exist? && add_errors formatted_params rescue ParamsChecker::GeneralError => e # if is the outest hash, add error # if is not, keep raising error, bubble up to the outest hash, # then the outest hash will add error unless is_outest_hash raise e end errors.add( :errors, { message: e.message, error_type: 'general_error' } ) end
check(params)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 222 def check(params) params end
check_base_on_field_type(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 147 def check_base_on_field_type(key) case schema[key][:type] when 'num' ParamChecker::NumParamChecker.call(key, schema, params) when 'int' ParamChecker::IntParamChecker.call(key, schema, params) when 'char' ParamChecker::CharParamChecker.call(key, schema, params) when 'text' ParamChecker::CharParamChecker.call(key, schema, params) when 'arr' ParamChecker::ArrParamChecker.call(key, schema, params) when 'hash' ParamChecker::HashParamChecker.call(key, schema, params) when 'nested_hash' ParamChecker::NestedHashChecker.call(key, schema, params, context) when 'nested_hashs' ParamChecker::NestedHashsChecker.call(key, schema, params, context) when 'date' ParamChecker::DateParamChecker.call(key, schema, params) when 'time' ParamChecker::TimeParamChecker.call(key, schema, params) when 'datetime' ParamChecker::DateTimeParamChecker.call(key, schema, params) when 'boolean' ParamChecker::BooleanChecker.call(key, schema, params) when 'file' ParamChecker::FileChecker.call(key, schema, params) end end
custom_check()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 80 def custom_check fields_check && overall_check end
default_fields_check()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 70 def default_fields_check params_is_not_a_hash = !params.is_a?(ActionController::Parameters) && !params.is_a?(Hash) if params_is_not_a_hash errors.add(:error, 'ParamsChecker only receive object or ActionController::Parameters as input.') end all_fields_of_params_are_valid? end
error_exist?()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 66 def error_exist? errors.present? && errors.is_a?(Hash) || @custom_check_errors.present? end
field_check(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 191 def field_check(key) check_method = "check_#{key}" total_parameters = method(check_method).arity # pp "========>total_parameters : ", total_parameters value = if total_parameters == 1 # like check_name(name) send(check_method, @formatted_params_after_default_fields_check[key]) elsif total_parameters == 2 # like check_name(name, opts) send(check_method, @formatted_params_after_default_fields_check[key], @formatted_params_after_default_fields_check) end @formatted_params_after_custom_fields_check[key] = value rescue ParamsChecker::FieldError => e # binding.pry key = e.data[:key].presence || key @custom_check_errors[key] = e.data[:message] end
field_is_valid?(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 97 def field_is_valid?(key) return value_valid?(key) if value_present?(key) return true unless value_need_to_be_present?(key) errors.add(key, 'This field is required.') false end
field_valids()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 88 def field_valids @field_valids ||= schema.map do |key, _| set_default_value(key) if need_to_set_default_value?(key) field_is_valid?(key) end end
fields_check()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 178 def fields_check @formatted_params_after_custom_fields_check = formatted_params_after_default_fields_check schema.each do |key, _| # next unless self.methods.grep(/check_#{key}/).length > 0 need_to_check = "check_#{key}".to_sym.in?(methods) passed_default_check = errors[key].nil? next unless need_to_check && passed_default_check field_check(key) end end
formatted_params()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 226 def formatted_params formatted_params_after_custom_overall_check end
init()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 218 def init {} end
need_to_set_default_value?(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 106 def need_to_set_default_value?(key) value_is_nil = @params[key].nil? schema_field_has_default_value_key = schema[key].key?(:default) default_value_is_set = !schema[key][:default].nil? value_is_nil && schema_field_has_default_value_key && default_value_is_set end
overall_check()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 211 def overall_check @formatted_params_after_custom_overall_check = check(formatted_params_after_custom_fields_check) rescue ParamsChecker::FieldError => e key = e.data[:key] @custom_check_errors[key] = e.data[:message] end
raise_error(message = DEFAULT_MESSAGE_ERROR)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 34 def raise_error(message = DEFAULT_MESSAGE_ERROR) raise GeneralError.new(message) end
schema()
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 140 def schema @schema ||= init.each_with_object({}) do |error, hash| key, value = error hash[key] = value end end
set_default_value(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 116 def set_default_value(key) @params[key] = schema[key][:default] end
value_need_to_be_present?(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 120 def value_need_to_be_present?(key) return true if schema[key].key?(:default) && !schema[key][:default].nil? schema[key][:required] end
value_present?(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 126 def value_present?(key) params.key?(key) end
value_valid?(key)
click to toggle source
# File lib/params_checker/base_params_checker.rb, line 130 def value_valid?(key) cmd = check_base_on_field_type(key) if cmd.success? @formatted_params_after_default_fields_check[key] = cmd.result else errors.add(key, cmd.errors[key]) end cmd.success? end