A custom validation for Active Model that check if an array is included in another one.
Identical to the method validates_inclusion_of from ActiveModel but for array comparison.
Consider an User model that have some set of "default" permissions.
class User < ActiveRecord::Base
DEFAULT_PERMISSION = ["read", "write", "share"]
validates_intersection_of :permission, in: DEFAULT_PERMISSION
endIf you want to validate your user based on an array:
user = User.new(permission: ["read", "share"])
user.valid? #true
user = User.new(permission: ["read", "admin"])
user.valid? #falseThis active model custom validation is for you!
Add this line to your application's Gemfile:
gem "active_model_validates_intersection_of"And then execute:
$ bundle
Or install it yourself as:
$ gem install active_model_validates_intersection_of
If your framework doesn't auto require gems, don't forget to do it after require of active_model gem.
require "active_model"
require "active_model_validates_intersection_of":in- Parameter is required. (Supports: Array, proc and lambda):within- Optional: A synonym(alias) for:in:message- Optional: Specifies a custom error message
You can use the intersection validation in three differents ways: (Feel free to use what you liked more :))
class User < ActiveRecord::Base
DEFAULT_PERMISSION = ["read", "write", "share"]
# Using the alias validates_intersection_of
validates_intersection_of :permission, in: DEFAULT_PERMISSION, message: "invalid permission"
validates_intersection_of :permission, within: DEFAULT_PERMISSION, message: "invalid permission"
# proc and lambda support
validates_intersection_of :permission, in: proc { DEFAULT_PERMISSION }, message: "invalid permission"
validates_intersection_of :permission, in: lambda { |l| DEFAULT_PERMISSION }, message: "invalid permission"
# Using the validator explicit:
validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:permission], in: DEFAULT_PERMISSION
validates_with ActiveModelValidatesIntersectionOf::Validator, attributes: [:permission], within: DEFAULT_PERMISSION
#Using the validator implicit:
validates :permission, intersection: { in: DEFAULT_PERMISSION, message: "invalid permission" }
validates :permission, intersection: { within: DEFAULT_PERMISSION, message: "invalid permission" }
endThe gem is available as open source under the terms of the MIT License.
First of all, thank you for wanting to help!
- Fork it.
- Create a feature branch -
git checkout -b more_magic - Add tests and make your changes
- Check if tests are ok -
rake spec - Commit changes -
git commit -am "Added more magic" - Push to Github -
git push origin more_magic - Send a pull request! ❤️