Doc::Perlish::EventBuffer - collect streaming API events


Doc-Perlish documentation Contained in the Doc-Perlish distribution.

Index


Code Index:

NAME

Top

Doc::Perlish::EventBuffer - collect streaming API events

SYNOPSIS

Top

 my $buffer = Doc::Perlish::EventBuffer->new();

 $sender->receiver($buffer);
 $sender->send_all;

 my @events = $buffer->events;

DESCRIPTION

Top


Doc-Perlish documentation Contained in the Doc-Perlish distribution.

package Doc::Perlish::EventBuffer;

use Doc::Perlish::Receiver -Base;
use Doc::Perlish::Sender -Base;
use Doc::Perlish qw(receiver_methods);

#field 'events';

BEGIN {
    no strict 'refs';
    for my $event ( @{( receiver_methods )} ) {
	*$event = sub {
	    my $self = shift;
	    push @{$self->events}, [$event, @_];
	};
    }
}

# DWIM'y array accessor
sub events {
    if ( @_ > 1 ) {
	$self->{events} = [ @_ ];
    } elsif ( @_ == 1 ) {
	my $arg = shift;
	if ( ref $arg ) {
	    $self->{events} = shift;
	} else {
	    return ${ $self->events }[$arg];
	}
    } else {
	if ( wantarray ) {
	    return @{ $self->events };
	} else {
	    return $self->{events} ||= [];
	}
    }
}

sub send_one {
    my $ev = $self->events;
    my $event = shift @$ev;
    $self->send(@$event);
    return scalar(@$ev)
}

1;