Dancer2

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

0.205001  2017-07-11 08:03:21-05:00 America/Chicago

    [ BUG FIXES ]
    * GH #1332: Add check for old version of HTTP::XSCookies (Peter Mottram -
      SysPete)
    * GH #1336: Fix warnings on 5.10 and below. (Sawyer X)
    * GH #1347: Add Perl versions 5.22-5.26 and appveyor to Travis-CI
      configuration (Dave Jacoby)

    [ ENHANCEMENTS ]
    * GH #1281: Use Ref::Util in Core for all reference checks (Mickey 
      Nasriachi)
    * GH #1338: Add message explaining how to run newly-created application
      (Jonathan Cast)

    [ DOCUMENTATION ]
    * GH #1334: Fix prefix example in Cookbook (Abdullah Diab)
    * GH #1335: Add missing word in request->host docs (Glenn Fowler)
    * GH #1337: Fix link in SEE ALSO section of Dancer2::Core::Types (Stefan
      Hornburg - Racke)
    * GH #1341: Clarify plugin documentation (Stefan Hornburg - Racke)

META.json  view on Meta::CPAN

            "MIME::Base64" : "3.13",
            "Module::Pluggable" : "0",
            "Module::Runtime" : "0",
            "Moo" : "2.000000",
            "Moo::Role" : "0",
            "POSIX" : "0",
            "Path::Tiny" : "0",
            "Plack" : "1.0040",
            "Plack::Middleware::FixMissingBodyInRedirect" : "0",
            "Plack::Middleware::RemoveRedundantBody" : "0",
            "Ref::Util" : "0",
            "Role::Tiny" : "2.000000",
            "Safe::Isa" : "0",
            "Sub::Quote" : "0",
            "Template" : "0",
            "Template::Tiny" : "0",
            "Test::Builder" : "0",
            "Test::More" : "0.92",
            "Type::Tiny" : "1.000006",
            "Types::Standard" : "0",
            "URI::Escape" : "0",

META.yml  view on Meta::CPAN

  MIME::Base64: '3.13'
  Module::Pluggable: '0'
  Module::Runtime: '0'
  Moo: '2.000000'
  Moo::Role: '0'
  POSIX: '0'
  Path::Tiny: '0'
  Plack: '1.0040'
  Plack::Middleware::FixMissingBodyInRedirect: '0'
  Plack::Middleware::RemoveRedundantBody: '0'
  Ref::Util: '0'
  Role::Tiny: '2.000000'
  Safe::Isa: '0'
  Sub::Quote: '0'
  Template: '0'
  Template::Tiny: '0'
  Test::Builder: '0'
  Test::More: '0.92'
  Type::Tiny: '1.000006'
  Types::Standard: '0'
  URI::Escape: '0'

Makefile.PL  view on Meta::CPAN

    "MIME::Base64" => "3.13",
    "Module::Pluggable" => 0,
    "Module::Runtime" => 0,
    "Moo" => "2.000000",
    "Moo::Role" => 0,
    "POSIX" => 0,
    "Path::Tiny" => 0,
    "Plack" => "1.0040",
    "Plack::Middleware::FixMissingBodyInRedirect" => 0,
    "Plack::Middleware::RemoveRedundantBody" => 0,
    "Ref::Util" => 0,
    "Role::Tiny" => "2.000000",
    "Safe::Isa" => 0,
    "Sub::Quote" => 0,
    "Template" => 0,
    "Template::Tiny" => 0,
    "Test::Builder" => 0,
    "Test::More" => "0.92",
    "Type::Tiny" => "1.000006",
    "Types::Standard" => 0,
    "URI::Escape" => 0,

