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