Skip to content

Commit

Permalink
Merge pull request #1137 from nanoc/declare-affected-props-in-outd-rule
Browse files Browse the repository at this point in the history
Declare affected props in outdatedness rule
  • Loading branch information
denisdefreyne committed Mar 27, 2017
2 parents ee65722 + 1479acc commit 8d5b407
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 29 deletions.
2 changes: 1 addition & 1 deletion lib/nanoc/base/entities/outdatedness_status.rb
Expand Up @@ -10,7 +10,7 @@ def initialize(reasons: [], props: Props.new)
end

def useful_to_apply?(rule)
(rule.instance.reason.props.active - @props.active).any?
(rule.affected_props - @props.active).any?
end

def update(reason)
Expand Down
11 changes: 7 additions & 4 deletions lib/nanoc/base/services/outdatedness_rule.rb
Expand Up @@ -12,17 +12,20 @@ def call(obj, outdatedness_checker)
end

def apply(_obj, _outdatedness_checker)
raise NotImplementedError.new('Nanoc::Int::OutdatednessRule subclasses must implement ##reason, and #apply')
raise NotImplementedError.new('Nanoc::Int::OutdatednessRule subclasses must implement #apply')
end

contract C::None => String
def inspect
"#{self.class.name}(#{reason})"
end

# TODO: remove
def reason
raise NotImplementedError.new('Nanoc::Int::OutdatednessRule subclasses must implement ##reason, and #apply')
def self.affects_props(*names)
@affected_props = Set.new(names)
end

def self.affected_props
@affected_props
end
end
end
32 changes: 8 additions & 24 deletions lib/nanoc/base/services/outdatedness_rules.rb
Expand Up @@ -6,9 +6,7 @@ class CodeSnippetsModified < OutdatednessRule

include Nanoc::Int::ContractsSupport

def reason
Nanoc::Int::OutdatednessReasons::CodeSnippetsModified
end
affects_props :raw_content, :attributes, :compiled_content, :path

def apply(_obj, outdatedness_checker)
if any_snippets_modified?(outdatedness_checker)
Expand All @@ -31,9 +29,7 @@ def any_snippets_modified?(outdatedness_checker)
class ConfigurationModified < OutdatednessRule
extend Nanoc::Int::Memoization

def reason
Nanoc::Int::OutdatednessReasons::ConfigurationModified
end
affects_props :raw_content, :attributes, :compiled_content, :path

def apply(_obj, outdatedness_checker)
if config_modified?(outdatedness_checker)
Expand All @@ -53,9 +49,7 @@ def config_modified?(outdatedness_checker)
end

class NotWritten < OutdatednessRule
def reason
Nanoc::Int::OutdatednessReasons::NotWritten
end
affects_props :raw_content, :attributes, :compiled_content, :path

def apply(obj, _outdatedness_checker)
if obj.raw_paths.values.flatten.compact.any? { |fn| !File.file?(fn) }
Expand All @@ -65,9 +59,7 @@ def apply(obj, _outdatedness_checker)
end

class ContentModified < OutdatednessRule
def reason
Nanoc::Int::OutdatednessReasons::ContentModified
end
affects_props :raw_content, :compiled_content

def apply(obj, outdatedness_checker)
obj = obj.item if obj.is_a?(Nanoc::Int::ItemRep)
Expand All @@ -85,9 +77,7 @@ class AttributesModified < OutdatednessRule

include Nanoc::Int::ContractsSupport

def reason
Nanoc::Int::OutdatednessReasons::AttributesModified
end
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)
Expand All @@ -108,9 +98,7 @@ def apply(obj, outdatedness_checker)
end

class RulesModified < OutdatednessRule
def reason
Nanoc::Int::OutdatednessReasons::RulesModified
end
affects_props :compiled_content, :path

def apply(obj, outdatedness_checker)
mem_old = outdatedness_checker.rule_memory_store[obj]
Expand All @@ -122,9 +110,7 @@ def apply(obj, outdatedness_checker)
end

class PathsModified < OutdatednessRule
def reason
Nanoc::Int::OutdatednessReasons::PathsModified
end
affects_props :path

def apply(obj, outdatedness_checker)
# FIXME: Prefer to not work on serialised version
Expand All @@ -143,9 +129,7 @@ def apply(obj, outdatedness_checker)
end

class UsesAlwaysOutdatedFilter < OutdatednessRule
def reason
Nanoc::Int::OutdatednessReasons::UsesAlwaysOutdatedFilter
end
affects_props :raw_content, :attributes, :path

def apply(obj, outdatedness_checker)
mem = outdatedness_checker.action_provider.memory_for(obj)
Expand Down

0 comments on commit 8d5b407

Please sign in to comment.