heidistein / rpms / ruby

Forked from rpms/ruby 5 years ago
Clone
e11dee8
From e088c6824209d98eccb0f1e6c7e21f26b4a1178d Mon Sep 17 00:00:00 2001
e11dee8
From: Eric Hodel <drbrain@segment7.net>
e11dee8
Date: Mon, 6 Jan 2014 14:20:18 -0800
e11dee8
Subject: [PATCH] Add BasicSpecification#source_paths
e11dee8
e11dee8
This allows documentation and analysis tools to retrieve paths of source
e11dee8
files in gems.  This is needed as the introduction of shared gem
e11dee8
directories means the extension source directory is no longer included
e11dee8
in require_paths (which was meant for $LOAD_PATH, not source code).
e11dee8
---
e11dee8
 lib/rubygems/basic_specification.rb     | 18 ++++++++++++++++++
e11dee8
 test/rubygems/test_gem_specification.rb | 16 ++++++++++++++++
e11dee8
 2 files changed, 34 insertions(+)
e11dee8
e11dee8
diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb
e11dee8
index a52377f..470a6eb 100644
e11dee8
--- a/lib/rubygems/basic_specification.rb
e11dee8
+++ b/lib/rubygems/basic_specification.rb
e11dee8
@@ -207,6 +207,24 @@ def require_paths
e11dee8
   end
e11dee8
 
e11dee8
   ##
e11dee8
+  # Returns the paths to the source files for use with analysis and
e11dee8
+  # documentation tools.  These paths are relative to full_gem_path.
e11dee8
+
e11dee8
+  def source_paths
e11dee8
+    paths = raw_require_paths.dup
e11dee8
+
e11dee8
+    if @extensions then
e11dee8
+      ext_dirs = @extensions.map do |extension|
e11dee8
+        extension.split(File::SEPARATOR, 2).first
e11dee8
+      end.uniq
e11dee8
+
e11dee8
+      paths.concat ext_dirs
e11dee8
+    end
e11dee8
+
e11dee8
+    paths.uniq
e11dee8
+  end
e11dee8
+
e11dee8
+  ##
e11dee8
   # Return a Gem::Specification from this gem
e11dee8
 
e11dee8
   def to_spec
e11dee8
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
e11dee8
index 46db0c4..b72a5d1 100644
e11dee8
--- a/test/rubygems/test_gem_specification.rb
e11dee8
+++ b/test/rubygems/test_gem_specification.rb
e11dee8
@@ -1809,6 +1809,22 @@ def test_source
e11dee8
     assert_kind_of Gem::Source::Installed, @a1.source
e11dee8
   end
e11dee8
 
e11dee8
+  def test_source_paths
e11dee8
+    ext_spec
e11dee8
+
e11dee8
+    @ext.require_paths = %w[lib ext foo]
e11dee8
+    @ext.extensions << 'bar/baz'
e11dee8
+
e11dee8
+    expected = %w[
e11dee8
+      lib
e11dee8
+      ext
e11dee8
+      foo
e11dee8
+      bar
e11dee8
+    ]
e11dee8
+
e11dee8
+    assert_equal expected, @ext.source_paths
e11dee8
+  end
e11dee8
+
e11dee8
   def test_full_require_paths
e11dee8
     ext_spec
e11dee8
 
e11dee8
-- 
e11dee8
1.8.5.1
e11dee8