PHP 8.2.31
Preview: stub_specification.rb Size: 4.48 KB
/proc/thread-self/root/opt/alt/ruby31/share/rubygems/rubygems/stub_specification.rb

# frozen_string_literal: true
##
# Gem::StubSpecification reads the stub: line from the gemspec.  This prevents
# us having to eval the entire gemspec in order to find out certain
# information.

class Gem::StubSpecification < Gem::BasicSpecification
  # :nodoc:
  PREFIX = "# stub: ".freeze

  # :nodoc:
  OPEN_MODE = "r:UTF-8:-".freeze

  class StubLine # :nodoc: all
    attr_reader :name, :version, :platform, :require_paths, :extensions,
                :full_name

    NO_EXTENSIONS = [].freeze

    # These are common require paths.
    REQUIRE_PATHS = { # :nodoc:
      "lib"  => "lib".freeze,
      "test" => "test".freeze,
      "ext"  => "ext".freeze,
    }.freeze

    # These are common require path lists.  This hash is used to optimize
    # and consolidate require_path objects.  Most specs just specify "lib"
    # in their require paths, so lets take advantage of that by pre-allocating
    # a require path list for that case.
    REQUIRE_PATH_LIST = { # :nodoc:
      "lib" => ["lib"].freeze,
    }.freeze

    def initialize(data, extensions)
      parts          = data[PREFIX.length..-1].split(" ".freeze, 4)
      @name          = parts[0].freeze
      @version       = if Gem::Version.correct?(parts[1])
        Gem::Version.new(parts[1])
      else
        Gem::Version.new(0)
      end

      @platform      = Gem::Platform.new parts[2]
      @extensions    = extensions
      @full_name     = if platform == Gem::Platform::RUBY
        "#{name}-#{version}"
      else
        "#{name}-#{version}-#{platform}"
      end

      path_list = parts.last
      @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! do |x|
        REQUIRE_PATHS[x] || x
      end
    end
  end

  def self.default_gemspec_stub(filename, base_dir, gems_dir)
    new filename, base_dir, gems_dir, true
  end

  def self.gemspec_stub(filename, base_dir, gems_dir)
    new filename, base_dir, gems_dir, false
  end

  attr_reader :base_dir, :gems_dir

  def initialize(filename, base_dir, gems_dir, default_gem)
    super()
    filename.tap(&Gem::UNTAINT)

    self.loaded_from = filename
    @data            = nil
    @name            = nil
    @spec            = nil
    @base_dir        = base_dir
    @gems_dir        = gems_dir
    @default_gem     = default_gem
  end

  ##
  # True when this gem has been activated

  def activated?
    @activated ||=
    begin
      loaded = Gem.loaded_specs[name]
      loaded && loaded.version == version
    end
  end

  def default_gem?
    @default_gem
  end

  def build_extensions # :nodoc:
    return if default_gem?
    return if extensions.empty?

    to_spec.build_extensions
  end

  ##
  # If the gemspec contains a stubline, returns a StubLine instance. Otherwise
  # returns the full Gem::Specification.

  def data
    unless @data
      begin
        saved_lineno = $.

        Gem.open_file loaded_from, OPEN_MODE do |file|
          begin
            file.readline # discard encoding line
            stubline = file.readline.chomp
            if stubline.start_with?(PREFIX)
              extensions = if /\A#{PREFIX}/ =~ file.readline.chomp
                $'.split "\0"
              else
                StubLine::NO_EXTENSIONS
              end

              @data = StubLine.new stubline, extensions
            end
          rescue EOFError
          end
        end
      ensure
        $. = saved_lineno
      end
    end

    @data ||= to_spec
  end

  private :data

  def raw_require_paths # :nodoc:
    data.require_paths
  end

  def missing_extensions?
    return false if default_gem?
    return false if extensions.empty?
    return false if File.exist? gem_build_complete_path

    to_spec.missing_extensions?
  end

  ##
  # Name of the gem

  def name
    data.name
  end

  ##
  # Platform of the gem

  def platform
    data.platform
  end

  ##
  # Extensions for this gem

  def extensions
    data.extensions
  end

  ##
  # Version of the gem

  def version
    data.version
  end

  def full_name
    data.full_name
  end

  ##
  # The full Gem::Specification for this gem, loaded from evalling its gemspec

  def to_spec
    @spec ||= if @data
      loaded = Gem.loaded_specs[name]
      loaded if loaded && loaded.version == version
    end

    @spec ||= Gem::Specification.load(loaded_from)
  end

  ##
  # Is this StubSpecification valid? i.e. have we found a stub line, OR does
  # the filename contain a valid gemspec?

  def valid?
    data
  end

  ##
  # Is there a stub line present for this StubSpecification?

  def stubbed?
    data.is_a? StubLine
  end
end

Directory Contents

Dirs: 14 × Files: 62

Name Size Perms Modified Actions
commands DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
core_ext DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
defaults DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
ext DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
optparse DIR
- drwxr-xr-x 2025-04-28 17:36:04
Edit Download
package DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
request DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
resolver DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
security DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
source DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
ssl_certs DIR
- drwxr-xr-x 2025-04-28 17:36:04
Edit Download
tsort DIR
- drwxr-xr-x 2025-04-28 17:36:04
Edit Download
util DIR
- drwxr-xr-x 2025-05-13 07:36:00
Edit Download
3.01 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
7.65 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.98 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
15.82 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
5.24 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.00 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
13.23 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
6.58 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
8.59 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
10.22 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
5.54 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
4.87 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
3.13 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
4.52 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
7.13 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
497 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
8.88 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.79 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
10.89 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
26.76 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
773 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
348 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
322 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
6.35 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
3.56 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.38 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
2.39 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
125 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
72 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
17.72 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
3.79 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.78 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
7.61 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
794 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
8.50 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
231 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
9.20 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
8.60 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
11.30 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
6.91 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
9.64 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
5.91 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.51 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
22.39 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.06 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
5.58 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
2.41 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
70.80 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
12.87 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
6.36 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
4.48 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
1.98 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
66 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
10.20 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
411 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
2.33 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
781 B lrw-r--r-- 2025-04-28 17:36:10
Edit Download
13.01 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
2.50 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
3.65 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
12.57 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download
2.21 KB lrw-r--r-- 2025-04-28 17:36:10
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).