class Shoulda::Matchers::ActionController::PermitMatcher::ParametersDoubleRegistry
@private
def self.permitted_parameter_names_within(double_collection)
def self.permitted_parameter_names_within(double_collection) double_collection.calls_to(:permit).map(&:args).flatten end
def initialize(params)
def initialize(params) @params = params @double_collections_by_parameter_name = {} end
def permitted_parameter_names(args = {})
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
def register
def register register_double_for_permit_against(params, TOP_LEVEL) end
def register_double_for_permit_against(params, subparameter_name)
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
def register_double_for_permit_on(double_collection)
def register_double_for_permit_on(double_collection) double_collection.register_proxy(:permit) end
def register_double_for_require_on(double_collection)
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