Sha256: 2a2fc0fd9e734b4308c4d178294e4e46cd99d8ed14417b26fcebda99a68911ba
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
# frozen_string_literal: true require_relative 'base_matcher' module Pundit module Matchers # This is the base action matcher class. Matchers related to actions should inherit from this class. class ActionsMatcher < BaseMatcher # Error message when actions are not implemented in a policy. ACTIONS_NOT_IMPLEMENTED_ERROR = "'%<policy>s' does not implement %<actions>s" # Error message when at least one action must be specified. ARGUMENTS_REQUIRED_ERROR = 'At least one action must be specified' # Error message when only one action may be specified. ONE_ARGUMENT_REQUIRED_ERROR = 'Only one action may be specified' # Initializes a new instance of the ActionsMatcher class. # # @param expected_actions [Array<String, Symbol>] The expected actions to be checked. # # @raise [ArgumentError] If no actions are specified. def initialize(*expected_actions) raise ArgumentError, ARGUMENTS_REQUIRED_ERROR if expected_actions.empty? super() @expected_actions = expected_actions.flatten.map(&:to_sym).sort end # Ensures that only one action is specified. # # @raise [ArgumentError] If more than one action is specified. # # @return [ActionsMatcher] The object itself. def ensure_single_action! raise ArgumentError, ONE_ARGUMENT_REQUIRED_ERROR if expected_actions.size > 1 self end private attr_reader :expected_actions def check_actions! missing_actions = expected_actions - policy_info.actions return if missing_actions.empty? raise ArgumentError, format( ACTIONS_NOT_IMPLEMENTED_ERROR, policy: policy_info, actions: missing_actions ) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pundit-matchers-3.0.0 | lib/pundit/matchers/actions_matcher.rb |
pundit-matchers-3.0.0.beta4 | lib/pundit/matchers/actions_matcher.rb |