Makefile.PL  view on Meta::CPAN

  "Module::Pluggable" => 0,
  "Module::Runtime" => 0,
  "Moo" => "2.000000",
  "Moo::Role" => 0,
  "POSIX" => 0,
  "Path::Tiny" => 0,
  "Plack" => "1.0040",
  "Plack::Middleware::FixMissingBodyInRedirect" => 0,
  "Plack::Middleware::RemoveRedundantBody" => 0,
  "Pod::Simple::SimpleTree" => 0,
  "Ref::Util" => 0,
  "Role::Tiny" => "2.000000",
  "Safe::Isa" => 0,
  "Sub::Quote" => 0,
  "Template" => 0,
  "Template::Tiny" => 0,
  "Test::Builder" => 0,
  "Test::EOL" => 0,
  "Test::Fatal" => 0,
  "Test::More" => "0.92",
  "Type::Tiny" => "1.000006",

cpanfile  view on Meta::CPAN

requires 'MIME::Base64', '3.13'; # 3.13 has the URL safe variants
requires 'Module::Runtime';
requires 'Moo', '2.000000';
requires 'Moo::Role';
requires 'parent';
requires 'Path::Tiny';
requires 'Plack', '1.0040';
requires 'Plack::Middleware::FixMissingBodyInRedirect';
requires 'Plack::Middleware::RemoveRedundantBody';
requires 'POSIX';
requires 'Ref::Util';
requires 'Safe::Isa';
requires 'Sub::Quote';
requires 'Template';
requires 'Template::Tiny';
requires 'Test::Builder';
requires 'Test::More';
requires 'Types::Standard';
requires 'Type::Tiny', '1.000006';
requires 'URI::Escape';
requires 'CLI::Osprey';

lib/Dancer2/Core/App.pm  view on Meta::CPAN

$Dancer2::Core::App::VERSION = '1.1.2';
use Moo;
use Carp               qw<croak carp>;
use Scalar::Util       'blessed';
use List::Util         ();
use Module::Runtime    'is_module_name';
use Safe::Isa;
use Sub::Quote;
use File::Spec;
use Module::Runtime    qw< require_module use_module >;
use Ref::Util          qw< is_ref is_arrayref is_globref is_scalarref is_regexpref >;

use Plack::App::File;
use Plack::Middleware::FixMissingBodyInRedirect;
use Plack::Middleware::Head;
use Plack::Middleware::Conditional;
use Plack::Middleware::ConditionalGET;

use Dancer2::FileUtils 'path';
use Dancer2::Core;
use Dancer2::Core::Cookie;

lib/Dancer2/Core/Cookie.pm  view on Meta::CPAN

package Dancer2::Core::Cookie;
# ABSTRACT: A cookie representing class
$Dancer2::Core::Cookie::VERSION = '1.1.2';
use Moo;
use URI::Escape;
use Dancer2::Core::Types;
use Dancer2::Core::Time;
use Carp 'croak';
use Ref::Util qw< is_arrayref is_hashref >;
use overload '""' => \&_get_value;

