class Fire::Digest
Constants
- DEFAULT_FILE
Attributes
current[R]
file[R]
ignore[R]
saved[R]
Public Class Methods
new(options={})
click to toggle source
# File lib/fire/digest.rb, line 26 def initialize(options={}) @file = options[:file] || DEFAULT_FILE @ignore = options[:ignore] || [] @current = {} @saved = {} read refresh end
Public Instance Methods
checksum(file)
click to toggle source
Compute the sha1 identifer for a file.
file - path to a file
Returns [String] SHA1 digest string.
# File lib/fire/digest.rb, line 100 def checksum(file) sha = ::Digest::SHA1.new File.open(file, 'r') do |fh| fh.each_line do |l| sha << l end end sha.hexdigest end
read()
click to toggle source
Load saved digest.
# File lib/fire/digest.rb, line 38 def read return unless File.exist?(file) File.read(file).lines.each do |line| if md = /^(\w+)\s+(.*?)$/.match(line) @saved[md[2]] = md[1] end end end
refresh()
click to toggle source
Gather current digest for all files.
Returns nothing.
# File lib/fire/digest.rb, line 66 def refresh list = Dir['**/*'] list = list.reject{ |path| ignore.any?{ |ig| /^#{ig}/ =~ path } } list.each do |path| if File.directory?(path) # how to handle directories as a whole? elsif File.exist?(path) id = checksum(path) @current[path] = id end end end
save()
click to toggle source
Save current digest.
# File lib/fire/digest.rb, line 80 def save dir = File.dirname(file) FileUtils.mkdir(dir) unless File.directory?(dir) File.open(file, 'w'){ |f| f << to_s } end
to_s()
click to toggle source
Returns [String] digest file format.
# File lib/fire/digest.rb, line 87 def to_s s = "" current.each do |path, id| s << "#{id} #{path}\n" end s end