Module: ParamGuard
- Defined in:
- lib/param_guard.rb,
lib/param_guard/version.rb,
lib/param_guard/param_definition.rb
Defined Under Namespace
Classes: ParamDefinition
Constant Summary collapse
- InvalidParameters =
Class.new(StandardError)
- ParameterMissing =
Class.new(InvalidParameters)
- ParameterOfInvalidType =
Class.new(InvalidParameters)
- VERSION =
"0.0.1"
Class Method Summary collapse
-
.filter(params, defs, parent_keys = []) ⇒ Object
Sanitiize params based on rules in defs.
Class Method Details
.filter(params, defs, parent_keys = []) ⇒ Object
Sanitiize params based on rules in defs. Returns a duplicate of params, from which all non-declared fields are deleted. Raises errors ParameterMissing or ParameterOfInvalidType.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/param_guard.rb', line 13 def filter(params, defs, parent_keys = []) return params if defs.nil? keys_to_keep = [] defs.each do |key, key_def| definition = ParamDefinition.new(*key_def) structure, value, params_to_keep = get_param(params, key) if value if definition.types.any? unless definition.types.any?{|t| is_of_type?(t, value, structure)} raise ParameterOfInvalidType.new( "param '#{keys_to_s(parent_keys + [key])}' must be #{definition.types_for_sentence}" ) end end keys_to_keep.concat params_to_keep.keys.map(&:to_s) if structure == :normal && value.kind_of?(Hash) params[key] = filter(value, definition.subdef, parent_keys + [key]) end elsif definition.required? raise ParameterMissing.new( "param '#{keys_to_s(parent_keys + [key])}' is missing" ) end end filtered = params.dup filtered.delete_if{|key, value| ! keys_to_keep.include? key.to_s } filtered end |