Sha256: 294ee279c611f3e202b2fb07eb26e9abc8a0002eeff8fb77bdac1b653095cb59

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Nanoc::Int::OutdatednessRules
  class AttributesModified < Nanoc::Int::OutdatednessRule
    include Nanoc::Int::ContractsSupport

    affects_props :attributes, :compiled_content

    contract C::Or[Nanoc::Int::ItemRep, Nanoc::Int::Item, Nanoc::Int::Layout], C::Named['Nanoc::Int::OutdatednessChecker'] => C::Maybe[Nanoc::Int::OutdatednessReasons::Generic]
    def apply(obj, outdatedness_checker)
      case obj
      when Nanoc::Int::ItemRep
        apply(obj.item, outdatedness_checker)
      when Nanoc::Int::Item, Nanoc::Int::Layout
        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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nanoc-4.7.11 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.7.10 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb