Sha256: f2a2fc2111f10d961ce4ce039b1a20f285c42cedcce6683883a6c61aa91ddda8

Contents?: true

Size: 1.7 KB

Versions: 5

Compression:

Stored size: 1.7 KB

Contents

module Nanoc
  class IdentifiableCollectionView < ::Nanoc::View
    include Enumerable

    # @api private
    def initialize(objects, context)
      super(context)
      @objects = objects
    end

    # @api private
    def unwrap
      @objects
    end

    # @abstract
    #
    # @api private
    def view_class
      raise NotImplementedError
    end

    # Calls the given block once for each object, passing that object as a parameter.
    #
    # @yieldparam [#identifier] object
    #
    # @yieldreturn [void]
    #
    # @return [self]
    def each
      @objects.each { |i| yield view_class.new(i, @context) }
      self
    end

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

    # Finds all objects whose identifier matches the given argument.
    #
    # @param [String, Regex] arg
    #
    # @return [Enumerable]
    def find_all(arg)
      @objects.find_all(arg).map { |i| view_class.new(i, @context) }
    end

    # @overload [](string)
    #
    #   Finds the object whose identifier matches the given string.
    #
    #   If the glob syntax is enabled, the string can be a glob, in which case
    #   this method finds the first object that matches the given glob.
    #
    #   @param [String] string
    #
    #   @return [nil] if no object matches the string
    #
    #   @return [#identifier] if an object was found
    #
    # @overload [](regex)
    #
    #   Finds the object whose identifier matches the given regular expression.
    #
    #   @param [Regex] regex
    #
    #   @return [nil] if no object matches the regex
    #
    #   @return [#identifier] if an object was found
    def [](arg)
      res = @objects[arg]
      res && view_class.new(res, @context)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
nanoc-4.7.9 lib/nanoc/base/views/identifiable_collection_view.rb
nanoc-4.7.8 lib/nanoc/base/views/identifiable_collection_view.rb
nanoc-4.7.7 lib/nanoc/base/views/identifiable_collection_view.rb
nanoc-4.7.6 lib/nanoc/base/views/identifiable_collection_view.rb
nanoc-4.7.5 lib/nanoc/base/views/identifiable_collection_view.rb