MooseX-Event

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

MANIFEST
META.yml
Makefile.PL
README
SIGNATURE
dist.ini
lib/MooseX/Event.pm
lib/MooseX/Event/Role.pm
lib/MooseX/Event/Role/ClassMethods.pm
t/basic.t
t/coro.t
t/pod-coverage.t
t/pod.t
t/release-minimum-version.t
t/release-no-tabs.t
t/release-portability.t
t/release-synopsis.t
t/release-unused-vars.t
t/with.t
weaver.ini

SIGNATURE  view on Meta::CPAN

SHA1 7f7f48c804dbd34389e2a6e6622f50e9f21bbbc5 LICENSE
SHA1 c97dc388d13431645ef7aab68b84d04e355ed8f0 MANIFEST
SHA1 b3a4fc5bf951e097bd6c307a0dd3fdb0f04d2d08 META.yml
SHA1 ca22e6788b4b90b4719db1fc246fcc59029401e7 Makefile.PL
SHA1 323c7446e23aba6d000d598d5a17cb41786db40a README
SHA1 74846d0ed0c698be5e557c3882a6a6b1d1920558 dist.ini
SHA1 5f230b6936605c5c0b8d41f282bee9717606a77b lib/MooseX/Event.pm
SHA1 884ec2e5df044cd5f4b2b8fe974a54fac3134dc2 lib/MooseX/Event/Role.pm
SHA1 3d763875c5703c7c902d844e1ea454ca942dae17 lib/MooseX/Event/Role/ClassMethods.pm
SHA1 d54adfab7444e6ebe64c5ee2e8fbcb199bffd2c3 t/basic.t
SHA1 454757b650e8d1edb0df6adcb559082b5101da39 t/coro.t
SHA1 05a7773551a9ce09e04ffdddd74d4e12a08b6cbf t/pod-coverage.t
SHA1 b2131e5af08c2702a3742365d55f365e9cc0cf15 t/pod.t
SHA1 54ed25287b7e1c9ff328eaf126d438438c8a1d48 t/release-minimum-version.t
SHA1 455d1dd1867212a665ad5ea4126b572411de300c t/release-no-tabs.t
SHA1 3bb783b8a31b5eaff916bcb8bf7b348ee340ecb5 t/release-portability.t
SHA1 612226d447015079c046d65932f774304a4b9f20 t/release-synopsis.t
SHA1 d7221447937ab93002a123801def7be09748c106 t/release-unused-vars.t
SHA1 2140e2ee787453ccec724e1ebbd9f56ae0a9868c t/with.t
SHA1 941fe411748f0439fecc13f587748a3ee899abc8 weaver.ini
-----BEGIN PGP SIGNATURE-----

lib/MooseX/Event/Role.pm  view on Meta::CPAN

        my $ce = $self->current_event;
        $self->current_event( $event );
        foreach ( @{ $self->_listeners->{$event} } ) {
            $_->($self,@args);
        }
        $self->current_event($ce);
        return;
    };


    my $emit_coro = sub {
        my $self = shift;
        my( $event, @args ) = @_;
        if ( ! $self->event_exists($event) ) {
            die "Event $event does not exist";
        }
        return unless exists $self->_listeners->{$event};

        foreach my $todo ( @{ $self->_listeners->{$event} } ) {
            my $ce;
            &Coro::async( sub {

lib/MooseX/Event/Role.pm  view on Meta::CPAN

        }
        Coro::cede();

        return;
    };


    sub emit {
        no warnings 'redefine';
        if ( defined *Coro::async{CODE} ) {
            *emit = $emit_coro;
            goto $emit_coro;
        }
        else {
            *emit = $emit_stock;
            goto $emit_stock;
        }
    }

}


lib/MooseX/Event/Role.pm  view on Meta::CPAN

Registers $listener as a listener on $event. Event listeners registered via
once will emit only once.

Returns the listener coderef.

=head2 our method emit( Str $event, Array[Any] *@args )

Normally called within the class using the MooseX::Event role.  This calls all
of the registered listeners on $event with @args.

If you're using coroutines then each listener will get its own thread and
emit will cede before returning.

=head2 our method remove_all_listeners( Str $event )

Removes all listeners for $event

=head2 our method remove_listener( Str $event, CodeRef $listener )

Removes $listener from $event

lib/MooseX/Event/Role.pm  view on Meta::CPAN

=method my method emit_stock( Str $event, Array[Any] *@args )

The standard impelementation of the emit method-- calls the listeners
immediately and in the order they were defined.


=end internal

=begin internal

=method my method emit_coro( Str $event, Array[Any] *@args )

The L<Coro> implementation of the emit method-- calls each of the listeners
in its own thread and emits immediate execution by calling cede before
returning.


=end internal

=head1 SEE ALSO



( run in 0.268 second using v1.01-cache-2.11-cpan-496ff517765 )