Class: SyntaxSuggest::Cli
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/syntax_suggest/cli.rb |
Overview
Class Method Summary
-
.new(argv:, exit_obj: Kernel, io: $stdout, env: ENV) ⇒ Cli
constructor
ARGV is Everything passed to the executable, does not include executable name.
Instance Attribute Summary
- #options rw
Instance Method Summary
Constructor Details
.new(argv:, exit_obj: Kernel, io: $stdout, env: ENV) ⇒ Cli
ARGV is Everything passed to the executable, does not include executable name
All other intputs are dependency injection for testing
# File 'lib/syntax_suggest/cli.rb', line 20
def initialize(argv:, exit_obj: Kernel, io: $stdout, env: ENV) @options = {} @parser = nil [:record_dir] = env["SYNTAX_SUGGEST_RECORD_DIR"] [:record_dir] = "tmp" if env["DEBUG"] [:terminal] = SyntaxSuggest::DEFAULT_VALUE @io = io @argv = argv @exit_obj = exit_obj end
Instance Attribute Details
#options (rw)
[ GitHub ]# File 'lib/syntax_suggest/cli.rb', line 15
attr_accessor :
Instance Method Details
#call
[ GitHub ]# File 'lib/syntax_suggest/cli.rb', line 32
def call if @argv.empty? # Display help if raw command parser.parse! %w[--help] return else # Mutates @argv parse return if [:exit] end file_name = @argv.first if file_name.nil? @io.puts "No file given" @exit_obj.exit(1) return end file = Pathname(file_name) if !file.exist? @io.puts "file not found: #{file.} " @exit_obj.exit(1) return end @io.puts "Record dir: #{ [:record_dir]}" if [:record_dir] display = SyntaxSuggest.call( io: @io, source: file.read, filename: file., terminal: .fetch(:terminal, SyntaxSuggest::DEFAULT_VALUE), record_dir: [:record_dir] ) if display.document_ok? @io.puts "Syntax OK" @exit_obj.exit(0) else @exit_obj.exit(1) end end
#parse
[ GitHub ]# File 'lib/syntax_suggest/cli.rb', line 75
def parse parser.parse!(@argv) self end
#parser
[ GitHub ]# File 'lib/syntax_suggest/cli.rb', line 81
def parser @parser ||= OptionParser.new do |opts| opts. = <<~EOM Usage: syntax_suggest <file> [options] Parses a ruby source file and searches for syntax error(s) such as unexpected `end', expecting end-of-input. Example: $ syntax_suggest dog.rb # ... > 10 defdog > 15 end ENV options: SYNTAX_SUGGEST_RECORD_DIR=<dir> Records the steps used to search for a syntax error to the given directory Options: EOM opts.version = SyntaxSuggest::VERSION opts.on("--help", "Help - displays this message") do |v| @io.puts opts [:exit] = true @exit_obj.exit end opts.on("--record <dir>", "Records the steps used to search for a syntax error to the given directory") do |v| [:record_dir] = v end opts.on("--terminal", "Enable terminal highlighting") do |v| [:terminal] = true end opts.on("--no-terminal", "Disable terminal highlighting") do |v| [:terminal] = false end end end