class RuboCop::Cop::Betterment::UnscopedFind
def find_param_arg(arg_nodes)
def find_param_arg(arg_nodes) return unless arg_nodes arg_nodes.find do |arg| if arg.hash_type? arg.children.each do |pair| _key, value = *pair.children return arg if uses_params?(value) end end uses_params?(arg) end end
def graphql_file?
def graphql_file? processed_source.path&.match?(GRAPHQL_PATTERN) end
def graphql_namespace?(node)
def graphql_namespace?(node) node .each_ancestor(:class, :module) .any? { |ancestor| find_graphql_namespace_nodes(ancestor).any? } end
def initialize(config = nil, options = nil)
def initialize(config = nil, options = nil) super @unauthenticated_models = cop_config.fetch("unauthenticated_models").map(&:to_sym) end
def on_class(node)
def on_class(node) Utils::MethodReturnTable.populate_index(node) end
def on_send(node)
def on_send(node) _, _, *arg_nodes = *node # rubocop:disable InternalAffairs/NodeDestructuring return unless ( find?(node) || custom_scope_find?(node) || static_method_name(node.method_name) ) && !@unauthenticated_models.include?(Utils::Parser.get_root_token(node)) add_offense(node) if find_param_arg(arg_nodes) || graphql_file? || graphql_namespace?(node) end
def static_method_name(method_name)
def static_method_name(method_name) match = METHOD_PATTERN.match(method_name) return nil unless match match[2] ? 'find_by!' : 'find_by' end
def uses_params?(node)
def uses_params?(node) root = Utils::Parser.get_root_token(node) root == :params || Array(Utils::MethodReturnTable.get_method(root)).find do |x| Utils::Parser.get_root_token(x) == :params end end