NAME
Evo::Manager - Perl Evo manager
VERSION
version 0.0153
SYNOPSIS
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
DESCRIPTION
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.
METHODS
default_curry
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
dsl_check_stash
my $context = $mngr->dsl_check_stash;
my $exists = $mngr->dsl_check_stash('key');
Safely check a dsl_stash context without throwing an extention.
dsl_stash
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.
dsl_call
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') });
run_wrappers
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
curry_wrappers
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.
singleton Singleton - the same instance will be returned for every invocation
my $single = Evo::Manager->singleton;
dsl_depth
A depth of recurcive L</"dsl_call"> or L</"dsl_extend"> invocations by
instance. C<0> means we are not in the dsl
asap
# 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"
ATTENTION
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.
AUTHOR
alexbyk.com
COPYRIGHT AND LICENSE
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.