class Shoulda::Matchers::ActionController::PermitMatcher
@private
def actual_permitted_parameter_names
def actual_permitted_parameter_names @_actual_permitted_parameter_names ||= begin options = if subparameter_name { for: subparameter_name } else {} end parameters_double_registry.permitted_parameter_names(options) end end
def add_params(params)
def add_params(params) request_params.merge!(params) self end
def default_verb
def default_verb case action when :create then :post when :update then RailsShim.verb_for_update end end
def description
def description "(for #{verb.upcase} ##{action}) " + expectation end
def ensure_action_and_verb_present!
def ensure_action_and_verb_present! if action.blank? raise ActionNotDefinedError end if verb.blank? raise VerbNotDefinedError end end
def expectation
def expectation String.new('restrict parameters ').tap do |message| if subparameter_name message << "on #{subparameter_name.inspect} " end message << 'to '\ "#{format_parameter_names(expected_permitted_parameter_names)}" end end
def failure_message
def failure_message "Expected #{verb.upcase} ##{action} to #{expectation},"\ "\nbut #{reality}." end
def failure_message_when_negated
def failure_message_when_negated "Expected #{verb.upcase} ##{action} not to #{expectation},"\ "\nbut it did." end
def for(action, options = {})
def for(action, options = {}) @action = action @verb = options.fetch(:verb, default_verb) @request_params = options.fetch(:params, {}) self end
def format_parameter_names(parameter_names)
def format_parameter_names(parameter_names) parameter_names.map(&:inspect).to_sentence end
def in_context(context)
def in_context(context) @context = context self end
def initialize(expected_permitted_parameter_names)
def initialize(expected_permitted_parameter_names) @expected_permitted_parameter_names = expected_permitted_parameter_names @action = nil @verb = nil @request_params = {} @subparameter_name = nil @parameters_double_registry = CompositeParametersDoubleRegistry.new end
def matches?(controller)
def matches?(controller) @controller = controller ensure_action_and_verb_present! parameters_double_registry.register Doublespeak.with_doubles_activated do params = { params: request_params } context.__send__(verb, action, **params) end unpermitted_parameter_names.empty? end
def on(subparameter_name)
def on(subparameter_name) @subparameter_name = subparameter_name self end
def parameter_names_as_sentence
def parameter_names_as_sentence expected_permitted_parameter_names.map(&:inspect).to_sentence end
def reality
def reality if actual_permitted_parameter_names.empty? 'it did not restrict any parameters' else 'the restricted parameters were '\ "#{format_parameter_names(actual_permitted_parameter_names)}"\ ' instead' end end
def unpermitted_parameter_names
def unpermitted_parameter_names expected_permitted_parameter_names - actual_permitted_parameter_names end