module DataMapper::Validations::Context

Module with validation context functionality.

Contexts are implemented using a thread-local array-based stack.

Public Class Methods

any?(&block) click to toggle source

Are there any contexts on the stack?

@return [Boolean]

true/false whether there are any contexts on the context stack

@api semipublic

# File lib/dm-validations/context.rb, line 36
def self.any?(&block)
  stack.any?(&block)
end
current() click to toggle source

Get the current validation context or nil (if no context is on the stack).

@return [Symbol, NilClass]

The current validation context (for the current thread),
or nil if no current context is on the stack
# File lib/dm-validations/context.rb, line 26
def self.current
  stack.last
end
in_context(context) { || ... } click to toggle source

Execute a block of code within a specific validation context

@param [Symbol] context

the context to execute the block of code within

@api semipublic

# File lib/dm-validations/context.rb, line 14
def self.in_context(context)
  stack << context
  yield
ensure
  stack.pop
end
stack() click to toggle source

The (thread-local) validation context stack This allows object graphs to be saved within potentially nested contexts without having to pass the validation context throughout

@api private

# File lib/dm-validations/context.rb, line 45
def self.stack
  Thread.current[:dm_validations_context_stack] ||= []
end

Public Instance Methods

default_validation_context() click to toggle source

The default validation context for this Resource. This Resource’s default context can be overridden by implementing default_validation_context

@return [Symbol]

the current validation context from the context stack
(if valid for this model), or :default

@api semipublic

# File lib/dm-validations/context.rb, line 58
def default_validation_context
  model.validators.current_context || :default
end