Bartosz Jarzyna

NAME

Kelp::Module::Symbiosis - manage an entire ecosystem of Plack organisms under Kelp

SYNOPSIS

        # in configuration file
        modules => [qw/Symbiosis SomeSymbioticModule/],
        modules_init => {
                Symbiosis => {
                        automount => 0, # boolean, defaults to 1
                },
        },

        # in kelp application
        $kelp->symbiosis->mount('/app-path' => $kelp); # only required if automount is 0
        $kelp->symbiosis->mount('/other-path' => $kelp->some_symbiotic_module);

        # in psgi script
        my $app = MyApp->new();
        $app->run_all; # instead of run

DESCRIPTION

This module is an attempt to standardize the way many standalone Plack applications should be ran alongside the Kelp framework. The intended use is to introduce new "organisms" into symbiotic interaction by creating Kelp modules that are then attached onto Kelp. Then, the run_all should be invoked in place of Kelp's run, which will construct a Plack::App::URLMap and return it as an application.

METHODS

mount

        sig: mount($self, $path, $app)

Adds a new $app to the ecosystem under $path.

run_all

        sig: run_all($self)

Constructs and returns a new Plack::App::URLMap with all the mounted modules and Kelp itself.

mounted

        sig: mounted($self)

Returns a hashref containing a list of mounted modules, keyed with their specified mount paths.

METHODS INTRODUCED TO KELP

symbiosis

Returns an instance of this class.

run_all

Shortcut method, same as symbiosis->run_all().

CONFIGURATION

automount

Whether to automatically call mount for the Kelp instance, which will be mounted to root path /. Defaults to 1.

If you set this to 0 you will have to run something like $kelp->symbiosis->mount($mount_path, $kelp); in Kelp's build method. This will allow other paths than root path for the base Kelp application, if needed.

REQUIREMENTS FOR MODULES

The sole requirement for a module to be mounted into Symbiosis is its ability to run(). A module also needs to be a blessed reference, of course.

The run method should return a psgi application ready to be ran by the Server, wrapped in all the needed middlewares. See Kelp::Module::Symbiosis::Base for a preferred base class for these modules.

SEE ALSO

Kelp::Module::Symbiosis::Base, a base for symbiotic modules
Kelp::Module::Websocket::AnyEvent, a reference symbiotic module
Plack::App::URLMap, Plack URL mapper application

AUTHOR

Bartosz Jarzyna, <brtastic.dev@gmail.com>

COPYRIGHT AND LICENSE

Copyright (C) 2020 by Bartosz Jarzyna

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.