Class: Alchemy::IngredientValidator

Inherits:
ActiveModel::Validator
  • Object
show all
Defined in:
app/models/alchemy/ingredient_validator.rb

Overview

Ingredient Validations:

Ingredient validations can be set inside the config/elements.yml file.

Supported validations are:

  • presence
  • uniqueness
  • format

*) format needs to come with a regex or a predefined matcher string as its value.

There are already predefined format matchers listed in the config/alchemy/config.yml file. It is also possible to add own format matchers there.

Example of format matchers in config/alchemy/config.yml:

format_matchers: email: !ruby/regexp '/\A[^@\s]+@([^@\s]+.)+[^@\s]+\z/' url: !ruby/regexp '/\A[a-z0-9]+([-.]1[a-z0-9]+).[a-z]2,5(:[0-9]1,5)?(/.)?\z/ix' ssl: !ruby/regexp '/https://[\S]+/'

Example of an element definition with ingredient validations:

  • name: person ingredients:
    • role: name type: Text validate: [presence]
    • role: email type: Text validate: [format: 'email']
    • role: homepage type: Text validate: [format: !ruby/regexp '^[a-z0-9]+([-.]1[a-z0-9]+).[a-z]2,5(:[0-9]1,5)?(/.)?$']

Example of an element definition with chained validations.

  • name: person ingredients:
    • role: name type: Text validate: [presence, uniqueness, format: 'name']

Instance Method Summary collapse

Instance Method Details

#validate(ingredient) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/alchemy/ingredient_validator.rb', line 49

def validate(ingredient)
  @ingredient = ingredient
  validations.each do |validation|
    if validation.respond_to?(:keys)
      validation.map do |key, value|
        send(:"validate_#{key}", value)
      end
    else
      send(:"validate_#{validation}")
    end
  end
end