Sha256: 574b444a3276d3ddb034c73f6a38d6a92f1d74ef0a751e1cfffde5217d0b1e60

Contents?: true

Size: 774 Bytes

Versions: 1

Compression:

Stored size: 774 Bytes

Contents

# frozen_string_literal: true

module MiniDefender::ValidatesInput
  extend ActiveSupport::Concern

  def validate!(rules, coerced = false)
    data = cleanse_data(params.to_unsafe_hash.deep_stringify_keys)
    validator = MiniDefender::Validator.new(rules, data)
    validator.validate!
    coerced ? validator.coerced : validator.data
  end

  private

  def cleanse_data(data, depth = 1)
    return data if depth > 16

    case data
      when Array
        data.map{ |v| cleanse_data(v, depth + 1) }.reject(&:nil?)
      when Hash
        data.to_h{ |k, v| [k, cleanse_data(v, depth + 1)] }.compact
      when Numeric, TrueClass, FalseClass, NilClass
        data
      else
        data = data.to_s.strip
        data = nil if data == ''
        data
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mini_defender-0.3.2 lib/mini_defender/validates_input.rb