# frozen_string_literal: true module Nanoc::RuleDSL class RoutingRule < Rule include Nanoc::Int::ContractsSupport contract C::None => C::Maybe[Symbol] attr_reader :snapshot_name contract Nanoc::Int::Pattern, Symbol, Proc, C::KeywordArgs[snapshot_name: C::Optional[Symbol]] => C::Any def initialize(pattern, rep_name, block, snapshot_name: nil) super(pattern, rep_name, block) @snapshot_name = snapshot_name end contract Nanoc::Int::ItemRep, C::KeywordArgs[ site: Nanoc::Int::Site, view_context: Nanoc::ViewContextForPreCompilation, ] => C::Any def apply_to(rep, site:, view_context:) context = Nanoc::RuleDSL::RoutingRuleContext.new( rep: rep, site: site, view_context: view_context, ) context.instance_exec(matches(rep.item.identifier), &@block) end end end