Sha256: 845ad2ceb71b6acc3b1e3e0cc76b79e665692b8cc71856f640691bbcea1b636d

Contents?: true

Size: 689 Bytes

Versions: 1

Compression:

Stored size: 689 Bytes

Contents

module SoberSwag
  module Nodes
    ##
    # Base class for nodes that contain arrays of other nodes.
    # This is very different from an attribute representing a node which *is* an array of some element type!!
    class Array < Base
      def initialize(elements)
        @elements = elements
      end

      attr_reader :elements

      def map(&block)
        self.class.new(elements.map { |elem| elem.map(&block) })
      end

      def cata(&block)
        block.call(self.class.new(elements.map { |elem| elem.cata(&block) }))
      end

      def deconstruct
        @elements
      end

      def deconstruct_keys(keys)
        { elements: @elements }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sober_swag-0.1.0 lib/sober_swag/nodes/array.rb