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
end
If 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? #false
This 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" }
end
The 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! ❤️