All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.codearte.accurest.builder.BlockBuilder.groovy Maven / Gradle / Ivy

The newest version!
package io.codearte.accurest.builder

import groovy.transform.PackageScope

/**
 * @author Jakub Kubrynski
 */
@PackageScope
class BlockBuilder {

	private final StringBuilder builder
	private final String spacer
	private int indents

	BlockBuilder(String spacer) {
		this.spacer = spacer
		builder = new StringBuilder()
	}

	BlockBuilder startBlock() {
		indents++
		return this
	}

	BlockBuilder endBlock() {
		indents--
		return this
	}

	BlockBuilder indent() {
		startBlock().startBlock()
		return this
	}

	BlockBuilder unindent() {
		endBlock().endBlock()
		return this
	}

	BlockBuilder addLine(String line) {
		addIndentation()
		builder << "$line\n"
		return this
	}

	BlockBuilder addEmptyLine() {
		builder << '\n'
		return this
	}

	private void addIndentation() {
		indents.times {
			builder << spacer
		}
	}

	BlockBuilder addBlock(MethodBuilder methodBuilder) {
		startBlock()
		methodBuilder.appendTo(this)
		endBlock()
		addEmptyLine()
		return this
	}

	BlockBuilder addAtTheEnd(String toAdd) {
		if (builder.charAt(builder.length() - 1) as String == '\n') {
			builder.replace(builder.length() - 1, builder.length(), toAdd)
			builder << '\n'
		} else {
			builder << toAdd
		}
		return this
	}


	@Override
	String toString() {
		return builder.toString()
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy