class Nanoc::Core::ChecksumStore

Stores checksums for objects in order to be able to detect whether a file has changed since the last site compilation.

@api private

Attributes

checksums[W]
objects[RW]

Public Class Methods

new(config:, objects:) click to toggle source
Calls superclass method Nanoc::Core::Store::new
# File lib/nanoc/core/checksum_store.rb, line 18
def initialize(config:, objects:)
  super(Nanoc::Core::Store.tmp_path_for(config: config, store_name: 'checksums'), 2)

  @objects = objects

  @checksums = {}
end

Public Instance Methods

[](obj) click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 27
def [](obj)
  @checksums[obj.reference]
end
add(obj) click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 32
def add(obj)
  if obj.is_a?(Nanoc::Core::Document)
    @checksums[[obj.reference, :content]] = Nanoc::Core::Checksummer.calc_for_content_of(obj)
  end

  if obj.is_a?(Nanoc::Core::Document) || obj.is_a?(Nanoc::Core::Configuration)
    @checksums[[obj.reference, :each_attribute]] = Nanoc::Core::Checksummer.calc_for_each_attribute_of(obj)
  end

  @checksums[obj.reference] = Nanoc::Core::Checksummer.calc(obj)

  self
end
attributes_checksum_for(obj) click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 52
def attributes_checksum_for(obj)
  @checksums[[obj.reference, :each_attribute]]
end
content_checksum_for(obj) click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 47
def content_checksum_for(obj)
  @checksums[[obj.reference, :content]]
end

Protected Instance Methods

data() click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 58
def data
  @checksums
end
data=(new_data) click to toggle source
# File lib/nanoc/core/checksum_store.rb, line 62
def data=(new_data)
  references = Set.new(@objects.map(&:reference))

  @checksums = {}
  new_data.each_pair do |key, checksum|
    if references.include?(key) || (key.respond_to?(:first) && references.include?(key.first))
      @checksums[key] = checksum
    end
  end
end