class Shoulda::Matchers::ActionController::StrongParametersMatcher

Attributes

action[R]
context[R]
controller[R]
double_collection[R]
expected_permitted_params[R]
request_params[R]
stubbed_params[W]
verb[R]

Public Class Methods

new(expected_permitted_params) click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 20
def initialize(expected_permitted_params)
  @action = nil
  @verb = nil
  @request_params = {}
  @expected_permitted_params = expected_permitted_params
  set_double_collection
end

Public Instance Methods

description() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 40
def description
  "permit #{verb.upcase} ##{action} to receive parameters #{param_names_as_sentence}"
end
failure_message() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 55
def failure_message
  "Expected controller to permit #{unpermitted_params.to_sentence}, but it did not."
end
Also aliased as: failure_message_for_should
failure_message_for_should()
Alias for: failure_message
failure_message_for_should_not()
failure_message_when_negated() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 60
def failure_message_when_negated
  "Expected controller not to permit #{verified_permitted_params.to_sentence}, but it did."
end
for(action, options = {}) click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 28
def for(action, options = {})
  @action = action
  @verb = options.fetch(:verb, default_verb)
  @request_params = options.fetch(:params, {})
  self
end
in_context(context) click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 35
def in_context(context)
  @context = context
  self
end
matches?(controller) click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 44
def matches?(controller)
  @controller = controller
  ensure_action_and_verb_present!

  Doublespeak.with_doubles_activated do
    context.__send__(verb, action, request_params)
  end

  unpermitted_params.empty?
end

Private Instance Methods

actual_permitted_params() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 78
def actual_permitted_params
  double_collection.calls_to(:permit).inject([]) do |all_param_names, call|
    all_param_names + call.args
  end.flatten
end
default_verb() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 106
def default_verb
  case action
    when :create then :post
    when :update then RailsShim.verb_for_update
  end
end
ensure_action_and_verb_present!() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 96
def ensure_action_and_verb_present!
  if action.blank?
    raise ActionNotDefinedError
  end

  if verb.blank?
    raise VerbNotDefinedError
  end
end
param_names_as_sentence() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 113
def param_names_as_sentence
  expected_permitted_params.map(&:inspect).to_sentence
end
permit_called?() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 84
def permit_called?
  actual_permitted_params.any?
end
set_double_collection() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 70
def set_double_collection
  @double_collection =
    Doublespeak.register_double_collection(::ActionController::Parameters)

  @double_collection.register_stub(:require).to_return { |params| params }
  @double_collection.register_proxy(:permit)
end
unpermitted_params() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 88
def unpermitted_params
  expected_permitted_params - actual_permitted_params
end
verified_permitted_params() click to toggle source
# File lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb, line 92
def verified_permitted_params
  expected_permitted_params & actual_permitted_params
end