summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Irwin <conrad.irwin@gmail.com>2012-11-14 01:50:27 -0800
committerConrad Irwin <conrad.irwin@gmail.com>2012-11-14 01:50:27 -0800
commitb18a52f9a50957ba9ca792c0c11b89a406a4208f (patch)
tree3dd9f0cf330feb3f3988de0f1b07e23c3c200092
parent0968c5ddce08f57feb5e6459f9093613558d7869 (diff)
downloadpry-b18a52f9a50957ba9ca792c0c11b89a406a4208f.tar.gz
Add completion for gem-open and gem-cd
-rw-r--r--lib/pry/commands/gem_cd.rb4
-rw-r--r--lib/pry/commands/gem_list.rb6
-rw-r--r--lib/pry/commands/gem_open.rb4
-rw-r--r--lib/pry/helpers/command_helpers.rb22
4 files changed, 31 insertions, 5 deletions
diff --git a/lib/pry/commands/gem_cd.rb b/lib/pry/commands/gem_cd.rb
index a1aa1434..a51598b4 100644
--- a/lib/pry/commands/gem_cd.rb
+++ b/lib/pry/commands/gem_cd.rb
@@ -14,5 +14,9 @@ class Pry
Dir.chdir(gem_spec(gem).full_gem_path)
output.puts(Dir.pwd)
end
+
+ def complete(str)
+ gem_complete(str)
+ end
end
end
diff --git a/lib/pry/commands/gem_list.rb b/lib/pry/commands/gem_list.rb
index de010b0a..faa0aa99 100644
--- a/lib/pry/commands/gem_list.rb
+++ b/lib/pry/commands/gem_list.rb
@@ -12,11 +12,7 @@ class Pry
def process(pattern=nil)
pattern = Regexp.compile(pattern || '')
- gems = if Gem::Specification.respond_to?(:each)
- Gem::Specification.select{|spec| spec.name =~ pattern }.group_by(&:name)
- else
- Gem.source_index.gems.values.group_by(&:name).select { |gemname, specs| gemname =~ pattern }
- end
+ gems = gem_list(pattern).group_by(&:name)
gems.each do |gem, specs|
specs.sort! do |a,b|
diff --git a/lib/pry/commands/gem_open.rb b/lib/pry/commands/gem_open.rb
index 8f443ff0..a4e2f7aa 100644
--- a/lib/pry/commands/gem_open.rb
+++ b/lib/pry/commands/gem_open.rb
@@ -16,5 +16,9 @@ class Pry
invoke_editor(".", 0, false)
end
end
+
+ def complete(str)
+ gem_complete(str)
+ end
end
end
diff --git a/lib/pry/helpers/command_helpers.rb b/lib/pry/helpers/command_helpers.rb
index 2af4e10d..614afcd9 100644
--- a/lib/pry/helpers/command_helpers.rb
+++ b/lib/pry/helpers/command_helpers.rb
@@ -276,6 +276,28 @@ class Pry
spec or raise CommandError, "Gem `#{gem}` not found"
end
+
+ # List gems matching a pattern
+ # @param [Regexp] pattern
+ # @return [Array<Gem::Specification>]
+ def gem_list(pattern=/.*/)
+ if Gem::Specification.respond_to?(:each)
+ Gem::Specification.select{|spec| spec.name =~ pattern }
+ else
+ Gem.source_index.gems.values.select{|spec| spec.name =~ pattern }
+ end
+ end
+
+ # Completion function for gem-cd and gem-open
+ # @param [String] so_far what the user's typed so far
+ # @return [Array<String>] completions
+ def gem_complete(so_far)
+ if so_far =~ / ([^ ]*)\z/
+ gem_list(%r{\A#{$2}}).map(&:name)
+ else
+ gem_list.map(&:name)
+ end
+ end
end
end
end