lib/nanoc/base/services/outdatedness_checker.rb in nanoc-4.7.11 vs lib/nanoc/base/services/outdatedness_checker.rb in nanoc-4.7.12
- old
+ new
@@ -17,11 +17,10 @@
Rules::RulesModified,
Rules::ContentModified,
Rules::AttributesModified,
Rules::NotWritten,
Rules::CodeSnippetsModified,
- Rules::ConfigurationModified,
Rules::UsesAlwaysOutdatedFilter,
].freeze
RULES_FOR_LAYOUT =
[
@@ -29,33 +28,42 @@
Rules::ContentModified,
Rules::AttributesModified,
Rules::UsesAlwaysOutdatedFilter,
].freeze
+ RULES_FOR_CONFIG =
+ [
+ Rules::AttributesModified,
+ ].freeze
+
+ C_OBJ_MAYBE_REP = C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Configuration, Nanoc::Int::Layout]
+
contract C::KeywordArgs[outdatedness_checker: OutdatednessChecker, reps: Nanoc::Int::ItemRepRepo] => C::Any
def initialize(outdatedness_checker:, reps:)
@outdatedness_checker = outdatedness_checker
@reps = reps
end
- contract C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout] => C::Maybe[OutdatednessStatus]
+ contract C_OBJ_MAYBE_REP => C::Maybe[OutdatednessStatus]
memoized def outdatedness_status_for(obj)
case obj
when Nanoc::Int::ItemRep
apply_rules(RULES_FOR_ITEM_REP, obj)
when Nanoc::Int::Item
apply_rules_multi(RULES_FOR_ITEM_REP, @reps[obj])
when Nanoc::Int::Layout
apply_rules(RULES_FOR_LAYOUT, obj)
+ when Nanoc::Int::Configuration
+ apply_rules(RULES_FOR_CONFIG, obj)
else
raise Nanoc::Int::Errors::InternalInconsistency, "do not know how to check outdatedness of #{obj.inspect}"
end
end
private
- contract C::ArrayOf[Class], C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout], OutdatednessStatus => C::Maybe[OutdatednessStatus]
+ contract C::ArrayOf[Class], C_OBJ_MAYBE_REP, OutdatednessStatus => C::Maybe[OutdatednessStatus]
def apply_rules(rules, obj, status = OutdatednessStatus.new)
rules.inject(status) do |acc, rule|
if !acc.useful_to_apply?(rule)
acc
else
@@ -67,11 +75,11 @@
end
end
end
end
- contract C::ArrayOf[Class], C::ArrayOf[C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout]] => C::Maybe[OutdatednessStatus]
+ contract C::ArrayOf[Class], C::ArrayOf[C_OBJ_MAYBE_REP] => C::Maybe[OutdatednessStatus]
def apply_rules_multi(rules, objs)
objs.inject(OutdatednessStatus.new) { |acc, elem| apply_rules(rules, elem, acc) }
end
end
@@ -86,11 +94,11 @@
attr_reader :action_sequences
attr_reader :site
Reasons = Nanoc::Int::OutdatednessReasons
- C_OBJ = C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout]
+ C_OBJ = C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Configuration, Nanoc::Int::Layout]
C_ACTION_SEQUENCES = C::HashOf[C_OBJ => Nanoc::Int::ActionSequence]
contract C::KeywordArgs[site: Nanoc::Int::Site, checksum_store: Nanoc::Int::ChecksumStore, checksums: Nanoc::Int::ChecksumCollection, dependency_store: Nanoc::Int::DependencyStore, action_sequence_store: Nanoc::Int::ActionSequenceStore, action_sequences: C_ACTION_SEQUENCES, reps: Nanoc::Int::ItemRepRepo] => C::Any
def initialize(site:, checksum_store:, checksums:, dependency_store:, action_sequence_store:, action_sequences:, reps:)
@site = site
@@ -111,11 +119,11 @@
contract C_OBJ => C::Bool
def outdated?(obj)
outdatedness_reasons_for(obj).any?
end
- contract C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout] => C::IterOf[Reasons::Generic]
+ contract C_OBJ => C::IterOf[Reasons::Generic]
def outdatedness_reasons_for(obj)
reasons = basic.outdatedness_status_for(obj).reasons
if reasons.any?
reasons
elsif outdated_due_to_dependencies?(obj)
@@ -130,10 +138,10 @@
contract C::None => Basic
def basic
@_basic ||= Basic.new(outdatedness_checker: self, reps: @reps)
end
- contract C::Or[Nanoc::Int::Item, Nanoc::Int::ItemRep, Nanoc::Int::Layout], Hamster::Set => C::Bool
+ contract C_OBJ, Hamster::Set => C::Bool
def outdated_due_to_dependencies?(obj, processed = Hamster::Set.new)
# Convert from rep to item if necessary
obj = obj.item if obj.is_a?(Nanoc::Int::ItemRep)
# Get from cache