# frozen_string_literal: true # provide checksums for archiving control class Checksum class << self def code dir = Dir.pwd files = children_files("#{dir}/*") .concat(children_files("#{dir}/app/**/*")) .concat(children_files("#{dir}/bin/**/*")) .concat(children_files("#{dir}/config/**/*")) .concat(children_files("#{dir}/db/**/*")) .concat(children_files("#{dir}/doc/**/*")) .concat(children_files("#{dir}/docker/**/*")) .concat(children_files("#{dir}/lib/**/*")) .concat(children_files("#{dir}/node_modules/**/*")) .concat(children_files("#{dir}/plugins/**/*")) .concat(children_files("#{dir}/provision/**/*")) .concat(children_files("#{dir}/scripts/**/*")) .concat(children_files("#{dir}/test/**/*")) .concat(children_files("#{dir}/vendor/**/*")) content = files.map { |f| File.read(f) }.join Checksum.text(content) end def file(path) return unless File.exist?(path) content = File.read(path) Checksum.text(content) end def text(data) require 'sha3' SHA3::Digest.hexdigest(:sha256, data) end private def children_files(path) Dir[path].reject { |f| File.directory?(f) } end end end