Class: Bundler::Checksum
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Inherits: | Object |
Defined in: | lib/bundler/checksum.rb |
Constant Summary
-
ALGO_SEPARATOR =
# File 'lib/bundler/checksum.rb', line 5"="
-
DEFAULT_ALGORITHM =
private
# File 'lib/bundler/checksum.rb', line 6"sha256"
-
DEFAULT_BLOCK_SIZE =
private
# File 'lib/bundler/checksum.rb', line 816_384
Class Method Summary
- .from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
- .from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
- .from_gem_package(gem_package, algo = DEFAULT_ALGORITHM)
- .from_lock(lock_checksum, lockfile_location)
- .new(algo, digest, source) ⇒ Checksum constructor
- .to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
Instance Attribute Summary
- #algo readonly
- #digest readonly
- #removable? ⇒ Boolean readonly
- #sources readonly
Instance Method Summary
Constructor Details
.new(algo, digest, source) ⇒ Checksum
Class Method Details
.from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
[ GitHub ].from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
[ GitHub ]# File 'lib/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)
[ GitHub ]# File 'lib/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)
[ GitHub ]# File 'lib/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
.to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
[ GitHub ]# File 'lib/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
Instance Attribute Details
#algo (readonly)
[ GitHub ]#digest (readonly)
[ GitHub ]
#removable? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/bundler/checksum.rb', line 100
def removable? sources.all?(&:removable?) end
#sources (readonly)
[ GitHub ]Instance Method Details
#==(other) Also known as: #eql?
[ GitHub ]#eql?(other)
Alias for #==.
# File 'lib/bundler/checksum.rb', line 67
alias_method :eql?, :==
#formatted_sources
[ GitHub ]# File 'lib/bundler/checksum.rb', line 96
def formatted_sources sources.join("\n and ").concat("\n") end
#hash
[ GitHub ]# File 'lib/bundler/checksum.rb', line 77
def hash digest.hash end
#inspect
[ GitHub ]# File 'lib/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) ⇒ Boolean
#merge!(other)
[ GitHub ]#removal_instructions
[ GitHub ]# File 'lib/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) ⇒ Boolean
#to_lock
[ GitHub ]# File 'lib/bundler/checksum.rb', line 85
def to_lock "#{algo}#{ALGO_SEPARATOR}#{digest}" end