rvm-completion 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -19,3 +19,4 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ tmp
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -1,18 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  rvm_scripts_path = ENV['rvm_scripts_path']
4
- completion_source = File.expand_path(File.join(File.dirname(__FILE__), '../lib/rvm-completion.rb'))
5
- completion_target = File.join(rvm_scripts_path, 'rvm-completion.rb')
6
4
 
7
5
  if rvm_scripts_path.nil? or not (File.exist?(rvm_scripts_path) and File.directory?(rvm_scripts_path))
8
6
  puts "Failed to find rvm scripts path - is rvm installed correctly?"
9
7
  exit 1
10
8
  end
11
9
 
10
+ completion_source = File.expand_path(File.join(File.dirname(__FILE__), '../lib/rvm-completion.rb'))
11
+ completion_target = File.join(rvm_scripts_path, 'rvm-completion.rb')
12
+
12
13
  if system "cp #{completion_source} #{completion_target}"
13
14
  puts "Success! rvm completion v#{File.read(File.expand_path(File.join(File.dirname(__FILE__), '../VERSION'))).chomp} installed to #{completion_target}", ""
14
15
 
15
- puts "If you didn't do so before, please add the following line at the end of your ~/.profile or ~/.bashrc"
16
+ puts "If you didn't do so before, please add the following line at the end of your"
17
+ puts "~/.profile or ~/.bashrc and reload your terminal session"
16
18
  puts " complete -C $rvm_scripts_path/#{File.basename(completion_target)} -o default rvm"
17
19
  else
18
20
  puts "Failed to copy the completion script to #{rvm_scripts_path}!"
@@ -3,6 +3,9 @@
3
3
  #
4
4
  # Bash completion for Ruby Version Manager commands, Rubies and gemsets
5
5
  #
6
+ # See http://github.com/colszowka/rvm-completion#readme
7
+ #
8
+ # For manual setup:
6
9
  # Add the following line to your ~/.profile or ~/.bashrc:
7
10
  # complete -C PATH/TO/rvm_completion.rb -o default rvm
8
11
  # Don't forget to make the completion script executable with chmod +x!
@@ -11,6 +14,7 @@
11
14
  # (see http://github.com/ryanb/dotfiles/blob/master/bash/completion_scripts/project_completion)
12
15
  #
13
16
  class RVMCompletion
17
+
14
18
  def initialize(comp_line)
15
19
  @comp_line = comp_line
16
20
  end
@@ -25,14 +29,14 @@ class RVMCompletion
25
29
  case shell_argument
26
30
  when /^use|uninstall|remove/
27
31
  return [] if shell_argument(3).length > 0
28
- select(rubies, shell_argument(2))
32
+ select(rubies, shell_argument(2), :regexp => true)
29
33
  when /^install/
30
34
  select(rvm_ruby_aliases, shell_argument(2))
31
35
 
32
36
  when /^gemset/
33
37
  case shell_argument(2)
34
38
  when /use|copy|clear|delete|export/
35
- select(gemsets, shell_argument(3))
39
+ select(gemsets, shell_argument(3), :regexp => true)
36
40
  else
37
41
  select(gemset_commands, shell_argument(2))
38
42
  end
@@ -53,15 +57,22 @@ class RVMCompletion
53
57
  end
54
58
 
55
59
  # Matches the given (partial?) command against the given collection
56
- def select(collection, command)
60
+ def select(collection, command, options={})
61
+ options = {:regexp => false}.merge(options)
62
+ return [] if collection.any? {|i| i.strip == command.strip}
57
63
  collection.select do |item|
58
- item[0, command.length] == command or item =~ /#{command}/
64
+ item[0, command.length] == command or (options[:regexp] and item =~ /#{command}/)
59
65
  end.sort
60
66
  end
61
67
 
68
+ # Retrieves the current ruby binary path
69
+ def current_ruby_path
70
+ @current_ruby_path ||= `which ruby`
71
+ end
72
+
62
73
  # Retrieves the current rvm ruby
63
74
  def current_ruby
64
- @current_ruby ||= `which ruby`.strip.chomp.gsub(ENV['rvm_rubies_path']+'/', '').split('/').first
75
+ @current_ruby ||= current_ruby_path.strip.chomp.gsub(File.join(ENV['rvm_rubies_path'], '/'), '').split('/').first
65
76
  end
66
77
 
67
78
  # Retrieves all available rubies
@@ -104,6 +115,7 @@ end
104
115
  # f.puts RVMCompletion.new(ENV["COMP_LINE"]).shell_argument(2).inspect
105
116
  # f.puts RVMCompletion.new(ENV["COMP_LINE"]).matches.inspect
106
117
  # end
107
-
108
- puts RVMCompletion.new(ENV["COMP_LINE"]).matches
109
- exit 0
118
+ unless ENV['COMP_LINE'].nil?
119
+ puts RVMCompletion.new(ENV["COMP_LINE"]).matches
120
+ exit 0
121
+ end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rvm-completion}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christoph Olszowka"]
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
33
33
  ]
