Module | Sequel::Plugins::ValidationContexts |
In: |
lib/sequel/plugins/validation_contexts.rb
|
The validation_contexts plugin adds support for a validation_context method inside a validate method. You pass in the validation context to use via the :validation_context option to Sequel::Model#save && Sequel::Model#valid?:
class Album < Sequel::Model plugin :validation_contexts def validate super errors.add(:status_id, 'not 1') if status_id != 1 && validation_context == :initial errors.add(:status_id, 'not 2') if status_id != 2 && validation_context == :approve end end Album.new(status_id: 1).valid?(validation_context: :initial) # => true Album.new(status_id: 2).valid?(validation_context: :initial) # => false Album.new(status_id: 1).valid?(validation_context: :approve) # => false Album.new(status_id: 2).valid?(validation_context: :approve) # => true
There is no validation context used by default, so validation_context will be nil if one is not specified. If you want to differentiate between creating new objects and updating existing objects, just use +new?+.
Once this plugin is loaded into a model, after you freeze an instance of that model, you can no longer specify a validation context when validating the instance.