Sha256: 7b6c878f8686ab05f25acf0c6d335673fd5c89beaa1d18442011b90ae4c2c00b

Contents?: true

Size: 1.27 KB

Versions: 7

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Unparser
  # DSL to help defining emitters
  module DSL

  private

    # Define remaining children
    #
    # @param [Enumerable<Symbol>] names
    #
    # @return [undefined]
    #
    # @api private
    #
    def define_remaining_children(names)
      range = names.length..-1
      define_method(:remaining_children) do
        children[range]
      end
      private :remaining_children
    end

    # Define named child
    #
    # @param [Symbol] name
    # @param [Fixnum] index
    #
    # @return [undefined]
    #
    # @api private
    #
    def define_child(name, index)
      define_method(name) do
        children.at(index)
      end
      private name
    end

    # Define a group of children
    #
    # @param [Symbol] name
    # @param [Range] range
    #
    # @return [undefined]
    #
    # @pai private
    #
    def define_group(name, range)
      define_method(name) do
        children[range]
      end
      private(name)
      memoize(name)
    end

    # Create name helpers
    #
    # @return [undefined]
    #
    # @api private
    #
    def children(*names)
      define_remaining_children(names)

      names.each_with_index do |name, index|
        define_child(name, index)
      end
    end

  end # DSL
end # Unparser

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
unparser-0.4.5 lib/unparser/dsl.rb
unparser-0.4.4 lib/unparser/dsl.rb
unparser-0.4.3 lib/unparser/dsl.rb
unparser-0.4.2 lib/unparser/dsl.rb
unparser-0.4.1 lib/unparser/dsl.rb
unparser-0.4.0 lib/unparser/dsl.rb
unparser-0.3.0 lib/unparser/dsl.rb