Class: MetzScan::Analyzers::RepeatedQueryCriteria
- Inherits:
-
Object
- Object
- MetzScan::Analyzers::RepeatedQueryCriteria
- 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
- #call ⇒ Object
-
#initialize(paths: nil, index: nil, minimum_files: MINIMUM_FILES, minimum_packages: MINIMUM_PACKAGES) ⇒ RepeatedQueryCriteria
constructor
A new instance of RepeatedQueryCriteria.
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
#call ⇒ Object
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 |