Sha256: fa23f01ec226394949578971bb652e19fa85c4d26a4aad1e3b150ac0286d54c1

Contents?: true

Size: 1.55 KB

Versions: 8

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

module Nanoc
  module Int
    module OutdatednessRules
      class AttributesModified < Nanoc::Int::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::Int::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::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
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
nanoc-4.11.8 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.7 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.6 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.5 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.4 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.3 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.2 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb
nanoc-4.11.1 lib/nanoc/base/services/outdatedness_rules/attributes_modified.rb