A custom validation for your Active Model that check if an array is included in another one
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Bumping 1.2.0 Dec 20, 2017
spec Adding code climate tests reports Dec 20, 2017
.gitignore Update .gitignore Jun 1, 2017
.rspec Initial commit Jun 1, 2017
.travis.yml [CI] Test against Ruby 2.3 and 2.5 (#6) Mar 22, 2018
Gemfile Initial commit Jun 1, 2017
README.md Adding code climate tests reports Dec 20, 2017
Rakefile Initial commit Jun 1, 2017
active_model_validates_intersection_of.gemspec Adding code climate tests reports Dec 20, 2017


Active Model Validates Intersection Of

Gem Version Maintainability Test Coverage Coverage Status Travis

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

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" }



The gem is available as open source under the terms of the MIT License.


First of all, thank you for wanting to help!

  1. Fork it.
  2. Create a feature branch - git checkout -b more_magic
  3. Add tests and make your changes
  4. Check if tests are ok - rake spec
  5. Commit changes - git commit -am "Added more magic"
  6. Push to Github - git push origin more_magic
  7. Send a pull request! ❤️