Module: DynamicValidation

Defined in:
lib/dynamic_validation.rb,
lib/dynamic_validation/version.rb

Overview

DynamicValidation

allows you to add validations at runtime # withouth having validations affect all of your records.

Examples:

In a Record


class MyModel < ApplicationRecord
  include DynamicValidation
end

Later in the code


my_model = MyModel.new(my_model_params)
my_model.add_validator { |record| record.errors.add(:foo, "bar") if record.condition? }
my_model.add_validators(CustomValidator, { minimum: 4 })

Author:

  • Franky W.

Defined Under Namespace

Classes: BlockValidator, Version

Constant Summary

VERSION =

The current version of ErrorNotifer

Version.to_s

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



27
28
29
# File 'lib/dynamic_validation.rb', line 27

def self.included(klass)
  klass.validate :dynamic_validations
end

Instance Method Details

#add_validators(*args, &block) ⇒ Object Also known as: add_validator

add_validator is the only public method that is added which allows any instance of a model to add a validator dyanmically.

Usage

Examples:

Add a block validator


record.add_validator do |instance|
  instance.errors.add(:foo, "bar") unless instance.some_condition?
end

ObjectValidator


record.add_validator(ObjectValidator)

OtherObjectValidator with Arguments


record.add_validator(ObjectValidator, {argument_1: "a", argument_2: "b"})

Array of Validators (ObjectValidator, OtherValidator)


record.add_validators(ObjectValidator, OtherValidator)


57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/dynamic_validation.rb', line 57

def add_validators(*args, &block)
  @dynamic_validators = {} unless defined? @dynamic_validators
  options = args.extract_options!
  args.each do |validator|
    if !validator.new(options).respond_to?(:validate) || validator.new(options).method(:validate).arity != 1
      raise NotImplementedError, "#{validator} must implement a validate(record) method."
    end
    @dynamic_validators[validator] = options
  end

  add_validator BlockValidator, block: block if block_given?
end

#delete_validator(validator) ⇒ Object

delete_valdiators allows for a previously added validator to be removed from the list of validations to be ran



73
74
75
# File 'lib/dynamic_validation.rb', line 73

def delete_validator(validator)
  @dynamic_validators.delete(validator) if defined? @dynamic_validators
end