summaryrefslogtreecommitdiff
path: root/lib/bundler/source/metadata.rb
blob: 4d27761365385ebaffb56b70fb1f892a8b835e28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# frozen_string_literal: true

module Bundler
  class Source
    class Metadata < Source
      def specs
        @specs ||= Index.build do |idx|
          idx << Gem::Specification.new("Ruby\0", Bundler::RubyVersion.system.gem_version)
          idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
            s.required_rubygems_version = Gem::Requirement.default
          end

          if local_spec = Gem.loaded_specs["bundler"]
            idx << local_spec
          else
            idx << Gem::Specification.new do |s|
              s.name     = "bundler"
              s.version  = VERSION
              s.license  = "MIT"
              s.platform = Gem::Platform::RUBY
              s.authors  = ["bundler team"]
              s.bindir   = "exe"
              s.homepage = "https://bundler.io"
              s.summary  = "The best way to manage your application's dependencies"
              s.executables = %w[bundle]
              # can't point to the actual gemspec or else the require paths will be wrong
              s.loaded_from = __dir__
            end
          end

          idx.each {|s| s.source = self }
        end
      end

      def options
        {}
      end

      def install(spec, _opts = {})
        print_using_message "Using #{version_message(spec)}"
        nil
      end

      def to_s
        "the local ruby installation"
      end

      def ==(other)
        self.class == other.class
      end
      alias_method :eql?, :==

      def hash
        self.class.hash
      end

      def version_message(spec)
        "#{spec.name} #{spec.version}"
      end
    end
  end
end