class Crispr::CLI
Handles argument parsing and invokes the mutation and runner logic.
Provides the command-line interface for the Crispr gem.
def self.run(argv = ARGV)
def self.run(argv = ARGV) command = argv.shift case command when "run" input_path = argv.shift unless input_path && File.exist?(input_path) puts "Error: Please specify a valid Ruby file or directory to mutate." exit 1 end paths = File.directory?(input_path) ? Dir.glob("#{input_path}/**/*.rb") : [input_path] reporter = Crispr::Reporter.new paths.each do |path| source = File.read(path) mutator = Crispr::Mutator.new(source) mutations = mutator.mutations if mutations.empty? puts "No mutations found in #{path}." next end mutations.each_with_index do |mutated, index| puts "Running mutation #{index + 1}/#{mutations.size} on #{path}..." killed = Crispr::Runner.run_mutation(path: path, mutated_source: mutated) reporter.record(killed: killed) puts killed ? "💥 Mutation killed" : "⚠️ Mutation survived" end end summary = reporter.summary puts puts "Mutations: #{summary[:mutations]}" puts "💥 Killed: #{summary[:killed]}" puts "⚠️ Survived: #{summary[:survived]}" puts "Score: #{summary[:score]}%" else puts "Usage: crispr run path/to/file.rb" exit 1 end end