module Granite::Action::Preconditions::ClassMethods

Public Instance Methods

precondition(*args, &block) click to toggle source

Define preconditions for current action.

@param options [Hash] hash with @option message [String, Symbol] error message @option group [Symbol] procondition group(s) @param block [Block] which returns truthy value when precondition

should pass.
# File lib/granite/action/preconditions.rb, line 47
def precondition(*args, &block)
  options = args.extract_options!
  if block
    add_precondition(BasePrecondition, options, &block)
  elsif args.first.is_a?(Class)
    add_precondition(ObjectPrecondition, *args, options)
  else
    add_preconditions_hash(*args, **options)
  end
end

Private Instance Methods

add_precondition(klass, *args, &block) click to toggle source
# File lib/granite/action/preconditions.rb, line 79
def add_precondition(klass, *args, &block)
  self._preconditions += klass.new(*args, &block)
end
add_preconditions_hash(*args, **options) click to toggle source
# File lib/granite/action/preconditions.rb, line 67
def add_preconditions_hash(*args, **options)
  common_options = options.extract!(:if, :unless, :desc, :description)
  args.each do |type|
    precondition common_options.merge(type => {})
  end
  options.each do |key, value|
    value = Array.wrap(value)
    precondition_options = value.extract_options!
    add_precondition(klass(key), *value, precondition_options.merge!(common_options))
  end
end
klass(key) click to toggle source
# File lib/granite/action/preconditions.rb, line 60
def klass(key)
  key = key.to_s.camelize
  Granite.precondition_namespaces.reduce(nil) do |memo, ns|
    memo || "#{ns.to_s.camelize}::#{key}Precondition".safe_constantize
  end || fail(NameError, "No precondition class for #{key}Precondition")
end