Class: Index::Checksum

Inherits:
Object
  • Object
show all
Defined in:
lib/index/checksum.rb

Constant Summary collapse

EndOfFile =
Class.new(StandardError)
CHECKSUM_SIZE =
20

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ Checksum

Returns a new instance of Checksum.



10
11
12
13
# File 'lib/index/checksum.rb', line 10

def initialize(file)
  @file   = file
  @digest = Digest::SHA1.new
end

Instance Method Details

#read(size) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/index/checksum.rb', line 24

def read(size)
  data = @file.read(size)

  unless data.bytesize == size
    raise EndOfFile, "Unexpected end-of-file while reading index"
  end

  @digest.update(data)
  data
end

#verify_checksumObject



35
36
37
38
39
40
41
# File 'lib/index/checksum.rb', line 35

def verify_checksum
  sum = @file.read(CHECKSUM_SIZE)

  unless sum == @digest.digest
    raise Invalid, "Checksum does not match value stored on disk"
  end
end

#write(data) ⇒ Object



15
16
17
18
# File 'lib/index/checksum.rb', line 15

def write(data)
  @file.write(data)
  @digest.update(data)
end

#write_checksumObject



20
21
22
# File 'lib/index/checksum.rb', line 20

def write_checksum
  @file.write(@digest.digest)
end