lib/synvert/cli.rb in synvert-0.19.3 vs lib/synvert/cli.rb in synvert-0.20.0

- old
+ new

@@ -1,9 +1,11 @@ # frozen_string_literal: true require 'optparse' require 'json' +require 'uri' +require 'open-uri' module Synvert # Synvert command line interface. class CLI # Initialize the cli and run. @@ -14,40 +16,50 @@ new.run(args) end # Initialize a CLI. def initialize - @options = { command: 'run', custom_snippet_paths: [], format: 'plain' } + @options = { command: 'run', format: 'plain' } end # Run the CLI. # @param args [Array] arguments. # @return [Boolean] true if command runs successfully. def run(args) run_option_parser(args) case @options[:command] when 'list' - load_rewriters + read_rewriters list_available_rewriters when 'open' open_rewriter when 'query' - load_rewriters + read_rewriters query_available_rewriters when 'show' show_rewriter when 'sync' sync_snippets when 'generate' generate_snippet when 'execute' execute_snippet else - # run - load_rewriters - run_snippet + if /^http/.match?(@options[:snippet_name]) + uri = URI.parse(@options[:snippet_name]) + eval(uri.open.read) + snippet_name = get_last_snippet_name + run_snippet(snippet_name) + elsif File.exists?(@options[:snippet_name]) + require(@options[:snippet_name]) + snippet_name = get_last_snippet_name + run_snippet(snippet_name) + else + read_rewriters + run_snippet(@options[:snippet_name]) + end end true rescue SystemExit true rescue Parser::SyntaxError => e @@ -65,15 +77,10 @@ # Run OptionParser to parse arguments. def run_option_parser(args) optparse = OptionParser.new do |opts| opts.banner = 'Usage: synvert-ruby [project_path]' - opts.on '-d', - '--load SNIPPET_PATHS', - 'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths| - @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip) - end opts.on '-l', '--list', 'list all available snippets' do @options[:command] = 'list' end opts.on '-q', '--query QUERY', 'query specified snippets' do |query| @options[:command] = 'query' @@ -97,11 +104,11 @@ @options[:command] = 'sync' end opts.on '--execute', 'execute snippet' do @options[:command] = 'execute' end - opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax' do |snippet_name| + opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax, or remote url, or local file path' do |snippet_name| @options[:snippet_name] = snippet_name end opts.on '--show-run-process', 'show processing files when running a snippet' do Core::Configuration.show_run_process = true end @@ -127,25 +134,13 @@ end.flatten Core::Configuration.skip_files = skip_files end end - # Load all rewriters. - def load_rewriters + # read all rewriters. + def read_rewriters Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file } - - @options[:custom_snippet_paths].each do |snippet_path| - if /^http/.match?(snippet_path) - uri = URI.parse snippet_path - eval(uri.read) - else - require snippet_path - end - end - rescue StandardError - FileUtils.rm_rf default_snippets_home - retry end # List and print all available rewriters. def list_available_rewriters if Core::Rewriter.availables.empty? @@ -232,12 +227,11 @@ system('gem install synvert-core') end end # run snippets - def run_snippet - snippet_name = @options[:snippet_name] + def run_snippet(snippet_name) if plain_output? puts "===== #{snippet_name} started =====" group, name = snippet_name.split('/') rewriter = Core::Rewriter.call group, name rewriter.warnings.each do |warning| @@ -335,8 +329,15 @@ @options[:format] == 'plain' end def json_output? @options[:format] == 'json' + end + + # get the last registered snippet name + def get_last_snippet_name + group = Rewriter.availables.keys.last + name = Rewriter.availables[group].keys.last + return [group, name].join("/") end end end