Sha256: bfd39cc62786117632d9a4228d2fa863e3943e0c9cd85a483ef733d66fe918de

Contents?: true

Size: 1.31 KB

Versions: 14

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

class MiniDefender::Rules::Hash < MiniDefender::Rule
  def self.signature
    'hash'
  end

  def initialize(data_mode = 'none', key_type = 'any', value_type = 'any')
    @data_mode = data_mode
    @key_type = key_type
    @value_type = value_type
  end

  def self.make(args)
    new(
      args[0] || 'none',
      args[1] || 'any',
      args[2] || 'any',
    )
  end

  def priority
    500
  end

  def coerce(value)
    @data_mode == 'all' ? value : {}
  end

  def force_coerce?
    true
  end

  def passes?(attribute, value, validator)
    passes = value.is_a?(Hash)

    unless passes
      return false
    end

    if @key_type == 'string'
      passes &= value.all? { |k, _| k.is_a?(String) }
    end

    case @value_type
      when 'string'
        passes &= value.all? { |_, v| v.is_a?(String) }
      when 'integer'
        passes &= value.all? { |_, v| v.is_a?(Integer) }
      when 'float'
        passes &= value.all? { |_, v| v.is_a?(Float) }
      else
        # None
    end

    passes
  end

  def message(attribute, value, validator)
    additional = ''

    if @key_type != 'any'
      additional += ", key must be #{@key_type}"
    end

    if @value_type != 'any'
      additional += ", value must be #{@value_type}"
    end

    "The field must be an object#{additional}."
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
mini_defender-0.6.8 lib/mini_defender/rules/hash.rb
mini_defender-0.6.7 lib/mini_defender/rules/hash.rb
mini_defender-0.6.5 lib/mini_defender/rules/hash.rb
mini_defender-0.6.4 lib/mini_defender/rules/hash.rb
mini_defender-0.6.3 lib/mini_defender/rules/hash.rb
mini_defender-0.6.2 lib/mini_defender/rules/hash.rb
mini_defender-0.6.1 lib/mini_defender/rules/hash.rb
mini_defender-0.6.0 lib/mini_defender/rules/hash.rb
mini_defender-0.5.8 lib/mini_defender/rules/hash.rb
mini_defender-0.5.7 lib/mini_defender/rules/hash.rb
mini_defender-0.5.6 lib/mini_defender/rules/hash.rb
mini_defender-0.5.5 lib/mini_defender/rules/hash.rb
mini_defender-0.5.4 lib/mini_defender/rules/hash.rb
mini_defender-0.5.3 lib/mini_defender/rules/hash.rb