Evo::Manager - Perl Evo manager
version 0.015
use Evo::Base -strict; use Evo::Manager; use Evo::Wrappers 'w_dsl_init'; my $mngr = Evo::Manager->new; my $way = $mngr->build_way; my $train = $mngr->build_train(way => $way); my $curry = $mngr->curry_wrappers(w_dsl_init); $curry->(sub { say keys $mngr->dsl_stash->%* })->($mngr->build_train); my @args = qw(1 2); my $stash = {foo => 'bar'}; $mngr->dsl_call($stash, @args, sub { say $mngr->dsl_stash('foo'); say @_ }); # see more example in Evo.pm docs
Your can consider a manager as a builder + organazer. That was made to make a usage simple. This class subclasses Railway::Builder and provide a glue to make features working together with a less typing.
A default curry function, bassed to Evo::Way instances. Dont't make this as an attribute while subclassing, unless you are sure what you want
my $context = $mngr->dsl_check_stash; my $exists = $mngr->dsl_check_stash('key');
Safely check a dsl_stash context without throwing an extention.
Work with dsl_stash context
# get all context my $dsl_stash = $mngr->dsl_stash; # get value by key my $val = $mngr->dsl_stash('key'); # set value once $mngr->dsl_stash('new' => 'val')->dsl_stash('new');
Thows an error when is called outside dsl. Throws an error if key doesn't exist Throws an error on attempts to override existing key. You can also use "dsl_check_stash" or as hash referrence, but in most cases if you get an error, you're doing something wrong.
Invoke a callback with dsl. First argument is "dsl_stash" context, last is a code referrence, others will be passed as arguments
$mngr->dsl_call({}, 1, 2, sub { }); $mngr->dsl_call({foo => 2}, sub { say $mngr->dsl_stash('foo') });
my $wrapped = $mngr->run_wrappers(@wrappers, $cb);
Run wrappers for a callback in reverse order. Wrappers are higher-order functions. See an examples in synopsis or "w_dsl_init" in Evo::Wrappers Or wait for an article
Returns a last argument, if it is the only one and no wrappers provided
my $curry = $mngr->curry_wrappers(@wrappers); my $curried = $curry->($cb); $curried->(); my @extra_wrappers; $curry->(@extra_wrappers, $cb)->();
Creates a curry function for wrappers, that invokes "run_wrappers" with given list + passed arguments.
my $single = Evo::Manager->singleton;
A depth of recurcive L</"dsl_call"> or L</"dsl_extend"> invocations by instance. C<0> means we are not in the dsl
# change order and flatten a flow $mngr->asap( sub { say 1; $mngr->asap(sub { say 3 }); }, sub { say 2 } );
Run code as soon as possible but avoid recursions with the "run away from recursion"
Curry isn't a real currying function, it's a partial function. But I have no idea how to name it. So it's a subject to change in the future (and all relayed attributes)
=build_way
Builds a Evo::Way instance passing a result of invocation "default_curry" to it as a "curry" in Evo::Way attribute.
alexbyk.com
This software is copyright (c) 2015 by alexbyk.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Evo, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Evo
CPAN shell
perl -MCPAN -e shell install Evo
For more information on module installation, please visit the detailed CPAN module installation guide.