module Rpr
Rpr
searchs config file h from ./.rpr, ~/.config/rpr
Constants
- VERSION
Public Class Methods
find_formatter(name)
click to toggle source
@param [Symbol] name @return [Module]
# File lib/rpr.rb, line 42 def find_formatter(name) require "rpr/formatter/#{name}" Formatter.const_get(:"#{name[0].upcase}#{name[1..-1]}") rescue LoadError raise UnknownFormatter, "#{name} is unknown formatter. It supports #{self.formatters.join('|')}" end
find_parser(name)
click to toggle source
@param [Symbol] name @return [Module]
# File lib/rpr.rb, line 56 def find_parser(name) require "rpr/parser/#{name}" Parser.const_get(:"#{name[0].upcase}#{name[1..-1]}") rescue LoadError raise UnknownParser, "#{name} is unknown parser. It supports #{self.parsers.join('|')}" end
formatters()
click to toggle source
# File lib/rpr.rb, line 49 def formatters Dir.glob(File.join(__dir__, 'rpr/formatter/*.rb')) .map { |fname| File.basename(fname, '.rb')} end
parse_args(args)
click to toggle source
@param [Array<String>] args
# File lib/rpr.rb, line 69 def parse_args(args) res = { formatter: :pp, version: false, parser: :rubocop, expression: nil, } opt = OptionParser.new opt.on('-f=FORMATTER', '--formatter=FORMATTER', self.formatters.join('|')){|v| res[:formatter] = v.to_sym} opt.on('-o=FILE', '--out=FILE'){|v| $stdout = File.new(v, 'w')} opt.on('-p=PARSER', '--parser=PARSER', self.parsers.join('|')){|v| res[:parser] = v.to_sym} opt.on('-e=CODE'){|v| res[:expression] = v} opt.on('-v', '--version'){|v| res[:version] = v} opt.parse!(args) res end
parsers()
click to toggle source
# File lib/rpr.rb, line 63 def parsers Dir.glob(File.join(__dir__, 'rpr/parser/*.rb')) .map { |fname| File.basename(fname, '.rb')} end
run(args)
click to toggle source
@param [Array<String>] args
# File lib/rpr.rb, line 14 def run(args) options = parse_args(args) if options[:version] require 'rpr/version' puts VERSION end parser = find_parser(options[:parser]) formatter = find_formatter(options[:formatter]) if options[:expression] res = parser.parse(options[:expression]) formatter.print(res) else args.each do |fname| code = File.read(fname) res = parser.parse(code) formatter.print(res) end end ensure $stdout.close unless $stdout.tty? end