Sha256: e877a531a7d0f9c169c5c75975f80ef4b2824056a9ca9922e8020cc5b1b8327f

Contents?: true

Size: 1.92 KB

Versions: 129

Compression:

Stored size: 1.92 KB

Contents

# frozen-string-literal: true

module Sequel
  module Plugins
    # 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.
    module ValidationContexts
      module InstanceMethods 
        # The validation context to use for the current validation.
        # Set via the :validation_context option passed to save/valid?.
        attr_reader :validation_context

        private

        # Set validation context before running validations
        def _valid?(opts)
          @validation_context = opts[:validation_context] if opts[:validation_context]
          super
        ensure
          @validation_context = nil if @validation_context
        end
      end
    end
  end
end

Version data entries

129 entries across 112 versions & 2 rubygems

Version Path
sequel-5.88.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.87.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.86.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.85.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.84.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.83.1 lib/sequel/plugins/validation_contexts.rb
sequel-5.83.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.82.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.81.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.80.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.79.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.78.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.77.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.76.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.75.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.74.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.73.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.72.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.71.0 lib/sequel/plugins/validation_contexts.rb
sequel-5.70.0 lib/sequel/plugins/validation_contexts.rb