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