The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Dancer::Logger::Capture::Trap;

use base 'Dancer::Object';


=head1 NAME

Dancer::Logger::Capture::Trap - a place to store captured Dancer logs

=head1 SYNOPSIS

    my $trap = Dancer::Logger::Capture::Trap->new;
    $trap->store( $level, $message );
    my $logs = $trap->read;

=head1 DESCRIPTION

This is a place to store and retrieve capture Dancer logs used by
L<Dancer::Logger::Capture>.

=head2 Methods

=head3 new

=head3 store

    $trap->store($level, $message);

Stores a log $message and its $level.

=cut

__PACKAGE__->attributes( "_storage" );

sub init {
    my $self = shift;
    $self->_storage([]) unless $self->_storage;
}

sub store {
    my($self, $level, $message) = @_;

    push @{$self->_storage}, { level => $level, message => $message };
}


=head3 read

    my $logs = $trap->read;

Returns the logs stored as an array ref and clears the storage.

For example...

    [{ level => "warning", message => "Danger! Warning! Dancer!" },
     { level => "error",   message => "You fail forever" }
    ];

=cut

sub read {
    my $self = shift;

    my $logs = $self->_storage;
    $self->_storage([]);
    return $logs;
}


=head1 SEE ALSO

L<Dancer::Logger::Capture>

=cut

1;