NAME

App::Environ - Simple environment to build applications using service locator pattern

SYNOPSIS

use App::Environ;

App::Environ->register( __PACKAGE__,
  initialize   => sub { ... },
  reload       => sub { ... },
  'finalize:r' => sub { ... },
);

App::Environ->send_event( 'initialize', qw( foo bar ) );
App::Environ->send_event('reload');
App::Environ->send_event('finalize:r');

App::Environ->send_event( 'initialize', qw( foo bar ), sub { ... } );
App::Environ->send_event( 'reload', sub { ... } );
App::Environ->send_event( 'finalize:r', sub { ... } );

DESCRIPTION

App::Environ is the simple environment to build applications using service locator pattern. Allows register different application components that provide common resources.

METHODS

register( $class, \%handlers )

The method registers handlers for specified events. When some event have been sent, corresponding to this event handlers will be processed in order in which they was registered. If you want that event handlers have been processed in reverse order, add postfix :r to event name. When event handler is called, arguments that have been specified in send_event method are passed to it. If in the last argument is passed the callback, the handler must be processed in asynchronous mode using available event loop. If some error occurred in asynchronous mode, the error message must be passed to the callback in the first argument.

App::Environ->register( __PACKAGE__,
  initialize => sub {
    my $cb   = pop if ref( $_[-1] ) eq 'CODE';
    my @args = @_;

    if ( defined $cb ) {
      # asynchronous handling...
    }
    else {
      # synchronous handling...
    }
  },
);

send_event( $event [, @args ] [, $cb->( [ $err ] ) ] )

Sends specified event to App::Environ. All handlers registered for this event will be processed. Arguments specified in send_event method will be passed to event handlers in the same order without modifications.

App::Environ->send_event( 'initialize', qw( foo bar ) );

App::Environ->send_event( 'initialize', qw( foo bar ),
  sub {
    my $err = shift;

    if ( defined $err ) {
      # error handling...

      return;
    }

    # success handling...
  }
);

SEE ALSO

App::Environ::Config

Also see examples from the package to better understand the concept.

AUTHOR

Eugene Ponizovsky, <ponizovsky@gmail.com>

COPYRIGHT AND LICENSE

Copyright (c) 2016, Eugene Ponizovsky, <ponizovsky@gmail.com>. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.