diff --git a/lib/nanoc/base/entities/processing_actions/snapshot.rb b/lib/nanoc/base/entities/processing_actions/snapshot.rb index 40cec9d098..0a4ac092ea 100644 --- a/lib/nanoc/base/entities/processing_actions/snapshot.rb +++ b/lib/nanoc/base/entities/processing_actions/snapshot.rb @@ -21,9 +21,9 @@ def serialize NONE = Object.new - contract String => self - def add_path(path) - self.class.new(@snapshot_names, @paths + [path]) + contract C::KeywordArgs[snapshot_names: C::Optional[C::IterOf[Symbol]], paths: C::Optional[C::IterOf[String]]] => self + def update(snapshot_names: [], paths: []) + self.class.new(@snapshot_names + snapshot_names, @paths + paths) end contract C::None => String diff --git a/lib/nanoc/rule_dsl/rule_memory_calculator.rb b/lib/nanoc/rule_dsl/rule_memory_calculator.rb index ccb4a0424a..7496704599 100644 --- a/lib/nanoc/rule_dsl/rule_memory_calculator.rb +++ b/lib/nanoc/rule_dsl/rule_memory_calculator.rb @@ -136,7 +136,7 @@ def copy_path_from_routing_rule(action, rep:) path_from_rules = paths_from_rules.find(&:itself) if path_from_rules - action.add_path(path_from_rules.to_s) + action.update(paths: [path_from_rules.to_s]) else action end diff --git a/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb b/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb index a7fbb11863..d3fbe050ed 100644 --- a/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb +++ b/spec/nanoc/base/entities/processing_actions/snapshot_spec.rb @@ -16,9 +16,23 @@ it { is_expected.to eql('') } end - describe '#add_path' do - subject { action.add_path('/donkey.md') } - its(:snapshot_names) { is_expected.to eql([:before_layout]) } - its(:paths) { is_expected.to eql(['/foo.md', '/donkey.md']) } + describe '#update' do + context 'with nothing' do + subject { action.update } + its(:snapshot_names) { is_expected.to eql([:before_layout]) } + its(:paths) { is_expected.to eql(['/foo.md']) } + end + + context 'with snapshot name' do + subject { action.update(snapshot_names: [:zebra]) } + its(:snapshot_names) { is_expected.to eql([:before_layout, :zebra]) } + its(:paths) { is_expected.to eql(['/foo.md']) } + end + + context 'with paths' do + subject { action.update(paths: ['/donkey.md', '/giraffe.md']) } + its(:snapshot_names) { is_expected.to eql([:before_layout]) } + its(:paths) { is_expected.to eql(['/foo.md', '/donkey.md', '/giraffe.md']) } + end end end