Nephia
view release on metacpan or search on metacpan
lib/Nephia/Response.pm
lib/Nephia/Setup.pm
lib/Nephia/Setup/Plugin.pm
lib/Nephia/Setup/Plugin/Minimal.pm
t/Util.pm
t/model/000_compile.t
t/model/001_request.t
t/model/002_chain.t
t/model/003_context.t
t/model/004_core.t
t/model/005_incognito.t
t/model/008_meta_template.t
t/model/010_plugin.t
t/model/011_redirect.t
t/model/021_call.t
t/model/050_setup_core.t
t/model/051_setup_plugin.t
t/psgi/010_core.t
t/psgi/010_incognito.t
t/psgi/021_cookie.t
t/psgi/022_call.t
t/psgi/050_plugin_hook.t
t/psgi/tmpl/foo.html
META.yml
MANIFEST
lib/Nephia.pm view on Meta::CPAN
use 5.008005;
use strict;
use warnings;
use Nephia::Incognito;
our $VERSION = "0.87";
sub import {
my ($class, %opts) = @_;
my $caller = caller;
Nephia::Incognito->incognito(%opts, caller => $caller);
}
sub call {
my ($class, $codepath) = @_;
my $caller = caller;
Nephia::Incognito->unmask($caller)->call($codepath);
}
sub run {
my $caller = caller;
lib/Nephia/Incognito.pm view on Meta::CPAN
package Nephia::Incognito;
use strict;
use warnings;
use Nephia::Core;
our $SPACE = {};
sub incognito {
my ($class, %opts) = @_;
$opts{caller} ||= caller();
my $instance = Nephia::Core->new(%opts);
$instance->export_dsl;
my $name = $class->_incognito_namespace($instance->caller_class);
$SPACE->{$name} = $instance;
return $name;
}
sub unmask {
my $class = shift;
my $appname = shift || caller();
my $name = $class->_incognito_namespace($appname);
return $SPACE->{$name};
}
sub _incognito_namespace {
my ($class, $appname) = @_;
'Nephia::Incognito::'.$appname;
}
1;
__END__
=encoding utf-8
=head1 NAME
Nephia::Incognito - A mechanism that conceal a Nephia instance into namespace
=head1 DESCRIPTION
A concealer for Nephia.
=head1 SYNOPSIS
Nephia::Incognito->incognito( caller => 'MyApp', plugins => [...], app => sub {...} );
my $nephia_instance = Nephia::Incognito->unmask('MyApp');
$nephia_instance->run;
=head1 METHODS
=head2 incognito
Nephia::Incognito->incognito( %opts );
Conceal a Nephia instance into namespace. See L<Nephia::Core> about option.
=head2 unmask
my $instance = Nephia::Incognito->unmask( $appname );
Returns a Nephia instance that has a specified appname.
=head1 AUTHOR
t/model/005_incognito.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use Nephia::Incognito;
use t::Util 'mock_env';
is(
Nephia::Incognito->_incognito_namespace('Foo'),
'Nephia::Incognito::Foo',
'incognito namespace'
);
Nephia::Incognito->incognito(app => sub { [200, [], 'Foo'] });
Nephia::Incognito->incognito(caller => 'Funny', app => sub { [200, [], 'Bar'] });
my $x = Nephia::Incognito->unmask;
my $y = Nephia::Incognito->unmask('Funny');
isa_ok $x, 'Nephia::Core';
isa_ok $y, 'Nephia::Core';
is_deeply( $x->run->(mock_env), [200, [], ['Foo']] );
is_deeply( $y->run->(mock_env), [200, [], ['Bar']] );
t/psgi/010_incognito.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use Nephia::Incognito;
use Plack::Test;
use HTTP::Request::Common;
Nephia::Incognito->incognito(
app => sub {
my $name = param('name') || 'tonkichi';
[200,[],"Hello, $name"];
},
);
my $v = Nephia::Incognito->unmask;
my $app = $v->run;
subtest default => sub {
( run in 2.580 seconds using v1.01-cache-2.11-cpan-e93a5daba3e )