lib/validate_params/params_validator.rb in validate-params-0.5.0 vs lib/validate_params/params_validator.rb in validate-params-0.5.1
- old
+ new
@@ -12,16 +12,17 @@
class_methods do
attr_accessor :params_validations, :method
def param(field, type, options = {}, &block)
@params_validations ||= []
- @params_validations <<
- if block
- yield(ParamBuilder.new(field))
- else
- ParamBuilder.new.param(field, type, options)
- end
+
+ if block
+ param_builder = ParamBuilder.new(field)
+ @params_validations += yield(param_builder)
+ else
+ @params_validations << ParamBuilder.new.param(field, type, options)
+ end
end
def validate_params_for(request_action, &block)
@request_action = request_action
@@ -62,10 +63,12 @@
params_validations.each do |params_validation|
next if params_validation[:options][:default].blank?
if params_validation[:field].is_a?(Hash)
params_validation[:field].each_key do |key|
+ # Skip in case hash is configured and string is passed
+ next if params.dig(key).is_a? Hash
next if params.dig(key, params_validation[:field][key])
value = if params_validation[:options][:default].is_a?(Proc)
params_validation[:options][:default].call
else
@@ -89,10 +92,14 @@
return unless request_action.present? && request_action == action_name.to_sym
errors = []
for params_validation in params_validations
+ # Skip in case hash is configured and string is passed
+ next if params_validation[:field].is_a?(Hash) &&
+ params.dig(params_validation[:field].keys.first).is_a?(String)
+
parameter_value = if params_validation[:field].is_a? Hash
params.dig(params_validation[:field].keys.first,
params_validation[:field][params_validation[:field].keys.first])
else
params[params_validation[:field]]
@@ -172,18 +179,19 @@
end
class ParamBuilder
def initialize(parent_field = nil)
@parent_field = parent_field
+ @params_validations = []
end
def param(field, type, options = {})
-
- if @parent_field
- { field: { @parent_field => field }, type: type, options: options }
- else
- { field: field, type: type, options: options }
+ unless @parent_field
+ return { field: field, type: type, options: options }
end
+
+ @params_validations << { field: { @parent_field => field }, type: type, options: options }
+ @params_validations
end
end
end
end