Module: RailVerdict::RailsContext::Resolvers::PolicyResolver

Defined in:
lib/rail_verdict/rails_context/resolvers/policy_resolver.rb

Class Method Summary collapse

Class Method Details

.for(repository_root:, kind:, path:, constant:) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rail_verdict/rails_context/resolvers/policy_resolver.rb', line 7

def self.for(repository_root:, kind:, path:, constant:)
  return [] unless %w[model controller].include?(kind)
  return [] if constant.nil? || constant.empty?

  base_name = constant.split("::").last.to_s
  snake = underscore(base_name)
  dir_parts = constant.split("::")[0...-1].map { |part| underscore(part) }
  relative_dir = dir_parts.empty? ? "" : "#{dir_parts.join('/')}/"
  repo_relative = "app/policies/#{relative_dir}#{snake}_policy.rb"
  full = File.join(repository_root, repo_relative)
  return [] unless safe_exists?(repository_root, full)

  [{ "path" => repo_relative, "relationship" => "policy", "confidence" => "conventional", "provenance" => "file_exists:#{repo_relative}" }]
rescue StandardError
  []
end