Sha256: cd3651ce67db195f3584e59f11a7056dff6cee343599fe4165247949b9fb9bc2

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

module Nanoc
  class ItemRepCollectionView
    include Enumerable

    class NoSuchItemRepError < ::Nanoc::Error
      def initialize(rep_name)
        super("No rep named #{rep_name.inspect} was found.")
      end
    end

    # @api private
    def initialize(item_reps)
      @item_reps = item_reps
    end

    # @api private
    def unwrap
      @item_reps
    end

    def to_ary
      @item_reps.map { |ir| Nanoc::ItemRepView.new(ir) }
    end

    # Calls the given block once for each item rep, passing that item rep as a parameter.
    #
    # @yieldparam [Nanoc::ItemRepView] item rep
    #
    # @yieldreturn [void]
    #
    # @return [self]
    def each
      @item_reps.each { |ir| yield Nanoc::ItemRepView.new(ir) }
      self
    end

    # @return [Integer]
    def size
      @item_reps.size
    end

    # Return the item rep with the given name, or nil if no item rep exists.
    #
    # @param [Symbol] rep_name
    #
    # @return [nil] if no item rep with the given name was found
    #
    # @return [Nanoc::ItemRepView] if an item rep with the given name was found
    def [](rep_name)
      case rep_name
      when Symbol
        res = @item_reps.find { |ir| ir.name == rep_name }
        res && Nanoc::ItemRepView.new(res)
      when Fixnum
        raise ArgumentError, "expected ItemRepCollectionView#[] to be called with a symbol (you likely want `.reps[:default]` rather than `.reps[#{rep_name}]`)"
      else
        raise ArgumentError, 'expected ItemRepCollectionView#[] to be called with a symbol'
      end
    end

    # Return the item rep with the given name, or raises an exception if there
    # is no rep with the given name.
    #
    # @param [Symbol] rep_name
    #
    # @return [Nanoc::ItemRepView]
    #
    # @raise if no rep was found
    def fetch(rep_name)
      res = @item_reps.find { |ir| ir.name == rep_name }
      if res
        Nanoc::ItemRepView.new(res)
      else
        raise NoSuchItemRepError.new(rep_name)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nanoc-4.0.2 lib/nanoc/base/views/item_rep_collection_view.rb