Class: MetzScan::Analyzers::RepeatedQueryCriteria

Inherits:
Object
  • Object
show all
Includes:
ProjectAnalyzerTriage, Triage
Defined in:
lib/metz_scan/analyzers/repeated_query_criteria.rb,
lib/metz_scan/analyzers/repeated_query_criteria/triage.rb

Overview

Reports repeated hash-style ActiveRecord query predicates across packages.

Defined Under Namespace

Modules: Triage Classes: Finding, QuerySiteCollector, QuerySiteSet

Constant Summary collapse

RULE_ID =
"MetzProject/RepeatedQueryCriteria"
PROJECT_ANALYZER_STATUS =
"candidate"
CONFIDENCE =
"medium"
TRIAGE_SEVERITY =
"manual review"
TRIAGE_SUMMARY =
"Candidate repeated query signal; review whether criteria belong behind a named query."
WHY =
"Repeated query predicates spread data-access rules across callers and make policy changes harder to find."
SUGGESTED_NEXT_MOVES =
[
  "Extract a named scope or query object when the predicate represents a reusable business concept.",
  "Keep one-off lookup criteria inline when repetition is incidental or purely local."
].freeze
MINIMUM_FILES =
3
MINIMUM_PACKAGES =
2
MINIMUM_CRITERIA_KEYS =
2

Instance Method Summary collapse

Constructor Details

#initialize(paths: nil, index: nil, minimum_files: MINIMUM_FILES, minimum_packages: MINIMUM_PACKAGES) ⇒ RepeatedQueryCriteria

Returns a new instance of RepeatedQueryCriteria.



43
44
45
46
47
48
# File 'lib/metz_scan/analyzers/repeated_query_criteria.rb', line 43

def initialize(paths: nil, index: nil, minimum_files: MINIMUM_FILES, minimum_packages: MINIMUM_PACKAGES)
  @paths = Array(paths)
  @index = index
  @minimum_files = minimum_files
  @minimum_packages = minimum_packages
end

Instance Method Details

#callObject



50
51
52
53
54
# File 'lib/metz_scan/analyzers/repeated_query_criteria.rb', line 50

def call
  query_sites.group_by(&:fingerprint).filter_map do |_fingerprint, sites|
    finding_for(sites)
  end
end