Module: Reform::Form::ActiveModel::AcceptanceValidatorPatch

Defined in:
lib/reform/form/active_model/acceptance_validator_patch.rb

Class Method Summary collapse

Class Method Details

.apply! ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/reform/form/active_model/acceptance_validator_patch.rb', line 3

def self.apply!
  return if defined?(::ActiveModel::Validations::ReformAcceptanceValidator)

  klass = Class.new(::ActiveModel::EachValidator) do
    def initialize(options)
      super({ allow_nil: true, accept: ["1", true] }.merge!(options))
    end

    def validate_each(record, attribute, value)
      unless acceptable_option?(value)
        if Gem::Version.new(::ActiveModel::VERSION::STRING) >= Gem::Version.new('6.1.0')
          record.errors.add(attribute, :accepted, **options.except(:accept, :allow_nil))
        else
          record.errors.add(attribute, :accepted, options.except(:accept, :allow_nil))
        end
      end
    end

    private

    def acceptable_option?(value)
      Array(options[:accept]).include?(value)
    end
  end

  # Assign the class to a constant for tracking
  ::ActiveModel::Validations.const_set(:ReformAcceptanceValidator, klass)

  # Override the built-in validator
  ::ActiveModel::Validations.send(:remove_const, :AcceptanceValidator)
  ::ActiveModel::Validations.const_set(:AcceptanceValidator, klass)
end