summaryrefslogtreecommitdiff
path: root/jni/ruby/lib/rubygems/source/lock.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/lib/rubygems/source/lock.rb')
-rw-r--r--jni/ruby/lib/rubygems/source/lock.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/jni/ruby/lib/rubygems/source/lock.rb b/jni/ruby/lib/rubygems/source/lock.rb
new file mode 100644
index 0000000..2ba7702
--- /dev/null
+++ b/jni/ruby/lib/rubygems/source/lock.rb
@@ -0,0 +1,48 @@
+##
+# A Lock source wraps an installed gem's source and sorts before other sources
+# during dependency resolution. This allows RubyGems to prefer gems from
+# dependency lock files.
+
+class Gem::Source::Lock < Gem::Source
+
+ ##
+ # The wrapped Gem::Source
+
+ attr_reader :wrapped
+
+ ##
+ # Creates a new Lock source that wraps +source+ and moves it earlier in the
+ # sort list.
+
+ def initialize source
+ @wrapped = source
+ end
+
+ def <=> other # :nodoc:
+ case other
+ when Gem::Source::Lock then
+ @wrapped <=> other.wrapped
+ when Gem::Source then
+ 1
+ else
+ nil
+ end
+ end
+
+ def == other # :nodoc:
+ 0 == (self <=> other)
+ end
+
+ ##
+ # Delegates to the wrapped source's fetch_spec method.
+
+ def fetch_spec name_tuple
+ @wrapped.fetch_spec name_tuple
+ end
+
+ def uri # :nodoc:
+ @wrapped.uri
+ end
+
+end
+