Class: Nanoc::Int::OutdatednessRules::AttributesModified

Inherits:
Nanoc::Int::OutdatednessRule
  • Object
show all
Defined in:
lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb

Instance Method Summary collapse

Instance Method Details

#apply(obj, outdatedness_checker) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb', line 10

def apply(obj, outdatedness_checker)
  case obj
  when Nanoc::Int::ItemRep
    apply(obj.item, outdatedness_checker)
  when Nanoc::Int::Item, Nanoc::Int::Layout, Nanoc::Int::Configuration
    if outdatedness_checker.checksum_store[obj] == outdatedness_checker.checksums.checksum_for(obj)
      return nil
    end

    old_checksums = outdatedness_checker.checksum_store.attributes_checksum_for(obj)
    unless old_checksums
      return Nanoc::Int::OutdatednessReasons::AttributesModified.new(true)
    end

    new_checksums = outdatedness_checker.checksums.attributes_checksum_for(obj)

    attributes = Set.new(old_checksums.keys) + Set.new(new_checksums.keys)
    changed_attributes = attributes.reject { |a| old_checksums[a] == new_checksums[a] }

    if changed_attributes.any?
      Nanoc::Int::OutdatednessReasons::AttributesModified.new(changed_attributes)
    end
  else
    raise ArgumentError
  end
end