module Right::FilterValueValidator

Build singleton validation class for specified attribute name @example you need a nice validator for a first_name

validator_klass = ValueValidator.build('first_name', presence: true, length: { minimum: 3 })
validator = validator_klass.new('Bo')
validator.valid? #=> false
validator.errors.full_messages #=> ['First name is too short (minimum is 3 characters)']

Public Instance Methods

build(definition) click to toggle source
# File lib/right/filter_value_validator.rb, line 20
def build(definition)
  Struct.new(definition.as.to_sym) do
    include ActiveModel::Validations

    validates(definition.as, definition.validations) if definition.validations.present?
    validates(definition.as, 'right/filter_value_validator/defined': true)

    define_method(:undefined?) { definition.undefined? }

    define_singleton_method :model_name do
      ActiveModel::Name.new(Right, nil, 'Right')
    end
  end
end