Sha256: 9925db3db9c06414127f927a90074be82f70d1bbab7351ebb11c0ffdb081fd43

Contents?: true

Size: 1.55 KB

Versions: 4

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

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

        affects_props :attributes, :compiled_content

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
nanoc-4.11.12 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.11 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.10 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.9 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb