Class: RailsMcpInsight::Analyzers::JobAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_mcp_insight/analyzers/job_analyzer.rb

Overview

Analyzes ActiveJob classes to extract queue configuration, retry policies, callbacks, and trigger locations.

Instance Method Summary collapse

Constructor Details

#initialize(config, ast_parser: AstParser.new) ⇒ JobAnalyzer

Returns a new instance of JobAnalyzer.



8
9
10
11
# File 'lib/rails_mcp_insight/analyzers/job_analyzer.rb', line 8

def initialize(config, ast_parser: AstParser.new)
  @config = config
  @ast_parser = ast_parser
end

Instance Method Details

#analyze(job_name) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rails_mcp_insight/analyzers/job_analyzer.rb', line 13

def analyze(job_name)
  file_path = find_job_file(job_name)
  return nil unless file_path

  parsed = @ast_parser.parse_file(file_path)
  return nil unless parsed

  content = File.read(file_path)

  {
    name: job_name,
    file: relative_path(file_path),
    parent_class: parsed.classes.first&.parent || "ApplicationJob",
    queue: extract_queue(parsed),
    retry_config: extract_retry_config(parsed),
    discard_config: extract_discard_config(parsed),
    callbacks: extract_job_callbacks(parsed),
    perform_args: extract_perform_args(content),
    triggered_by: find_triggers(job_name)
  }
end

#list_allObject

List all jobs



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/rails_mcp_insight/analyzers/job_analyzer.rb', line 36

def list_all
  jobs_dir = @config.jobs_path
  return [] unless Dir.exist?(jobs_dir)

  Dir.glob(File.join(jobs_dir, "**", "*.rb")).filter_map do |file|
    parsed = @ast_parser.parse_file(file)
    next unless parsed&.classes&.any?

    klass = parsed.classes.first
    {
      name: klass.name,
      file: relative_path(file),
      queue: extract_queue(parsed)
    }
  end
end