diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/rubygems/commands/open_command.rb |
Fresh start
Diffstat (limited to 'jni/ruby/lib/rubygems/commands/open_command.rb')
-rw-r--r-- | jni/ruby/lib/rubygems/commands/open_command.rb | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/jni/ruby/lib/rubygems/commands/open_command.rb b/jni/ruby/lib/rubygems/commands/open_command.rb new file mode 100644 index 0000000..91963bb --- /dev/null +++ b/jni/ruby/lib/rubygems/commands/open_command.rb @@ -0,0 +1,74 @@ +require 'English' +require 'rubygems/command' +require 'rubygems/version_option' +require 'rubygems/util' + +class Gem::Commands::OpenCommand < Gem::Command + + include Gem::VersionOption + + def initialize + super 'open', 'Open gem sources in editor' + + add_option('-e', '--editor EDITOR', String, + "Opens gem sources in EDITOR") do |editor, options| + options[:editor] = editor || get_env_editor + end + end + + def arguments # :nodoc: + "GEMNAME name of gem to open in editor" + end + + def defaults_str # :nodoc: + "-e #{get_env_editor}" + end + + def description # :nodoc: + <<-EOF + The open command opens gem in editor and changes current path + to gem's source directory. Editor can be specified with -e option, + otherwise rubygems will look for editor in $EDITOR, $VISUAL and + $GEM_EDITOR variables. + EOF + end + + def usage # :nodoc: + "#{program_name} GEMNAME [-e EDITOR]" + end + + def get_env_editor + ENV['GEM_EDITOR'] || + ENV['VISUAL'] || + ENV['EDITOR'] || + 'vi' + end + + def execute + @version = options[:version] || Gem::Requirement.default + @editor = options[:editor] || get_env_editor + + found = open_gem(get_one_gem_name) + + terminate_interaction 1 unless found + end + + def open_gem name + spec = spec_for name + return false unless spec + + open_editor(spec.full_gem_path) + end + + def open_editor path + system(*@editor.split(/\s+/) + [path]) + end + + def spec_for name + spec = Gem::Specification.find_all_by_name(name, @version).last + + return spec if spec + + say "Unable to find gem '#{name}'" + end +end |