Sha256: f66adbcb69735b4b738cb4930b418b7d50830b049220ca99fc8d374be3b3d817

Contents?: true

Size: 1.5 KB

Versions: 6

Compression:

Stored size: 1.5 KB

Contents

module Nanoc::Int
  # Assigns paths to reps.
  #
  # @api private
  class ItemRepRouter
    class IdenticalRoutesError < ::Nanoc::Error
      def initialize(output_path, rep_a, rep_b)
        super("The item representations #{rep_a.inspect} and #{rep_b.inspect} are both routed to #{output_path}.")
      end
    end

    def initialize(reps, action_provider, site)
      @reps = reps
      @action_provider = action_provider
      @site = site
    end

    def run
      paths_to_reps = {}
      @reps.each do |rep|
        @action_provider.paths_for(rep).each do |snapshot_name, path|
          route_rep(rep, path, snapshot_name, paths_to_reps)
        end
      end
    end

    def route_rep(rep, path, snapshot_name, paths_to_reps)
      basic_path = path
      return if basic_path.nil?
      basic_path = basic_path.encode('UTF-8')

      # Check for duplicate paths
      if paths_to_reps.key?(basic_path)
        raise IdenticalRoutesError.new(basic_path, paths_to_reps[basic_path], rep)
      else
        paths_to_reps[basic_path] = rep
      end

      rep.raw_paths[snapshot_name] = @site.config[:output_dir] + basic_path
      rep.paths[snapshot_name] = strip_index_filename(basic_path)
    end

    def strip_index_filename(basic_path)
      @site.config[:index_filenames].each do |index_filename|
        slashed_index_filename = '/' + index_filename
        if basic_path.end_with?(slashed_index_filename)
          return basic_path[0..-index_filename.length - 1]
        end
      end

      basic_path
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
nanoc-4.4.2 lib/nanoc/base/services/item_rep_router.rb
nanoc-4.4.1 lib/nanoc/base/services/item_rep_router.rb
nanoc-4.4.0 lib/nanoc/base/services/item_rep_router.rb
nanoc-4.3.8 lib/nanoc/base/services/item_rep_router.rb
nanoc-4.3.7 lib/nanoc/base/services/item_rep_router.rb
nanoc-4.3.6 lib/nanoc/base/services/item_rep_router.rb