Sha256: 9f3e7c3ba797893142b81b6d0ce0f675cf4f24999f64bf3d95d924010c3ae14f

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

# encoding: utf-8

module Unparser

  # Buffer used to emit into
  class Buffer

    NL = "\n".freeze

    # Initialize object
    #
    # @return [undefined]
    #
    # @api private
    #
    def initialize
      @content = ''
      @indent = 0
    end

    # Append string
    #
    # @param [String] string
    #
    # @return [self]
    #
    # @api private
    #
    def append(string)
      if @content[-1] == NL
        prefix
      end
      @content << string
      self
    end

    # Append a string without an indentation prefix
    #
    # @param [String] string
    #
    # @return [self]
    #
    # @api private
    #
    def append_without_prefix(string)
      @content << string
      self
    end

    # Increase indent
    #
    # @return [self]
    #
    # @api private
    #
    def indent
      @indent += 1
      self
    end

    # Decrease indent
    #
    # @return [self]
    #
    # @api private
    #
    def unindent
      @indent -= 1
      self
    end

    # Write newline
    #
    # @return [self]
    #
    # @api private
    #
    def nl
      @content << NL
      self
    end

    # Test for a fresh line
    #
    # @return [true]
    #   if the buffer content ends with a fresh line
    #
    # @return [false]
    #   otherwise
    #
    # @api private
    #
    def fresh_line?
      @content.empty? || @content[-1] == NL
    end

    # Return content of buffer
    #
    # @return [String]
    #
    # @api private
    #
    def content
      @content.dup.freeze
    end

    # Capture the content written to the buffer within the block
    #
    # @return [String]
    #
    # @api private
    #
    def capture_content
      size_before = @content.size
      yield
      @content[size_before..-1]
    end

  private

    INDENT_SPACE = '  '.freeze

    # Write prefix
    #
    # @return [String]
    #
    # @api private
    #
    def prefix
      @content << INDENT_SPACE * @indent
    end

  end # Buffer
end # Unparser

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
unparser-0.1.9 lib/unparser/buffer.rb
unparser-0.1.8 lib/unparser/buffer.rb
unparser-0.1.7 lib/unparser/buffer.rb
unparser-0.1.6 lib/unparser/buffer.rb