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