class Bundler::Checksum - bundler: Ruby Standard Library Documentation

# class Bundler::Checksum

### Constants

ALGO_SEPARATOR
DEFAULT_ALGORITHM
DEFAULT_BLOCK_SIZE

### Attributes

algo[R]
digest[R]
sources[R]

### Public Class Methods

from_api(digest, source_uri, algo = DEFAULT_ALGORITHM) click to toggle source

    # File bundler/checksum.rb, line 31
    def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
      return if Bundler.settings[:disable_checksum_validation]

      Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
    end

from_gem(io, pathname, algo = DEFAULT_ALGORITHM) click to toggle source

    # File bundler/checksum.rb, line 24
    def from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
      digest = Bundler::SharedHelpers.digest(algo.upcase).new
      buf = String.new(capacity: DEFAULT_BLOCK_SIZE)
      digest << io.readpartial(DEFAULT_BLOCK_SIZE, buf) until io.eof?
      Checksum.new(algo, digest.hexdigest!, Source.new(:gem, pathname))
    end

from_gem_package(gem_package, algo = DEFAULT_ALGORITHM) click to toggle source

    # File bundler/checksum.rb, line 12
    def from_gem_package(gem_package, algo = DEFAULT_ALGORITHM)
      return if Bundler.settings[:disable_checksum_validation]
      return unless source = gem_package.instance_variable_get(:@gem)
      return unless source.respond_to?(:with_read_io)

      source.with_read_io do |io|
        from_gem(io, source.path)
      ensure
        io.rewind
      end
    end

from_lock(lock_checksum, lockfile_location) click to toggle source

    # File bundler/checksum.rb, line 37
    def from_lock(lock_checksum, lockfile_location)
      algo, digest = lock_checksum.strip.split(ALGO_SEPARATOR, 2)
      Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:lock, lockfile_location))
    end

new(algo, digest, source) click to toggle source

    # File bundler/checksum.rb, line 57
    def initialize(algo, digest, source)
      @algo = algo
      @digest = digest
      @sources = [source]
    end

to_hexdigest(digest, algo = DEFAULT_ALGORITHM) click to toggle source

    # File bundler/checksum.rb, line 42
    def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
      return digest unless algo == DEFAULT_ALGORITHM
      return digest if digest.match?(/\A[0-9a-f]{64}\z/i)

      if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
        digest = digest.tr("-_", "+/") # fix urlsafe base64
        digest.unpack1("m0").unpack1("H*")
      else
        raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
      end
    end

### Public Instance Methods

==(other) click to toggle source

    # File bundler/checksum.rb, line 63
    def ==(other)
      match?(other) && other.sources == sources
    end

Also aliased as: eql?
eql?(other)
Alias for: ==
formatted_sources() click to toggle source

    # File bundler/checksum.rb, line 96
    def formatted_sources
      sources.join("\n    and ").concat("\n")
    end

hash() click to toggle source

    # File bundler/checksum.rb, line 77
    def hash
      digest.hash
    end

inspect() click to toggle source

    # File bundler/checksum.rb, line 114
    def inspect
      abbr = "#{algo}#{ALGO_SEPARATOR}#{digest[0, 8]}"
      from = "from #{sources.join(" and ")}"
      "#<#{self.class}:#{object_id} #{abbr} #{from}>"
    end

match?(other) click to toggle source

    # File bundler/checksum.rb, line 73
    def match?(other)
      other.is_a?(self.class) && other.digest == digest && other.algo == algo
    end

merge!(other) click to toggle source

    # File bundler/checksum.rb, line 89
    def merge!(other)
      return nil unless match?(other)

      @sources.concat(other.sources).uniq!
      self
    end

removable?() click to toggle source

    # File bundler/checksum.rb, line 100
    def removable?
      sources.all?(&:removable?)
    end

removal_instructions() click to toggle source

    # File bundler/checksum.rb, line 104
    def removal_instructions
      msg = +""
      i = 1
      sources.each do |source|
        msg << "  #{i}. #{source.removal}\n"
        i += 1
      end
      msg << "  #{i}. run `bundle install`\n"
    end

same_source?(other) click to toggle source

    # File bundler/checksum.rb, line 69
    def same_source?(other)
      sources.include?(other.sources.first)
    end

to_lock() click to toggle source

    # File bundler/checksum.rb, line 85
    def to_lock
      "#{algo}#{ALGO_SEPARATOR}#{digest}"
    end

to_s() click to toggle source

    # File bundler/checksum.rb, line 81
    def to_s
      "#{to_lock} (from #{sources.first}#{", ..." if sources.size > 1})"
    end