<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -32,6 +32,6 @@ Feature: Discover completions config script in installed RubyGems
   Scenario: Activate many auto-completions for gem-based app within tabtab_definitions folder
     Given a user's RubyGems gem cache
     And a RubyGem 'multi_app' with autocompletions
-    When run local executable 'tabtab' with arguments '--gem multi_app/lib/tabtab_definitions/test_app.rb test_app &quot;&quot; test_app'
+    When run local executable 'tabtab' with arguments '--gem multi_app/lib/tabtab_definitions/some_app.rb test_app &quot;&quot; test_app'
     Then I should see a full list of options for 'test_app'
 </diff>
      <filename>features/discovered_gem_app_completions.feature</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,8 @@
 class TabTab::Completions::Gem
-  attr_reader :gem_name, :app_name, :current_token, :previous_token, :global_config
+  attr_reader :gem_name, :app_name, :current_token, :previous_token, :global_config, :definitions_file
   
   def initialize(gem_name, app_name, current_token, previous_token, global_config = {})
-    @gem_name       = gem_name
+    parse_gem_name_and_optional_explicit_file(gem_name)
     @app_name       = app_name
     @current_token  = current_token
     @previous_token = previous_token
@@ -13,11 +13,9 @@ class TabTab::Completions::Gem
   # e.g. if current +extract+ list is +['--help', '--extra', '-h', '-x']+
   # then +starts_with('--')+ returns +['--help', '--extra']+
   def extract
-    require &quot;rubygems&quot;
     require &quot;tabtab/definitions&quot;
-    if definitions_file = load_gem_and_return_definitions_file
-      load definitions_file
-      # eval File.read(definitions_file), binding, __FILE__, __LINE__
+    load definitions_file
+    if TabTab::Definition[app_name]
       TabTab::Definition[app_name].extract_completions(previous_token, current_token, global_config)
     else
       []
@@ -25,8 +23,22 @@ class TabTab::Completions::Gem
   end
   
   def load_gem_and_return_definitions_file
+    Dir[File.join(gem_root_path, '**', &quot;tabtab_definitions.rb&quot;)].first
+  end
+  
+  def parse_gem_name_and_optional_explicit_file(gem_name)
+    if gem_name =~ %r{^([\w\-_]*)/(.*)}
+      @gem_name, file_path = $1, $2
+      @definitions_file = File.join(gem_root_path, file_path)
+    else
+      @gem_name = gem_name
+      @definitions_file = load_gem_and_return_definitions_file
+    end
+  end
+
+  def gem_root_path
+    require &quot;rubygems&quot;
     gem gem_name
-    gem_lib_path = $LOAD_PATH.grep(/#{gem_name}.*\/lib$/).first.gsub(/\/lib$/, '')
-    Dir[File.join(gem_lib_path, '**', &quot;tabtab_definitions.rb&quot;)].first
+    $LOAD_PATH.grep(/#{gem_name}.*\/lib$/).first.gsub(/\/lib$/, '')
   end
 end</diff>
      <filename>lib/tabtab/completions/gems.rb</filename>
    </modified>
    <modified>
      <diff>@@ -88,7 +88,8 @@ end
 describe TabTab::CLI, &quot;--gem GEM_NAME/PATH loads from a PATH within a gem to find definition&quot; do
   before(:each) do
     @cli = TabTab::CLI.new
-    TabTab::Completions::Gem.any_instance.expects(:load_gem_and_return_definitions_file).returns('/path/to/my_gem-1.0.0/lib/tabtab_definitions/definition.rb')
+    TabTab::Completions::Gem.any_instance.expects(:load_gem_and_return_definitions_file).never
+    TabTab::Completions::Gem.any_instance.expects(:gem_root_path).returns('/path/to/my_gem-1.0.0')
     TabTab::Completions::Gem.any_instance.expects(:load).with('/path/to/my_gem-1.0.0/lib/tabtab_definitions/definition.rb').returns(true)
     @cli.expects(:config).returns({}).at_least(1)
     TabTab::Definition.register('test_app') do |c|</diff>
      <filename>spec/tabtab_cli_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6758681dcf797b007c14fd51af44f688b45a8317</id>
    </parent>
  </parents>
  <author>
    <name>Dr Nic Williams</name>
    <email>drnicwilliams@gmail.com</email>
  </author>
  <url>http://github.com/drnic/tabtab/commit/afd17b65be2baefd79272c7f96a9fcb303cc79c8</url>
  <id>afd17b65be2baefd79272c7f96a9fcb303cc79c8</id>
  <committed-date>2008-11-22T07:03:59-08:00</committed-date>
  <authored-date>2008-11-22T07:03:59-08:00</authored-date>
  <message>tabtab can find a definition within a gem in a specific file</message>
  <tree>b8121e6cd167612a3b4537567f3fa9e45b26387a</tree>
  <committer>
    <name>Dr Nic Williams</name>
    <email>drnicwilliams@gmail.com</email>
  </committer>
</commit>
