Sha256: e418698b66774ccf6c41a965012b299601b2a321cb23f34473827c4005536b47

Contents?: true

Size: 975 Bytes

Versions: 1

Compression:

Stored size: 975 Bytes

Contents

# frozen_string_literal: true

module Phlexi
  module Display
    module Structure
      class NamespaceCollection < Node
        include Enumerable

        def initialize(key, parent:, collection: nil, &block)
          raise ArgumentError, "block is required" unless block.present?

          super(key, parent: parent)

          @collection = collection
          @block = block
          each(&block)
        end

        private

        def each(&)
          namespaces.each(&)
        end

        # Builds and memoizes namespaces for the collection.
        #
        # @return [Array<Namespace>] An array of namespace objects.
        def namespaces
          @namespaces ||= @collection.map.with_index do |object, key|
            build_namespace(key, object: object)
          end
        end

        def build_namespace(index, **)
          parent.class.new(index, parent: self, builder_klass: parent.builder_klass, **)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
phlexi-display-0.0.2 lib/phlexi/display/structure/namespace_collection.rb