Sha256: 00025a6d75cfb7ab82090a3aef1935b50c3c536d3c2611ae5b607cece118ba0e

Contents?: true

Size: 994 Bytes

Versions: 2

Compression:

Stored size: 994 Bytes

Contents

require 'digest'

module Text
  module Checkm
    class << self
      # Size (in bytes) to read (in chunks) to compute checksums
      CHUNK_SIZE = 8 * 1024 * 1024

      # Compute the checksum 'alg' for a file
      # @param [File] file
      # @param [String] alg md5, sha1, sha256, dir
      def checksum(file, alg) # TODO: don't pass file handles around
        return true unless alg # TODO: something less counterintuitive
        return File.directory?(file) if alg =~ /dir/

        digest_alg = digest_for(alg)
        return false unless digest_alg # TODO: something less counterintuitive

        while !file.eof? && (chunk = file.readpartial(CHUNK_SIZE))
          digest_alg << chunk
        end
        digest_alg.hexdigest
      end

      private

      def digest_for(alg)
        case alg
        when /md5/
          Digest::MD5.new
        when /sha1/
          Digest::SHA1.new
        when /sha256/
          Digest::SHA2.new(256)
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
text-checkm-0.8 lib/text/checkm/checksum.rb
text-checkm-0.7 lib/text/checkm/checksum.rb