Skip to content
Gem for Rails 3 and 4, that helps validate overlap
Ruby JavaScript HTML
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib allow to setup shifts, so it's possible to check wide/narrow ranges
spec allow to setup shifts, so it's possible to check wide/narrow ranges
.gitignore Setup a travis build matrix to check different versions of ruby and r…
.travis.yml Extend specs to include rails 4.2
Gemfile
Gemfile.rails30 Setup a travis build matrix to check different versions of ruby and r…
Gemfile.rails32 Setup a travis build matrix to check different versions of ruby and r…
Gemfile.rails40 Setup a travis build matrix to check different versions of ruby and r…
Gemfile.rails41
Gemfile.rails42 Extend specs to include rails 4.2
MIT-LICENSE Initial comit
README.md allow to setup shifts, so it's possible to check wide/narrow ranges
Rakefile Clean rake file
VERSION Bump version to 0.6.0
validates_overlap.gemspec Increase version to 0.5.2

README.md

Build Status

ValidatesOverlap

This project rocks and uses MIT-LICENSE.

This gem is compatible with Rails 3 and 4.

When this gem should be helpful for you?

If you are developing Rails 3 app, let say some meeting planner and you can't save records which have time overlap.

Using

Add to your gemfile

gem 'validates_overlap'

In your model

without scope

validates :starts_at, :ends_at, :overlap => true

with scope

validates :starts_at, :ends_at, :overlap => {:scope => "user_id"}

exclude edges

validates :starts_at, :ends_at, :overlap => {:exclude_edges => "starts_at"}
validates :starts_at, :ends_at, :overlap => {:exclude_edges => ["starts_at", "ends_at"]}

shift edges

validates :starts_at, :ends_at, :overlap => {:start_shift => -1.day, :end_shift => 1.day}

define custom validation key and message

validates :starts_at, :ends_at, :overlap => {:message_title => "Some validation title", :message_content => "Some validation message"}

with complicated relations

Example describes valildatation of user, positions and time slots. User can't be assigned 2 times on position which is under time slot with time overlap.

class Position < ActiveRecord::Base
  belongs_to :time_slot
  belongs_to :user
  validates "time_slots.starts_at", "time_slots.ends_at",
    :overlap => {
      :query_options => {:includes => :time_slot},
      :scope => { "positions.user_id" => proc{|position| position.user_id} }
    }
end

apply named scopes

class ActiveMeeting < ActiveRecord::Base
  validates :starts_at, :ends_at, :overlap => {:query_options => {:active => nil}}
  scope :active, where(:is_active => true)
end

Rails 4.1 update

If you just upgraded your application to rails 4.1 you can discover some issue with custom scopes. In older versions we suggest to use definition like

  {:overlap => {:query_options => {:active => true}}}

but this code is not longer working. Currently please change your code to

  {:overlap => {:query_options => {:active => nil}}}

Thanks @supertinou for discovering and fix of this bug.

Something went wrong with that request. Please try again.