Fiber::Annotation SourceFiberAnnotation

module Annotation

A mechanism for annotating fibers.

Definitions

def initialize(annotation: nil, **options, &block)

Annotate the current fiber with the given annotation.

Signature

parameter annotation Object

The annotation to set.

Implementation

def initialize(annotation: nil, **options, &block)
	@annotation = annotation
	super(**options, &block)
end

attr_accessor :annotation

Get the current annotation.

Signature

returns Object

The current annotation.

def annotate(annotation)

Annotate the current fiber with the given annotation.

If a block is given, the annotation is set for the duration of the block and then restored to the previous value.

The block form of this method should only be invoked on the current fiber.

Signature

parameter annotation Object

The annotation to set.

yields {}

The block to execute with the given annotation.

returns Object

The return value of the block.

Implementation

def annotate(annotation)
	if block_given?
		raise "Cannot annotation a different fiber!" unless Fiber.current == self
		
		begin
			current_annotation = @annotation
			@annotation = annotation
			return yield
		ensure
			@annotation = current_annotation
		end
	else
		@annotation = annotation
	end
end