Class: Cbt::Digester

Inherits:
Object
  • Object
show all
Defined in:
lib/cbt/digester.rb

Instance Method Summary collapse

Constructor Details

#initialize(store_file) ⇒ Digester

initialize from the configuration



9
10
11
12
# File 'lib/cbt/digester.rb', line 9

def initialize store_file
  @store_file = store_file
  @store = YAML::Store.new @store_file
end

Instance Method Details

#add_history(file, digest = nil) ⇒ Object

add file copy history



20
21
22
23
24
25
26
27
28
29
# File 'lib/cbt/digester.rb', line 20

def add_history file, digest = nil
  digest = file_digest file unless digest
  @store.transaction do
    @store[file] = Array.new unless @store[file]
    @store[file] << {
      'datetime' => DateTime.now.strftime("%F %T"),
      'digest' => digest
    }
  end
end

#changed?(file, digest = nil) ⇒ Boolean

if the digest is different from last time

Returns:

  • (Boolean)


39
40
41
42
43
44
# File 'lib/cbt/digester.rb', line 39

def changed? file, digest = nil
  digest = file_digest file unless digest
  @store.transaction do
    not (@store[file] and @store[file][-1] and @store[file][-1]['digest'] == digest)
  end
end

#file_digest(file) ⇒ Object



14
15
16
17
# File 'lib/cbt/digester.rb', line 14

def file_digest file
  return "" unless File.exists? file
  d = Digest::MD5.hexdigest(File.read(file))
end

#known?(file, digest = nil) ⇒ Boolean

if the current digest exists in file store

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
56
# File 'lib/cbt/digester.rb', line 47

def known? file, digest = nil
  digest = file_digest file unless digest
  @store.transaction do      
    return false unless @store[file]
    @store[file].each do |h|
      return true if h['digest'] == digest
    end
  end
  false
end

#last_change(file) ⇒ Object

return ‘datetime’ => ”, ‘digest’ => ” or nil for no store



32
33
34
35
36
# File 'lib/cbt/digester.rb', line 32

def last_change file
  @store.transaction do      
    @store[file][-1] if @store[file]
  end
end