class Shoulda::Matchers::ActionController::PermitMatcher::ParametersDoubleRegistry

@private

Constants

TOP_LEVEL

Attributes

double_collections_by_parameter_name[R]
params[R]

Public Class Methods

new(params) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 377
def initialize(params)
  @params = params
  @double_collections_by_parameter_name = {}
end
permitted_parameter_names_within(double_collection) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 373
def self.permitted_parameter_names_within(double_collection)
  double_collection.calls_to(:permit).map(&:args).flatten
end

Public Instance Methods

permitted_parameter_names(args = {}) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 386
def permitted_parameter_names(args = {})
  subparameter_name = args.fetch(:for, TOP_LEVEL)

  if double_collections_by_parameter_name.key?(subparameter_name)
    self.class.permitted_parameter_names_within(
      double_collections_by_parameter_name[subparameter_name],
    )
  else
    []
  end
end
register() click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 382
def register
  register_double_for_permit_against(params, TOP_LEVEL)
end

Private Instance Methods

register_double_for_permit_against(params, subparameter_name) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 404
def register_double_for_permit_against(params, subparameter_name)
  klass = params.singleton_class

  double_collection = Doublespeak.double_collection_for(klass)
  register_double_for_permit_on(double_collection)
  register_double_for_require_on(double_collection)

  double_collections_by_parameter_name[subparameter_name] =
    double_collection
end
register_double_for_permit_on(double_collection) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 415
def register_double_for_permit_on(double_collection)
  double_collection.register_proxy(:permit)
end
register_double_for_require_on(double_collection) click to toggle source
# File lib/shoulda/matchers/action_controller/permit_matcher.rb, line 419
def register_double_for_require_on(double_collection)
  double_collection.register_proxy(:require).to_return do |call|
    params = call.return_value
    subparameter_name = call.args.first
    register_double_for_permit_against(params, subparameter_name)
  end
end