lib/synvert/cli.rb in synvert-0.5.3 vs lib/synvert/cli.rb in synvert-0.9.0

- old
+ new

@@ -22,18 +22,27 @@ # Run the CLI. # @param args [Array] arguments. # @return [Boolean] true if command runs successfully. def run(args) run_option_parser(args) - load_rewriters case @options[:command] - when 'list' then list_available_rewriters - when 'query' then query_available_rewriters - when 'show' then show_rewriter - when 'sync' then sync_snippets + when 'list' + load_rewriters + list_available_rewriters + when 'open' + open_rewriter + when 'query' + load_rewriters + query_available_rewriters + when 'show' + load_rewriters + show_rewriter + when 'sync' + sync_snippets else + load_rewriters @options[:snippet_names].each do |snippet_name| puts "===== #{snippet_name} started =====" group, name = snippet_name.split('/') rewriter = Core::Rewriter.call group, name rewriter.warnings.each do |warning| @@ -54,11 +63,11 @@ rescue Synvert::Core::RewriterNotFound => e puts e.message false end - private + private # Run OptionParser to parse arguments. def run_option_parser(args) optparse = OptionParser.new do |opts| opts.banner = "Usage: synvert [project_path]" @@ -66,10 +75,14 @@ @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 '-o', '--open SNIPPET_NAME', 'Open a snippet' do |snippet_name| + @options[:command] = 'open' + @options[:snippet_name] = snippet_name + end opts.on '-q', '--query QUERY', 'query specified snippets' do |query| @options[:command] = 'query' @options[:query] = query end opts.on '--skip FILE_PATTERNS', 'skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb' do |file_patterns| @@ -101,11 +114,10 @@ end end # Load all rewriters. def load_rewriters - default_snippets_path = Core::Configuration.instance.get :default_snippets_path Dir.glob(File.join(default_snippets_path, 'lib/**/*.rb')).each { |file| eval(File.read(file)) } @options[:custom_snippet_paths].each do |snippet_path| if snippet_path =~ /^http/ uri = URI.parse snippet_path @@ -132,10 +144,23 @@ end puts end end + # Open one rewriter. + def open_rewriter + editor = [ENV['SYNVERT_EDITOR'], ENV['EDITOR']].find { |e| !e.nil? && !e.empty? } + return puts "To open a synvert snippet, set $EDITOR or $SYNVERT_EDITOR" unless editor + + path = File.expand_path(File.join(default_snippets_path, "lib/#{@options[:snippet_name]}.rb")) + if File.exist? path + system editor, path + else + puts "Can't run #{editor} #{path}" + end + end + # Query and print available rewriters. def query_available_rewriters Core::Rewriter.availables.each do |group, rewriters| if group.include? @options[:query] puts group @@ -177,8 +202,12 @@ puts "synvert snippets are synced" core_version = Snippet.fetch_core_version if Gem::Version.new(core_version) > Gem::Version.new(Synvert::Core::VERSION) puts "synvert-core is updated, please install synvert-core #{core_version}" end + end + + def default_snippets_path + Core::Configuration.instance.get :default_snippets_path end end end