NAME
Mojo::Base::Role::PromiseClass - Add promise_class attribute to Mojo class
VERSION
version 0.009
SYNOPSIS
package MyRole;
use Mojo::Base -role;
with 'Mojo::Base::Role::PromiseClass';
sub give_me_a_promise {
my $p = $_[0]->promise_class->new;
#
# ... do stuff to $p
#
return $p;
}
Elsewhere
# mix MyRole in to something
$object = MyThing->new(...)->with_roles('MyRole');
# get promise_class, add features
$object->promise_class; # -> Mojo::Promise
$object->promise_roles('+Repeat'); # -> $object
$object->promise_class; # -> Mojo::Promise__WITH__...Repeat
# use them
$object->give_me_a_promise->repeat(sub {...} );
DESCRIPTION
Mojo::Base::Role::PromiseClass is a role that adds a promise_class attribute to a given class.
This role only provides methods to access and manipulate the promise_class; it does not, by itself, have any provision for the class being actually used anywhere or for any particular purpose.
ATTRIBUTES
Mojo::Base::Role::PromiseClass implements the following attributes.
promise_class
$pclass = $object->promise_class;
$object = $object->promise_class('Mojo::Promise');
Get or set the $object
's preferred promise class.
METHODS
Mojo::Base::Role::PromiseClass supplies the following methods:
promise_roles
$object->promise_roles(@roles);
This is a shortcut to add the specified @roles
to the promise class, returning the original object for method chains, equivalent to
$object->promise_class($object->promise_class->with_roles(@roles));
For roles following the naming scheme Mojo::Promise::Role::RoleName
you can use the shorthand +RoleName
.
Note that using this method is slightly safer than setting "promise_class" directly in that if the object's existing promise_class is derived from Mojo::Promise (which it will be by default) then you won't be changing that, which is typically what you want.
SEE ALSO
Mojo::Promise, Mojolicious, Mojolicious::Guides, https://mojolicious.org.
AUTHOR
Roger Crew <wrog@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2020 by Roger Crew.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)