class CheckFiles::Checker

Attributes

cache_path[R]
pattern[R]

Public Class Methods

new(pattern) click to toggle source
# File lib/check_files/checker.rb, line 7
def initialize(pattern)
  @pattern = pattern
  pattern_digest = Digest::SHA1.hexdigest(pattern)
  @cache_path = Rails.root.join("tmp/cache/#{pattern_digest}")
end

Public Instance Methods

changed?() click to toggle source
# File lib/check_files/checker.rb, line 29
def changed?
  prev_digest = previous_digest

  if prev_digest
    prev_digest != current_digest
  else
    update_cache && false
  end
end
compute_digest(entry) click to toggle source
# File lib/check_files/checker.rb, line 44
def compute_digest(entry)
  content = File.exist?(entry) && File.read(entry)
  Digest::SHA1.hexdigest("#{entry}-#{content}")
end
current_digest() click to toggle source
# File lib/check_files/checker.rb, line 13
def current_digest
  entries = Dir[pattern].sort
  entries_digest = Digest::SHA1.hexdigest(entries.join)

  if pattern.end_with?("/*")
    entries_digest
  else
    content_digest = entries.map {|entry| compute_digest(entry) }.join
    Digest::SHA1.hexdigest("#{entries_digest}#{content_digest}")
  end
end
previous_digest() click to toggle source
# File lib/check_files/checker.rb, line 25
def previous_digest
  cache_path.file? && cache_path.read
end
update_cache() click to toggle source
# File lib/check_files/checker.rb, line 39
def update_cache
  FileUtils.mkdir_p(File.dirname(cache_path))
  File.open(cache_path, "w") {|io| io << current_digest }
end