package POE::Filter::LOLCAT;

use strict;
use warnings;
use Acme::LOLCAT ();
use base qw(POE::Filter);
use vars qw($VERSION);

$VERSION = '1.10';

sub new {
  my $class = shift;
  my %opts = @_;
  $opts{lc $_} = delete $opts{$_} for keys %opts;
  $opts{BUFFER} = [];
  return bless \%opts, $class;
}

sub get_one_start {
  my ($self, $raw) = @_;
  push @{ $self->{BUFFER} }, $_ for @$raw;
}

sub get_one {
  my $self = shift;
  my $events = [];

  my $event = shift @{ $self->{BUFFER} };
  if ( defined $event ) {
    my $record = Acme::LOLCAT::translate($event);
    push @$events, $record if $record;
  }
  return $events;
}

sub get_pending {
  my $self = shift;
  return $self->{BUFFER};
}

sub put {
  return;
}

sub clone {
  my $self = shift;
  my $nself = { };
  $nself->{$_} = $self->{$_} for keys %{ $self };
  $nself->{BUFFER} = [ ];
  return bless $nself, ref $self;
}

1;
__END__

=head1 NAME

POE::Filter::LOLCAT - POE FILTR T SPEKK LIEK LOLCATZ. KTHNX!

=head1 SYNOPSIZ

  my $filter = POE::Filter::LOLCAT->new();

  $arrayref_of_logical_chunks =
    $filter->get($arrayref_of_raw_chunks_from_driver);

=head1 DESCRIPSHUN

POE::Filter::LOLCAT is a L<POE::Filter> for translating lines of text into "LOLCAT", using the 
excellent L<Acme::LOLCAT>. KTHNX!

It is intended to be used in a stackable filter, L<POE::Filter::Stackable>, with L<POE::Filter::Line>.

=head1 CONSTRUCTOR

=over

=item C<new>

Creates a new POE::Filter::LOLCAT object.

=back

=head1 METHODZ

=over

=item C<get>

=item C<get_one_start>

=item C<get_one>

TAKEZ AN ARRAYREF WHICH AR TEH CONTAINZ LINEZ OF TEXT, RETURNZ AN ARRAYREF OV LOLCAT TRANSLATED TEXT. KTHX.

=item C<get_pending>

RETURNZ TEH FILTRZ PARTIAL INPUT BUFFR

=item C<put>

TEH PUT METHOD AR TEH NOT IMPLEMENTED. KTHNX!

=item C<clone>

MAKEZ COPY OV TEH FILTR, AND CLEARZ TEH COPYZ BUFFR.  KTHX.

=back

=head1 AUTHOR

Chris C<BinGOs> Williams <chris@bingosnet.co.uk>

=head1 LICENSE

Copyright E<copy> 2008 Chris Williams

THIZ MODULE MAY BE USED, MODIFIED, AND DISTRIBUTED UNDR TEH SAME TERMZ AZ PERL ITSELF. PLEEZ SEE TEH LICENSE THAT CAME WITH YORE PERL DISTRIBUSHUN FOR DETAILZ. KTHX.

=head1 SEE ALSO

L<Acme::LOLCAT>

L<POE::Filter::Stackable>

L<POE::Filter::Line>

=cut