class Gem::RequestSet::Lockfile - Documentation for Ruby 4.0
Description: class Gem::RequestSet::Lockfile: Parses a gem. deps.
Keywords: ruby,class,Gem::RequestSet::Lockfile

🔍

No recent searches

# class Gem::RequestSet::Lockfile

Parses a gem.deps.rb.lock file and constructs a LockSet containing the dependencies found inside. If the lock file is missing no LockSet is constructed.

### Attributes

platforms [R]

The platforms for this `Lockfile`

### Public Class Methods

build (request_set, gem_deps_file, dependencies = nil)
Source

    # File lib/rubygems/request_set/lockfile.rb, line 44
    def self.build(request_set, gem_deps_file, dependencies = nil)
      request_set.resolve
      dependencies ||= requests_to_deps request_set.sorted_requests
      new request_set, gem_deps_file, dependencies
    end

Creates a new `Lockfile` for the given `Gem::RequestSet` and `gem_deps_file` location.

new (request_set, gem_deps_file, dependencies)
Source

    # File lib/rubygems/request_set/lockfile.rb, line 74
    def initialize(request_set, gem_deps_file, dependencies)
      @set           = request_set
      @dependencies  = dependencies
      @gem_deps_file = File.expand_path(gem_deps_file)
      @gem_deps_dir  = File.dirname(@gem_deps_file)
      @platforms = []
    end

### Public Instance Methods

add_GIT (out, git_requests)
Source

    # File lib/rubygems/request_set/lockfile.rb, line 122
    def add_GIT(out, git_requests)
      return if git_requests.empty?

      by_repository_revision = git_requests.group_by do |request|
        source = request.spec.source
        [source.repository, source.rev_parse]
      end

      by_repository_revision.each do |(repository, revision), requests|
        out << "GIT"
        out << "  remote: #{repository}"
        out << "  revision: #{revision}"
        out << "  specs:"

        requests.sort_by(&:name).each do |request|
          out << "    #{request.name} (#{request.version})"

          dependencies = request.spec.dependencies.sort_by(&:name)
          dependencies.each do |dep|
            out << "      #{dep.name}#{dep.requirement.for_lockfile}"
          end
        end
        out << nil
      end
    end

spec_groups ()
Source

    # File lib/rubygems/request_set/lockfile.rb, line 192
    def spec_groups
      requests.group_by {|request| request.spec.class }
    end

to_s ()
Source

    # File lib/rubygems/request_set/lockfile.rb, line 199
    def to_s
      out = []

      groups = spec_groups

      add_PATH out, groups.delete(Gem::Resolver::VendorSpecification) { [] }

      add_GIT out, groups.delete(Gem::Resolver::GitSpecification) { [] }

      add_GEM out, groups

      add_PLATFORMS out

      add_DEPENDENCIES out

      out.join "\n"
    end

The contents of the lock file.

write ()
Source

    # File lib/rubygems/request_set/lockfile.rb, line 220
    def write
      content = to_s

      File.open "#{@gem_deps_file}.lock", "w" do |io|
        io.write content
      end
    end

Writes the lock file alongside the gem dependencies file

### Private Instance Methods

requests ()
Source

    # File lib/rubygems/request_set/lockfile.rb, line 230
    def requests
      @set.sorted_requests
    end