Nephia

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

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 )