class Formatter

Walks a value and emits styled tokens to an output, aborting once the character budget is exhausted.

Nested Classes and Modules

class Truncated

Raised internally to abort formatting once the limit is reached.

Definitions

def initialize(output, limit:)

Signature

parameter output Output

The output target to write tokens to.

parameter limit Integer

The maximum number of characters to emit.

Implementation

def initialize(output, limit:)
	@output = output
	@remaining = limit
	@seen = nil
end

def emit(text)

Emit a token in the variable style, truncating and aborting once the budget is exceeded.

Signature

parameter text String

The token text to emit.

Implementation

def emit(text)
	truncated = false
	
	if text.length > @remaining
		text = text[0, @remaining]
		truncated = true
	end
	
	@remaining -= text.length
	
	@output.write(:variable, text, :reset)
	
	raise Truncated if truncated
end

def format(value)

Format a value, emitting styled tokens to the output.

Signature

parameter value Object

The value to format.

Implementation

def format(value)
	case value
	when String
		# Inspect only a prefix so we never escape a huge string:
		slice = value.length > @remaining ? value[0, @remaining] : value
		emit(slice.inspect)
	when Array
		format_array(value)
	when Hash
		format_hash(value)
	else
		format_object(value)
	end
end