BEGIN {
    my $try_xs =
        exists($ENV{PERL_HTTP_XSCOOKIES}) ? !!$ENV{PERL_HTTP_XSCOOKIES} :
        exists($ENV{PERL_ONLY})           ?  !$ENV{PERL_ONLY} :
        1;

    my $use_xs = 0;
    $try_xs and eval {

lib/Dancer2/Core/DSL.pm  view on Meta::CPAN

# ABSTRACT: Dancer2's Domain Specific Language (DSL)

package Dancer2::Core::DSL;
$Dancer2::Core::DSL::VERSION = '1.1.2';
use Moo;
use Carp;
use Module::Runtime 'require_module';
use Ref::Util qw< is_arrayref is_hashref >;
use Dancer2::Core::Hook;
use Dancer2::FileUtils;
use Dancer2::Core::Response::Delayed;

with 'Dancer2::Core::Role::DSL';

sub hook_aliases { +{} }
sub supported_hooks { () }

sub _add_postponed_plugin_hooks {

lib/Dancer2/Core/Error.pm  view on Meta::CPAN

# ABSTRACT: Class representing fatal errors
$Dancer2::Core::Error::VERSION = '1.1.2';
use Moo;
use Carp;
use Dancer2::Core::Types;
use Dancer2::Core::HTTP;
use Data::Dumper;
use Dancer2::FileUtils qw/path open_file/;
use Sub::Quote;
use Module::Runtime 'require_module';
use Ref::Util qw< is_hashref >;
use Clone qw(clone);

has app => (
    is        => 'ro',
    isa       => InstanceOf['Dancer2::Core::App'],
    predicate => 'has_app',
);

has show_stacktrace => (
    is      => 'ro',

lib/Dancer2/Core/Request.pm  view on Meta::CPAN

use strict;
use warnings;
use parent 'Plack::Request';

use Carp;
use Encode;
use URI;
use URI::Escape;
use Safe::Isa;
use Hash::MultiValue;
use Ref::Util qw< is_ref is_arrayref is_hashref is_coderef >;

use Dancer2::Core::Types;
use Dancer2::Core::Request::Upload;
use Dancer2::Core::Cookie;

# add an attribute for each HTTP_* variables
# (HOST is managed manually)
my @http_env_keys = (qw/
    accept_charset
    accept_encoding

lib/Dancer2/Core/Role/SessionFactory.pm  view on Meta::CPAN

use Moo::Role;
with 'Dancer2::Core::Role::Engine';

use Carp 'croak';
use Dancer2::Core::Session;
use Dancer2::Core::Types;
use Digest::SHA 'sha1';
use List::Util 'shuffle';
use MIME::Base64 'encode_base64url';
use Module::Runtime 'require_module';
use Ref::Util qw< is_ref is_arrayref is_hashref >;

sub hook_aliases { +{} }
sub supported_hooks {
    qw/
      engine.session.before_retrieve
      engine.session.after_retrieve

      engine.session.before_create
      engine.session.after_create

lib/Dancer2/Core/Role/Template.pm  view on Meta::CPAN

# ABSTRACT: Role for template engines

package Dancer2::Core::Role::Template;
$Dancer2::Core::Role::Template::VERSION = '1.1.2';
use Dancer2::Core::Types;
use Dancer2::FileUtils 'path';
use Carp 'croak';
use Ref::Util qw< is_ref >;

use Moo::Role;
with 'Dancer2::Core::Role::Engine';

sub hook_aliases {
    {
        before_template_render => 'engine.template.before_render',
        after_template_render  => 'engine.template.after_render',
        before_layout_render   => 'engine.template.before_layout_render',
        after_layout_render    => 'engine.template.after_layout_render',

lib/Dancer2/Core/Route.pm  view on Meta::CPAN

package Dancer2::Core::Route;
# ABSTRACT: Dancer2's route handler
$Dancer2::Core::Route::VERSION = '1.1.2';
use Moo;
use Dancer2::Core::Types;
use Module::Runtime 'use_module';
use Carp 'croak';
use List::Util 'first';
use Scalar::Util 'blessed';
use Ref::Util qw< is_regexpref >;
use Type::Registry;

our ( $REQUEST, $RESPONSE, $RESPONDER, $WRITER, $ERROR_HANDLER );

has name => (
    is        => 'ro',
    isa       => Str,
    predicate => 'has_name',
);

lib/Dancer2/Core/Runner.pm  view on Meta::CPAN

package Dancer2::Core::Runner;
# ABSTRACT: Top-layer class to start a dancer app
$Dancer2::Core::Runner::VERSION = '1.1.2';
use Moo;
use Carp 'croak';
use Module::Runtime 'require_module';
use Dancer2::Core::MIME;
use Dancer2::Core::Types;
use Dancer2::Core::Dispatcher;
use Plack::Builder qw();
use Ref::Util qw< is_ref is_regexpref >;

# Hashref of configurable items for the runner.
# Defaults come from ENV vars. Updated via global triggers
# from app configs.
has config => (
    is      => 'ro',
    isa     => HashRef,
    lazy    => 1,
    builder => '_build_config',
);

lib/Dancer2/Logger/Capture.pm  view on Meta::CPAN


This is a logger class for L<Dancer2> which captures all logs to an object.

Its primary purpose is for testing. Here is an example of a test:

    use strict;
    use warnings;
    use Test::More;
    use Plack::Test;
    use HTTP::Request::Common;
    use Ref::Util qw<is_coderef>;

    {
        package App;
        use Dancer2;

        set log       => 'debug';
        set logger    => 'capture';

        get '/' => sub {
            log(debug => 'this is my debug message');

lib/Dancer2/Manual/Migration.pod  view on Meta::CPAN

L<Dancer2::Logger::Capture> could be used for testing, to capture all
logs to an object.

For example:

    use strict;
    use warnings;
    use Test::More import => ['!pass'];
    use Plack::Test;
    use HTTP::Request::Common;
    use Ref::Util qw<is_coderef>;

    {
        package App;
        use Dancer2;

        set log       => 'debug';
        set logger    => 'capture';

        get '/' => sub {
            debug 'this is my debug message';

lib/Dancer2/Plugin.pm  view on Meta::CPAN

$Dancer2::Plugin::VERSION = '1.1.2';
use strict;
use warnings;

use Moo;
use Carp;
use List::Util qw/ reduce /;
use Module::Runtime 'require_module';
use Attribute::Handlers;
use Scalar::Util;
use Ref::Util qw<is_arrayref is_coderef>;

our $CUR_PLUGIN;

extends 'Exporter::Tiny';

with 'Dancer2::Core::Role::Hookable';

has app => (
    is       => 'ro',
    weak_ref => 1,

lib/Dancer2/Template/Implementation/ForkedTiny.pm  view on Meta::CPAN

package Dancer2::Template::Implementation::ForkedTiny;
$Dancer2::Template::Implementation::ForkedTiny::VERSION = '1.1.2';
# ABSTRACT: Dancer2 own implementation of Template::Tiny

use 5.00503;
use strict;
no warnings;
use Ref::Util qw<is_arrayref is_coderef is_plain_hashref>;

# Evaluatable expression
my $EXPR = qr/ [a-z_][\w.]* /xs;

sub new {
    my $self = bless {
        start_tag => '[%',
        end_tag   => '%]',
        @_[ 1 .. $#_ ]
      },

lib/Dancer2/Template/Simple.pm  view on Meta::CPAN

package Dancer2::Template::Simple;
# ABSTRACT: Pure Perl 5 template engine for Dancer2
$Dancer2::Template::Simple::VERSION = '1.1.2';
use Moo;
use Dancer2::FileUtils 'read_file_content';
use Ref::Util qw<is_arrayref is_coderef is_plain_hashref>;

with 'Dancer2::Core::Role::Template';

has start_tag => (
    is      => 'rw',
    default => sub {'<%'},
);

has stop_tag => (
    is      => 'rw',

lib/Dancer2/Test.pm  view on Meta::CPAN

$Dancer2::Test::VERSION = '1.1.2';
use strict;
use warnings;

use Carp qw<carp croak>;
use Test::More;
use Test::Builder;
use URI::Escape;
use Data::Dumper;
use File::Temp;
use Ref::Util qw<is_arrayref>;

use parent 'Exporter';
our @EXPORT = qw(
  dancer_response

  response_content_is
  response_content_isnt
  response_content_is_deeply
  response_content_like
  response_content_unlike

share/skel/t/002_index_route.t  view on Meta::CPAN

use strict;
use warnings;

use [d2% appname %2d];
use Test::More tests => 2;
use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

my $app = [d2% appname %2d]->to_app;
ok( is_coderef($app), 'Got app' );

my $test = Plack::Test->create($app);
my $res  = $test->request( GET '/' );

ok( $res->is_success, '[GET /] successful' );

t/00-report-prereqs.dd  view on Meta::CPAN

                                      'MIME::Base64' => '3.13',
                                      'Module::Pluggable' => '0',
                                      'Module::Runtime' => '0',
                                      'Moo' => '2.000000',
                                      'Moo::Role' => '0',
                                      'POSIX' => '0',
                                      'Path::Tiny' => '0',
                                      'Plack' => '1.0040',
                                      'Plack::Middleware::FixMissingBodyInRedirect' => '0',
                                      'Plack::Middleware::RemoveRedundantBody' => '0',
                                      'Ref::Util' => '0',
                                      'Role::Tiny' => '2.000000',
                                      'Safe::Isa' => '0',
                                      'Sub::Quote' => '0',
                                      'Template' => '0',
                                      'Template::Tiny' => '0',
                                      'Test::Builder' => '0',
                                      'Test::More' => '0.92',
                                      'Type::Tiny' => '1.000006',
                                      'Types::Standard' => '0',
                                      'URI::Escape' => '0',

t/charset_server.t  view on Meta::CPAN

use Test::More;
use strict;
use warnings;
use Encode;
use utf8;

use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

{
    package App;
    use Dancer2;

    get '/name/:name' => sub {
        "Your name: " . params->{name};
    };

    post '/name' => sub {

t/classes/Dancer2-Core-Route/match.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Test::Fatal;
use Dancer2::Core::Request;
use Dancer2::Core::Route;
use Capture::Tiny 0.12 'capture_stderr';
use Ref::Util qw<is_regexpref>;
use lib 't/lib';

my @tests = (
    [   [ 'get', '/', sub {11} ], '/', [ {}, 11 ] ],
    [   [ 'get', '/', sub {11} ],
        '/failure',
        [ undef, 11 ]
    ],

    # token tests

t/dancer-test.t  view on Meta::CPAN

# who test the tester? We do!

use strict;
use warnings;
use File::Spec;
use File::Basename qw/dirname/;
use Ref::Util qw<is_arrayref>;

BEGIN {
    # Disable route handlers so we can actually test route_exists
    # and route_doesnt_exist. Use config that disables default route handlers.
    $ENV{DANCER_CONFDIR} = File::Spec->catdir(dirname(__FILE__), 'dancer-test');
}

use Test::More tests => 50;

use Dancer2;

t/dispatcher.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More import => ['!pass'];
use Carp 'croak';
use Ref::Util qw<is_regexpref>;

use Dancer2;
use Dancer2::Core::App;
use Dancer2::Core::Route;
use Dancer2::Core::Dispatcher;
use Dancer2::Core::Hook;
use Dancer2::Core::Response;

set logger => 'Null';

t/dsl/error_template.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

{
    package CustomError;

    use Dancer2;

    set views      => 't/corpus/pretty';
    set public_dir => 't/corpus/pretty_public';

    get '/error' => sub {

t/dsl/halt.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

subtest 'halt within routes' => sub {
    {

        package App;
        use Dancer2;

        get '/' => sub { 'hello' };
        get '/halt' => sub {
            response_header 'X-Foo' => 'foo';

t/dsl/halt_with_param.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

subtest 'halt with parameter within routes' => sub {
    {

        package App;
        use Dancer2;

        get '/' => sub { 'hello' };
        get '/halt' => sub {
            response_header 'X-Foo' => 'foo';

t/dsl/pass.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Plack::Test;
use HTTP::Request::Common;
use Ref::Util qw<is_coderef>;

subtest 'pass within routes' => sub {
    {

        package App;
        use Dancer2;

        get '/' => sub { 'hello' };
        get '/**' => sub {
            response_header 'X-Pass' => 'pass';



( run in 0.478 second using v1.01-cache-2.11-cpan-a5abf4f5562 )