lib/nanoc/rule_dsl/rule_context.rb in nanoc-4.8.18 vs lib/nanoc/rule_dsl/rule_context.rb in nanoc-4.8.19

- old
+ new

@@ -1,99 +1,23 @@ # frozen_string_literal: true module Nanoc::RuleDSL - # Provides a context in which compilation and routing rules can be executed. - # It provides access to the item representation that is being compiled or - # routed. - # - # @api private class RuleContext < Nanoc::Int::Context - # @param [Nanoc::Int::ItemRep] rep - # @param [Nanoc::Int::Site] site - # @param [Nanoc::Int::Executor, Nanoc::RuleDSL::RecordingExecutor] executor - # @param [Nanoc::ViewContextForCompilation] view_context - def initialize(rep:, site:, executor:, view_context:) - @_executor = executor + include Nanoc::Int::ContractsSupport + contract C::KeywordArgs[ + rep: Nanoc::Int::ItemRep, + site: Nanoc::Int::Site, + view_context: Nanoc::ViewContextForPreCompilation, + ] => C::Any + def initialize(rep:, site:, view_context:) super({ item: Nanoc::BasicItemView.new(rep.item, view_context), rep: Nanoc::BasicItemRepView.new(rep, view_context), item_rep: Nanoc::BasicItemRepView.new(rep, view_context), items: Nanoc::ItemCollectionWithoutRepsView.new(site.items, view_context), layouts: Nanoc::LayoutCollectionView.new(site.layouts, view_context), config: Nanoc::ConfigView.new(site.config, view_context), }) - end - - # Filters the current representation (calls {Nanoc::Int::ItemRep#filter} with - # the given arguments on the rep). - # - # @see Nanoc::Int::ItemRep#filter - # - # @param [Symbol] filter_name The name of the filter to run the item - # representations' content through - # - # @param [Hash] filter_args The filter arguments that should be passed to - # the filter's #run method - # - # @return [void] - def filter(filter_name, filter_args = {}) - @_executor.filter(filter_name, filter_args) - end - - # Layouts the current representation (calls {Nanoc::Int::ItemRep#layout} with - # the given arguments on the rep). - # - # @see Nanoc::Int::ItemRep#layout - # - # @param [String] layout_identifier The identifier of the layout the item - # should be laid out with - # - # @return [void] - def layout(layout_identifier, extra_filter_args = nil) - @_executor.layout(layout_identifier, extra_filter_args) - end - - # Creates a snapshot of the current compiled item content. Calls - # {Nanoc::Int::ItemRep#snapshot} with the given arguments on the rep. - # - # @see Nanoc::Int::ItemRep#snapshot - # - # @param [Symbol] snapshot_name The name of the snapshot to create - # - # @param [String, nil] path - # - # @return [void] - def snapshot(snapshot_name, path: nil) - @_executor.snapshot(snapshot_name, path: path) - end - - # Creates a snapshot named :last the current compiled item content, with - # the given path. This is a convenience method for {#snapshot}. - # - # @see #snapshot - # - # @param [String] path - # - # @return [void] - def write(arg) - @_write_snapshot_counter ||= 0 - snapshot_name = "_#{@_write_snapshot_counter}".to_sym - @_write_snapshot_counter += 1 - - case arg - when String, Nanoc::Identifier - snapshot(snapshot_name, path: arg) - when Hash - if arg.key?(:ext) - ext = arg[:ext].sub(/\A\./, '') - path = @item.identifier.without_exts + '.' + ext - snapshot(snapshot_name, path: path) - else - raise ArgumentError, 'Cannot call #write this way (need path or :ext)' - end - else - raise ArgumentError, 'Cannot call #write this way (need path or :ext)' - end end end end