Class: AIRspecWriter::SchemaExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/ai_rspec_writer/schema_extractor.rb

Constant Summary collapse

SCHEMA_FILE =
"db/schema.rb"

Class Method Summary collapse

Class Method Details

.extract_schema(table_names, spinner) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ai_rspec_writer/schema_extractor.rb', line 22

def self.extract_schema(table_names, spinner)
  unless File.exist?(SCHEMA_FILE)
    spinner.error("\n❌ Error: `db/schema.rb` not found. Run `rails db:migrate` first.")
    return nil
  end
  
  schema_content = File.read(SCHEMA_FILE)
  
  match = "" # ✅ Fix: Initialize match variable to avoid nil error
  matched_tables = []
  table_names.map do |table_name|
    matched_data = schema_content.match(/create_table "#{table_name}".*?^\s*end$/m)
    if matched_data.present?
      match += "#{matched_data[0]}\n\n" 
      matched_tables << table_name
    end
  end.join("\n\n") # Combine multiple files
  
  if match
    # Stop the spinner when AI response is ready
    spinner.success("#{matched_tables} ✅ Done!")
    return match
  else
    spinner.error("(No schema found for table: #{table_names})")
    return nil
  end
end

.extract_schema_from_file(table_names) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/ai_rspec_writer/schema_extractor.rb', line 11

def self.extract_schema_from_file(table_names)
  return nil unless table_names

  # Define loading spinner
  spinner = TTY::Spinner.new("[:spinner] Fetching Schema From Schema.rb : ".yellow, format: :dots)

  # Start the spinner
  spinner.auto_spin
  extract_schema(table_names, spinner)
end