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