34
34
  s.homepage = %q{http://github.com/colszowka/rvm-completion}
35
35
  s.post_install_message = %q{
36
- To install rvm completion v0.1.0, please run 'install-rvm-completion' in your terminal now!
36
+ To install rvm completion v0.2.0, please run 'install-rvm-completion' in your terminal now!
37
37
 
38
38
  }
39
39
  s.rdoc_options = ["--charset=UTF-8"]
data/test/helper.rb CHANGED
@@ -1,10 +1,97 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
+ require 'fileutils'
4
5
 
5
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
7
  $LOAD_PATH.unshift(File.dirname(__FILE__))
7
8
  require 'rvm-completion'
8
9
 
10
+ # Define path to tmp directory
11
+ tmp_root = File.expand_path(File.join(File.dirname(__FILE__), '../tmp'))
12
+
13
+ # Set environment vars used in completion to test-specific ones
14
+ ENV['rvm_rubies_path'] = File.join(tmp_root, 'rubies')
15
+ ENV['rvm_gems_path'] = File.join(tmp_root, 'gems')
16
+ ENV['rvm_gemset_separator'] = '@'
17
+
18
+ # Clean up and prepare test folders
19
+ FileUtils.rm_rf(tmp_root) if File.exist?(tmp_root)
20
+
21
+ def mock_gemset(ruby_name, gemset_name=nil)
22
+ if gemset_name.nil?
23
+ FileUtils.mkdir_p(File.join(ENV['rvm_gems_path'], "#{ruby_name}"))
24
+ else
25
+ FileUtils.mkdir_p(File.join(ENV['rvm_gems_path'], "#{ruby_name}#{ENV['rvm_gemset_separator']}#{gemset_name}"))
26
+ end
27
+ end
28
+
29
+ FileUtils.mkdir_p(File.join(ENV['rvm_rubies_path'], 'default'))
30
+
31
+ ["macruby-0.6", "rbx-1.0.1-20100603", "ree-1.8.7-2010.02", "ruby-1.8.7-p174",
32
+ "ruby-1.8.7-p299", "ruby-1.9.1-p378", "ruby-1.9.2-rc2"].each do |ruby_name|
33
+ FileUtils.mkdir_p(File.join(ENV['rvm_rubies_path'], ruby_name))
34
+ mock_gemset(ruby_name)
35
+ mock_gemset(ruby_name, 'global')
36
+ end
37
+
38
+ class RVMCompletion
39
+ # Required for mocking gemsets based upon selected ruby
40
+ attr_writer :current_ruby_path
41
+ end
42
+
9
43
  class Test::Unit::TestCase
44
+ def self.using_ruby(ruby_name, options={})
45
+ options = {:gemsets => []}.merge(options)
46
+ options[:gemsets].each do |gemset|
47
+ mock_gemset ruby_name, gemset
48
+ end
49
+ context "using ruby #{ruby_name}" do
50
+ setup do
51
+ @current_ruby_path = File.join(File.join(ENV['rvm_rubies_path'], ruby_name, 'bin/ruby'))
52
+ end
53
+ yield
54
+ end
55
+ end
56
+
57
+ def self.completion_for(*comp_lines)
58
+ comp_lines.each do |comp_line|
59
+ context "Completion for '#{comp_line}'" do
60
+ setup do
61
+ # Fake the use of a specific ruby by manipulating rvm bin path
62
+ if @current_ruby_path
63
+ instance = RVMCompletion.new(comp_line)
64
+ instance.current_ruby_path = @current_ruby_path
65
+ @completion = instance.matches
66
+ else
67
+ @completion = RVMCompletion.new(comp_line).matches
68
+ end
69
+ # puts "DEBUG: Complete '#{comp_line}' => #{@completion.inspect}"
70
+ end
71
+ subject { @completion }
72
+ should "return an Array" do
73
+ assert subject.instance_of?(Array)
74
+ end
75
+ yield
76
+ end
77
+ end
78
+ end
79
+
80
+ def self.should_include(*values)
81
+ should "return #{values.length} completions" do
82
+ assert_equal values.length, subject.length
83
+ end
84
+
85
+ values.each do |value|
86
+ should "include '#{value}' in completion" do
87
+ assert subject.include?(value.to_s), "'#{value}' is not included in #{subject.inspect}!"
88
+ end
89
+ end
90
+ end
91
+
92
+ def self.should_include_nothing
93
+ should "include nothing in completion" do
94
+ assert_equal 0, subject.length
95
+ end
96
+ end
10
97
  end
@@ -1,7 +1,106 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestRvmCompletion < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
4
+ completion_for 'rvm' do
5
+ should_include "debug", "fetch", "gem", "gemdir", "gemset", "implode", "info", "install", "list",
6
+ "monitor", "notes", "package", "rake", "reload", "remove", "reset", "ruby", "specs",
7
+ "srcdir", "tests", "uninstall", "update", "usage", "use", "version", "wrapper"
8
+ end
9
+
10
+ completion_for 'rvm insta' do
11
+ should_include 'install'
12
+ end
13
+
14
+ completion_for 'rvm install' do
15
+ should_include "ironruby", "jruby", "macruby", "maglev", "mput", "rbx", "ree", "ruby"
16
+ end
17
+
18
+ completion_for 'rvm install rub' do
19
+ should_include "ruby"
20
+ end
21
+
22
+ completion_for 'rvm install ruby' do
23
+ should_include_nothing
24
+ end
25
+
26
+ completion_for 'rvm us' do
27
+ should_include 'use', 'usage'
28
+ end
29
+
30
+ completion_for 'rvm use', 'rvm uninstall', 'rvm remove' do
31
+ should_include "system", "default", "macruby-0.6", "rbx-1.0.1-20100603", "ree-1.8.7-2010.02",
32
+ "ruby-1.8.7-p174", "ruby-1.8.7-p299", "ruby-1.9.1-p378", "ruby-1.9.2-rc2"
33
+ end
34
+
35
+ completion_for 'rvm use ruby', 'rvm uninstall ruby', 'rvm remove ruby' do
36
+ should_include "macruby-0.6", "ruby-1.8.7-p174", "ruby-1.8.7-p299", "ruby-1.9.1-p378", "ruby-1.9.2-rc2"
37
+ end
38
+
39
+ completion_for 'rvm use ruby-1.8', 'rvm uninstall ruby-1.8', 'rvm remove ruby-1.8' do
40
+ should_include "ruby-1.8.7-p174", "ruby-1.8.7-p299"
41
+ end
42
+
43
+ completion_for 'rvm use ruby-1.8.7-p1', 'rvm uninstall ruby-1.8.7-p1', 'rvm remove ruby-1.8.7-p1' do
44
+ should_include "ruby-1.8.7-p174"
45
+ end
46
+
47
+ completion_for 'rvm use ruby-1.8.7-p174', 'rvm uninstall ruby-1.8.7-p174', 'rvm remove ruby-1.8.7-p174' do
48
+ should_include_nothing
49
+ end
50
+
51
+ completion_for 'rvm use 174', 'rvm uninstall 174', 'rvm remove 174' do
52
+ should_include "ruby-1.8.7-p174"
53
+ end
54
+
55
+ completion_for 'rvm use 1.9.1' do
56
+ should_include "ruby-1.9.1-p378"
57
+ end
58
+
59
+ completion_for 'rvm use 1.9', 'rvm uninstall 1.9', 'rvm remove 1.9' do
60
+ should_include "ruby-1.9.1-p378", "ruby-1.9.2-rc2"
61
+ end
62
+
63
+ completion_for 'rvm usa' do
64
+ should_include 'usage'
65
+ end
66
+
67
+ completion_for 'rvm usage' do
68
+ should_include_nothing
69
+ end
70
+
71
+ completion_for 'rvm gems' do
72
+ should_include 'gemset'
73
+ end
74
+
75
+ completion_for 'rvm gemset' do
76
+ should_include "clear", "copy", "create", "delete", "dir", "empty", "export", "gemdir", "import", "install", "list", "name", "pristine", "use"
77
+ end
78
+
79
+ using_ruby 'ruby-1.8.7-p174', :gemsets => ['foo', 'bar'] do
80
+ completion_for 'rvm gemset use', 'rvm gemset copy', 'rvm gemset clear', 'rvm gemset delete', 'rvm gemset export' do
81
+ should_include 'global', 'foo', 'bar'
82
+ end
83
+
84
+ completion_for 'rvm gemset use o', 'rvm gemset copy o', 'rvm gemset clear o', 'rvm gemset delete o', 'rvm gemset export o' do
85
+ should_include 'global', 'foo'
86
+ end
87
+
88
+ completion_for 'rvm gemset use fo', 'rvm gemset copy fo', 'rvm gemset clear fo', 'rvm gemset delete fo', 'rvm gemset export fo' do
89
+ should_include 'foo'
90
+ end
91
+
92
+ completion_for 'rvm gemset use foo', 'rvm gemset copy foo', 'rvm gemset clear foo', 'rvm gemset delete foo', 'rvm gemset export foo' do
93
+ should_include_nothing
94
+ end
95
+ end
96
+
97
+ using_ruby 'ruby-1.8.7-p299' do
98
+ completion_for 'rvm gemset use', 'rvm gemset copy', 'rvm gemset clear', 'rvm gemset delete', 'rvm gemset export' do
99
+ should_include 'global'
100
+ end
101
+
102
+ completion_for 'rvm gemset use global', 'rvm gemset copy global', 'rvm gemset clear global', 'rvm gemset delete global', 'rvm gemset export global' do
103
+ should_include_nothing
104
+ end
6
105
  end
7
106
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rvm-completion
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christoph Olszowka
@@ -59,7 +59,7 @@ licenses: []
59
59
 
60
60
  post_install_message: |+
61
61
 
62
- To install rvm completion v0.1.0, please run 'install-rvm-completion' in your terminal now!
62
+ To install rvm completion v0.2.0, please run 'install-rvm-completion' in your terminal now!
63
63
 
64
64
  rdoc_options:
65
65
  - --charset=UTF-8