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