Venus::Role::Subscribable - Subscribable Role
Subscribable Role for Perl 5
package Example; use Venus::Class; with 'Venus::Role::Subscribable'; sub execute { $_[0]->publish('on.execute'); } package main; my $example = Example->new; # $example->subscribe('on.execute', sub{...}); # bless(..., 'Example') # $example->publish('on.execute'); # bless(..., 'Example')
This package provides a mechanism for publishing and subscribing to events.
This package provides the following methods:
publish(Str $name, Any @args) (Self)
The publish method notifies all subscribers for a given event and returns the invocant.
Since 1.75
1.75
# given: synopsis package main; $example = $example->publish; # bless(..., 'Example')
# given: synopsis package main; $example = $example->publish('on.execute'); # bless(..., 'Example')
# given: synopsis package main; $example->subscribe('on.execute', sub {$example->{emitted} = [@_]}); $example = $example->publish('on.execute'); # bless(..., 'Example')
# given: synopsis package main; $example->subscribe('on.execute', sub {$example->{emitted} = [@_]}); $example = $example->publish('on.execute', [1..4]); # bless(..., 'Example')
subscribe(Str $name, CodeRef $code) (Self)
The subscribe method registers a subscribers (i.e. callbacks) for a given event, and returns the invocant.
# given: synopsis package main; $example = $example->subscribe('on.execute', sub {$example->{emitted} = [@_]}); # bless(..., 'Example')
# given: synopsis package main; $example = $example->subscribe('on.execute', sub {$example->{emitted_1} = [@_]}); # bless(..., 'Example') $example = $example->subscribe('on.execute', sub {$example->{emitted_2} = [@_]}); # bless(..., 'Example') $example = $example->subscribe('on.execute', sub {$example->{emitted_3} = [@_]}); # bless(..., 'Example') # $example->publish('on.execute'); # bless(..., 'Example')
subscribers(Str $name) (Int)
The subscribers method returns the number of subscribers (i.e. callbacks) for a given event.
# given: synopsis package main; $example = $example->subscribers; # 0
# given: synopsis package main; $example = $example->subscribers('on.execute'); # 0
# given: synopsis package main; $example = $example->subscribe('on.execute', sub {$example->{emitted_1} = [@_]}); $example = $example->subscribe('on.execute', sub {$example->{emitted_2} = [@_]}); $example = $example->subscribe('on.execute', sub {$example->{emitted_3} = [@_]}); $example = $example->subscribers('on.execute'); # 3
unsubscribe(Str $name, CodeRef $code) (Self)
The unsubscribe method deregisters all subscribers (i.e. callbacks) for a given event, or a specific callback if provided, and returns the invocant.
# given: synopsis package main; $example = $example->unsubscribe; # bless(..., 'Example')
# given: synopsis package main; $example = $example->unsubscribe('on.execute'); # bless(..., 'Example')
# given: synopsis package main; $example = $example->subscribe('on.execute', sub {$example->{emitted_1} = [@_]}); $example = $example->subscribe('on.execute', sub {$example->{emitted_2} = [@_]}); $example = $example->subscribe('on.execute', sub {$example->{emitted_3} = [@_]}); $example = $example->unsubscribe('on.execute'); # bless(..., 'Example')
# given: synopsis package main; my $execute = sub {$example->{execute} = [@_]}; $example = $example->subscribe('on.execute', $execute); $example = $example->unsubscribe('on.execute', $execute); # bless(..., 'Example')
To install Venus, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Venus
CPAN shell
perl -MCPAN -e shell install Venus
For more information on module installation, please visit the detailed CPAN module installation guide.