The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

package Devel::Events::Handler::Callback;
use Moose;

with qw/Devel::Events::Handler/;

has callback => (
	isa => "CodeRef",
	is  => "rw",
	required => 1,
);

around new => sub {
	my $next = shift;
	my ( $class, @args ) = @_;
	@args = ( callback => @args ) if @args == 1;
	$class->$next(@args);
};

sub new_event {
	my ( $self, @event ) = @_;
	$self->callback->( @event );
}


__PACKAGE__;

__END__

=pod

=head1 NAME

Devel::Events::Handler::Callback - An event handler that delegates to code references.

=head1 SYNOPSIS

	use Devel::Events::Handler::Callback;

	my $h = Devel::Events::Handler::Callback->new(
		callback => sub {
			my ( $type, %data ) = @_;
			# ...
		},
	);

=head1 DESCRIPTION

This object will let you easily create handlers that are callbacks. This is
used extensively in the test suites.

=head1 ATTRIBUTES

=over 4

=item callback

Accepts a code reference.

Required.

=back

=head1 METHODS

=over 4

=item new

This method is overridden so that when it is passed only one parameter that
parameter will be used for the C<callback> attribute.

=item new_event @event

Delegates to C<callback>.

=back

=cut