[libdancer2-perl] 01/05: Imported Upstream version 0.140001+dfsg
gregor herrmann
gregoa at debian.org
Sat May 3 12:45:23 UTC 2014
This is an automated email from the git hooks/post-receive script.
gregoa pushed a commit to branch master
in repository libdancer2-perl.
commit 6a62b3e8d51fdc928080d948b629104d38a12c5e
Author: gregor herrmann <gregoa at debian.org>
Date: Sat May 3 14:21:24 2014 +0200
Imported Upstream version 0.140001+dfsg
---
Build.PL | 21 +-
Changes | 41 +++
LICENSE | 6 +-
MANIFEST | 31 ++-
META.json | 160 +++++------
META.yml | 155 +++++------
Makefile.PL | 21 +-
README.md | 4 +-
lib/Dancer2.pm | 26 +-
lib/Dancer2/CLI.pm | 9 +-
lib/Dancer2/CLI/Command/gen.pm | 9 +-
lib/Dancer2/CLI/Command/version.pm | 10 +-
lib/Dancer2/Config.pod | 21 +-
lib/Dancer2/Cookbook.pod | 8 +-
lib/Dancer2/Core.pm | 9 +-
lib/Dancer2/Core/App.pm | 231 +++++++++++++---
lib/Dancer2/Core/Context.pm | 9 +-
lib/Dancer2/Core/Cookie.pm | 11 +-
lib/Dancer2/Core/DSL.pm | 9 +-
lib/Dancer2/Core/Dispatcher.pm | 28 +-
lib/Dancer2/Core/Error.pm | 11 +-
lib/Dancer2/Core/Factory.pm | 11 +-
lib/Dancer2/Core/HTTP.pm | 9 +-
lib/Dancer2/Core/Hook.pm | 10 +-
lib/Dancer2/Core/MIME.pm | 9 +-
lib/Dancer2/Core/Request.pm | 76 +++---
lib/Dancer2/Core/Request/Upload.pm | 9 +-
lib/Dancer2/Core/Response.pm | 10 +-
.../Core/Role/{Config.pm => ConfigReader.pm} | 275 +++----------------
lib/Dancer2/Core/Role/DSL.pm | 11 +-
lib/Dancer2/Core/Role/Engine.pm | 11 +-
lib/Dancer2/Core/Role/Handler.pm | 11 +-
lib/Dancer2/Core/Role/Headers.pm | 9 +-
lib/Dancer2/Core/Role/Hookable.pm | 11 +-
lib/Dancer2/Core/Role/Logger.pm | 16 +-
lib/Dancer2/Core/Role/Serializer.pm | 21 +-
lib/Dancer2/Core/Role/Server.pm | 191 -------------
lib/Dancer2/Core/Role/SessionFactory.pm | 9 +-
lib/Dancer2/Core/Role/SessionFactory/File.pm | 9 +-
lib/Dancer2/Core/Role/StandardResponses.pm | 11 +-
lib/Dancer2/Core/Role/Template.pm | 9 +-
lib/Dancer2/Core/Route.pm | 9 +-
lib/Dancer2/Core/Runner.pm | 300 ++++++++++++---------
lib/Dancer2/Core/Server/PSGI.pm | 60 -----
lib/Dancer2/Core/Server/Standalone.pm | 125 ---------
lib/Dancer2/Core/Session.pm | 9 +-
lib/Dancer2/Core/Time.pm | 9 +-
lib/Dancer2/Core/Types.pm | 9 +-
lib/Dancer2/FileUtils.pm | 9 +-
lib/Dancer2/Handler/AutoPage.pm | 11 +-
lib/Dancer2/Handler/File.pm | 11 +-
lib/Dancer2/Logger/Capture.pm | 11 +-
lib/Dancer2/Logger/Capture/Trap.pm | 11 +-
lib/Dancer2/Logger/Console.pm | 12 +-
lib/Dancer2/Logger/Diag.pm | 12 +-
lib/Dancer2/Logger/File.pm | 11 +-
lib/Dancer2/Logger/Note.pm | 12 +-
lib/Dancer2/Logger/Null.pm | 11 +-
lib/Dancer2/Manual.pod | 8 +-
lib/Dancer2/Plugin.pm | 9 +-
lib/Dancer2/Plugin/Ajax.pm | 9 +-
lib/Dancer2/Plugins.pod | 6 +-
lib/Dancer2/Serializer/Dumper.pm | 9 +-
lib/Dancer2/Serializer/JSON.pm | 11 +-
lib/Dancer2/Serializer/YAML.pm | 18 +-
lib/Dancer2/Session/Simple.pm | 11 +-
lib/Dancer2/Session/YAML.pm | 15 +-
lib/Dancer2/Template/Implementation/ForkedTiny.pm | 9 +-
lib/Dancer2/Template/Simple.pm | 11 +-
lib/Dancer2/Template/TemplateToolkit.pm | 9 +-
lib/Dancer2/Template/Tiny.pm | 19 +-
lib/Dancer2/Test.pm | 11 +-
lib/Dancer2/Tutorial.pod | 6 +-
script/dancer2 | 4 +-
t/00-compile.t | 38 +--
t/00-report-prereqs.t | 6 +-
t/ajax_plugin.t | 2 +-
t/any.t | 2 +-
t/auto_page.t | 3 +-
t/charset_server.t | 3 +-
t/config.t | 15 +-
t/context.t | 2 +-
t/context_trigger.t | 4 +-
t/custom_dsl.t | 2 +-
t/dancer-test.t | 19 +-
t/deserialize.t | 101 ++++---
t/dsl.t | 2 +-
t/dsl/halt.t | 4 +-
t/error.t | 6 +-
t/error_template.t | 2 +-
t/forward.t | 2 +-
t/forward_before_hook.t | 2 +-
t/forward_test_tcp.t | 13 +-
t/handler_file.t | 2 +-
t/hooks.t | 3 +-
t/http_methods.t | 8 +-
t/lib/FooPlugin.pm | 2 +-
t/plugin_import.t | 2 +-
t/plugin_multiple_apps.t | 2 +-
t/plugin_syntax.t | 8 +-
t/redirect.t | 20 +-
t/release-distmeta.t | 5 +-
t/release-pod-syntax.t | 5 +-
t/request.t | 12 +-
t/roles/server.t | 37 ---
t/runner.t | 17 +-
t/serializer.t | 2 +-
t/server.t | 30 ---
t/server_standalone.t | 3 +-
t/session_config.t | 3 +-
t/session_engines.t | 3 +-
t/session_forward.t | 3 +-
t/session_lifecycle.t | 3 +-
t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml | 2 +
t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml | 2 +
t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml | 2 +
t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml | 2 +
t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml | 2 +
t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml | 2 +
t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml | 2 +
t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml | 2 +
t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml | 2 +
t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml | 2 +
t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml | 2 +
t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml | 2 +
t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml | 2 +
t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml | 2 +
t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml | 2 +
t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml | 2 +
t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml | 2 +
t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml | 2 +
t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml | 2 +
t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml | 2 +
t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml | 2 +
t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml | 2 +
t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml | 2 +
t/shared_engines.t | 3 +-
t/splat.t | 2 +-
t/template.t | 2 +-
t/template_default_tokens.t | 2 +-
t/template_name.t | 2 +-
t/uri_for.t | 2 +-
t/vars.t | 2 +-
143 files changed, 1200 insertions(+), 1614 deletions(-)
diff --git a/Build.PL b/Build.PL
index 8ac75b6..945f08a 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,4 +1,5 @@
+# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v5.015.
use strict;
use warnings;
@@ -19,7 +20,7 @@ my %module_build_args = (
"Dancer Core Developers"
],
"dist_name" => "Dancer2",
- "dist_version" => "0.12",
+ "dist_version" => "0.140001",
"license" => "perl",
"module_name" => "Dancer2",
"recommends" => {
@@ -27,7 +28,6 @@ my %module_build_args = (
"Crypt::URandom" => 0,
"JSON::XS" => 0,
"Math::Random::ISAAC::XS" => 0,
- "Plack::Request" => 0,
"Pod::Simple::Search" => 0,
"Pod::Simple::SimpleTree" => 0,
"Scope::Upper" => 0,
@@ -58,7 +58,7 @@ my %module_build_args = (
"HTTP::Body" => 0,
"HTTP::Date" => 0,
"HTTP::Headers" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
+ "HTTP::Server::PSGI" => 0,
"Hash::Merge::Simple" => 0,
"IO::File" => 0,
"JSON" => 0,
@@ -71,7 +71,8 @@ my %module_build_args = (
"MooX::Types::MooseLike" => "0.16",
"MooX::Types::MooseLike::Base" => 0,
"POSIX" => 0,
- "Plack::Request" => 0,
+ "Plack" => "1.0016",
+ "Plack::Builder" => 0,
"Pod::Simple::Search" => 0,
"Pod::Simple::SimpleTree" => 0,
"Return::MultiLevel" => 0,
@@ -83,10 +84,10 @@ my %module_build_args = (
"Test::More" => "0.92",
"URI" => 0,
"URI::Escape" => 0,
- "YAML::Any" => 0,
+ "YAML" => 0,
"overload" => 0,
"parent" => 0,
- "perl" => "5.00503",
+ "perl" => "5.006",
"strict" => 0,
"warnings" => 0
},
@@ -99,12 +100,12 @@ my %module_build_args = (
"test_requires" => {
"Capture::Tiny" => "0.12",
"ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
"File::Temp" => "0.22",
"FindBin" => 0,
"HTTP::Body" => 0,
"HTTP::Request" => 0,
"HTTP::Request::Common" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
"IO::Handle" => 0,
"IPC::Open3" => 0,
"LWP::Protocol::PSGI" => "0.06",
@@ -115,8 +116,8 @@ my %module_build_args = (
"Test::Script" => 0,
"Test::TCP" => "1.13",
"YAML" => 0,
- "YAML::Any" => 0,
"lib" => 0,
+ "perl" => "5.006",
"utf8" => 0,
"vars" => 0
}
@@ -126,12 +127,12 @@ my %module_build_args = (
my %fallback_build_requires = (
"Capture::Tiny" => "0.12",
"ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
"File::Temp" => "0.22",
"FindBin" => 0,
"HTTP::Body" => 0,
"HTTP::Request" => 0,
"HTTP::Request::Common" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
"IO::Handle" => 0,
"IPC::Open3" => 0,
"LWP::Protocol::PSGI" => "0.06",
@@ -143,8 +144,8 @@ my %fallback_build_requires = (
"Test::Script" => 0,
"Test::TCP" => "1.13",
"YAML" => 0,
- "YAML::Any" => 0,
"lib" => 0,
+ "perl" => "5.006",
"utf8" => 0,
"vars" => 0
);
diff --git a/Changes b/Changes
index 4ed29a0..c7c7d95 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,44 @@
+0.140001 2014-05-01 10:49:25CEST+0200 Europe/Amsterdam
+
+ [ BUG FIXES ]
+ * Bugfix for extracting multiple cookies within a request.
+ (Cymon, Russell Jenkins)
+ * Require minimum version of Plack to make sure we can add the Head
+ middleware. Not exactly a bug, but not a feature. (Sawyer X)
+
+ [ DOCUMENTATION ]
+ * Correct reference to HTTP::Server::Simple::PSGI. (Russell Jenkins)
+
+0.140000 2014-04-28 23:14:31CEST+0200 Europe/Amsterdam
+
+ [ ENHANCEMENTS ]
+ * Replace Config role with better ConfigReader role.
+ (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+ * Move App-related attributes (engines) to App instead of config role.
+ (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+ * Untangle Runner-Server (removing Server entirely).
+ (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+ * Replace HTTP::Server::Simple::PSGI with HTTP::Server::PSGI.
+ (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+ * GH #527: Build request cookie objects from request headers, not env.
+ (Russell Jenkins)
+ * GH #569: Transform cookie using the HTTP_COOKIE header, per PSGI spec.
+ (Russell Jenkins)
+ * GH #559, #544: Use Plack middleware for HEAD request content removal.
+ (Russell Jenkins)
+ * GH #513, #483: Deserialize body content for DELETE requests.
+ (Russell Jenkins, Yanick Champoux, Sawyer X)
+
+0.13 2014-04-13 19:19:44CEST+0200 Europe/Amsterdam
+
+ [ ENHANCEMENTS ]
+ * GH #562: Change YAML::Any to YAML (Steven Humphrey, Russell Jenkins).
+
+ [ BUG FIXES ]
+ * GH #524: Double encoding for YAML sessions.
+ * GH #557: Switch to using YAML::Old.
+ * GH #548: Deserializer test failure.
+
0.12 2014-04-07 22:42:12 Europe/Amsterdam
[ ENHANCEMENTS ]
diff --git a/LICENSE b/LICENSE
index 705ca7d..be21fc2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
-This software is Copyright (c) 2013 by Alexis Sukrieh.
+This software is Copyright (c) 2014 by Alexis Sukrieh.
This is free software, licensed under:
@@ -272,7 +272,7 @@ That's all there is to it!
--- The Artistic License 1.0 ---
-This software is Copyright (c) 2013 by Alexis Sukrieh.
+This software is Copyright (c) 2014 by Alexis Sukrieh.
This is free software, licensed under:
diff --git a/MANIFEST b/MANIFEST
index 5f28c2d..ea5891f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.015.
AUTHORS
Build.PL
Changes
@@ -28,7 +29,7 @@ lib/Dancer2/Core/MIME.pm
lib/Dancer2/Core/Request.pm
lib/Dancer2/Core/Request/Upload.pm
lib/Dancer2/Core/Response.pm
-lib/Dancer2/Core/Role/Config.pm
+lib/Dancer2/Core/Role/ConfigReader.pm
lib/Dancer2/Core/Role/DSL.pm
lib/Dancer2/Core/Role/Engine.pm
lib/Dancer2/Core/Role/Handler.pm
@@ -36,15 +37,12 @@ lib/Dancer2/Core/Role/Headers.pm
lib/Dancer2/Core/Role/Hookable.pm
lib/Dancer2/Core/Role/Logger.pm
lib/Dancer2/Core/Role/Serializer.pm
-lib/Dancer2/Core/Role/Server.pm
lib/Dancer2/Core/Role/SessionFactory.pm
lib/Dancer2/Core/Role/SessionFactory/File.pm
lib/Dancer2/Core/Role/StandardResponses.pm
lib/Dancer2/Core/Role/Template.pm
lib/Dancer2/Core/Route.pm
lib/Dancer2/Core/Runner.pm
-lib/Dancer2/Core/Server/PSGI.pm
-lib/Dancer2/Core/Server/Standalone.pm
lib/Dancer2/Core/Session.pm
lib/Dancer2/Core/Time.pm
lib/Dancer2/Core/Types.pm
@@ -175,13 +173,11 @@ t/request_upload.t
t/response.t
t/roles/headers.t
t/roles/hook.t
-t/roles/server.t
t/route-pod-coverage/route-pod-coverage.t
t/route.t
t/runner.t
t/serializer.t
t/serializer_json.t
-t/server.t
t/server_standalone.t
t/session_config.t
t/session_engines.t
@@ -189,6 +185,29 @@ t/session_forward.t
t/session_hooks.t
t/session_lifecycle.t
t/session_object.t
+t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
+t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
+t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
+t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
+t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
+t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
+t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
+t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
+t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
+t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
+t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
+t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
+t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
+t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
+t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
+t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
+t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
+t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
+t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
+t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
+t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
+t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
+t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
t/sessions/Uf-CrAAAdd2mP4pJAIBzc6YRqXnqeNUt.yml
t/sessions/Uf-GsQAANz9OaEztWyuSfJKegUq3zD1V.yml
t/sessions/Uf-HDgAAPPOeyDGX2_IgTLzBg6iBsFkk.yml
diff --git a/META.json b/META.json
index ccfb736..fa82a4f 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
"Dancer Core Developers"
],
"dynamic_config" : 0,
- "generated_by" : "Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.120921",
+ "generated_by" : "Dist::Zilla version 5.015, CPAN::Meta::Converter version 2.120921",
"license" : [
"perl_5"
],
@@ -38,7 +38,6 @@
"Crypt::URandom" : "0",
"JSON::XS" : "0",
"Math::Random::ISAAC::XS" : "0",
- "Plack::Request" : "0",
"Pod::Simple::Search" : "0",
"Pod::Simple::SimpleTree" : "0",
"Scope::Upper" : "0",
@@ -68,7 +67,7 @@
"HTTP::Body" : "0",
"HTTP::Date" : "0",
"HTTP::Headers" : "0",
- "HTTP::Server::Simple::PSGI" : "0",
+ "HTTP::Server::PSGI" : "0",
"Hash::Merge::Simple" : "0",
"IO::File" : "0",
"JSON" : "0",
@@ -81,7 +80,8 @@
"MooX::Types::MooseLike" : "0.16",
"MooX::Types::MooseLike::Base" : "0",
"POSIX" : "0",
- "Plack::Request" : "0",
+ "Plack" : "1.0016",
+ "Plack::Builder" : "0",
"Pod::Simple::Search" : "0",
"Pod::Simple::SimpleTree" : "0",
"Return::MultiLevel" : "0",
@@ -93,29 +93,29 @@
"Test::More" : "0.92",
"URI" : "0",
"URI::Escape" : "0",
- "YAML::Any" : "0",
+ "YAML" : "0",
"overload" : "0",
"parent" : "0",
- "perl" : "5.00503",
+ "perl" : "5.006",
"strict" : "0",
"warnings" : "0"
},
"suggests" : {
"Class::Load::XS" : "0",
"Fcntl" : "0",
- "YAML::Any" : "0"
+ "YAML" : "0"
}
},
"test" : {
"requires" : {
"Capture::Tiny" : "0.12",
"ExtUtils::MakeMaker" : "0",
+ "File::Spec" : "0",
"File::Temp" : "0.22",
"FindBin" : "0",
"HTTP::Body" : "0",
"HTTP::Request" : "0",
"HTTP::Request::Common" : "0",
- "HTTP::Server::Simple::PSGI" : "0",
"IO::Handle" : "0",
"IPC::Open3" : "0",
"LWP::Protocol::PSGI" : "0.06",
@@ -126,8 +126,8 @@
"Test::Script" : "0",
"Test::TCP" : "1.13",
"YAML" : "0",
- "YAML::Any" : "0",
"lib" : "0",
+ "perl" : "5.006",
"utf8" : "0",
"vars" : "0"
}
@@ -136,263 +136,251 @@
"provides" : {
"Dancer2" : {
"file" : "lib/Dancer2.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::CLI" : {
"file" : "lib/Dancer2/CLI.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::CLI::Command::gen" : {
"file" : "lib/Dancer2/CLI/Command/gen.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::CLI::Command::version" : {
"file" : "lib/Dancer2/CLI/Command/version.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Config" : {
"file" : "lib/Dancer2/Config.pod",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Cookbook" : {
"file" : "lib/Dancer2/Cookbook.pod",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core" : {
"file" : "lib/Dancer2/Core.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::App" : {
"file" : "lib/Dancer2/Core/App.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Context" : {
"file" : "lib/Dancer2/Core/Context.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Cookie" : {
"file" : "lib/Dancer2/Core/Cookie.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::DSL" : {
"file" : "lib/Dancer2/Core/DSL.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Dispatcher" : {
"file" : "lib/Dancer2/Core/Dispatcher.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Error" : {
"file" : "lib/Dancer2/Core/Error.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Factory" : {
"file" : "lib/Dancer2/Core/Factory.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::HTTP" : {
"file" : "lib/Dancer2/Core/HTTP.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Hook" : {
"file" : "lib/Dancer2/Core/Hook.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::MIME" : {
"file" : "lib/Dancer2/Core/MIME.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Request" : {
"file" : "lib/Dancer2/Core/Request.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Request::Upload" : {
"file" : "lib/Dancer2/Core/Request/Upload.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Response" : {
"file" : "lib/Dancer2/Core/Response.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
- "Dancer2::Core::Role::Config" : {
- "file" : "lib/Dancer2/Core/Role/Config.pm",
- "version" : "0.12"
+ "Dancer2::Core::Role::ConfigReader" : {
+ "file" : "lib/Dancer2/Core/Role/ConfigReader.pm",
+ "version" : "0.140001"
},
"Dancer2::Core::Role::DSL" : {
"file" : "lib/Dancer2/Core/Role/DSL.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Engine" : {
"file" : "lib/Dancer2/Core/Role/Engine.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Handler" : {
"file" : "lib/Dancer2/Core/Role/Handler.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Headers" : {
"file" : "lib/Dancer2/Core/Role/Headers.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Hookable" : {
"file" : "lib/Dancer2/Core/Role/Hookable.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Logger" : {
"file" : "lib/Dancer2/Core/Role/Logger.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Serializer" : {
"file" : "lib/Dancer2/Core/Role/Serializer.pm",
- "version" : "0.12"
- },
- "Dancer2::Core::Role::Server" : {
- "file" : "lib/Dancer2/Core/Role/Server.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::SessionFactory" : {
"file" : "lib/Dancer2/Core/Role/SessionFactory.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::SessionFactory::File" : {
"file" : "lib/Dancer2/Core/Role/SessionFactory/File.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::StandardResponses" : {
"file" : "lib/Dancer2/Core/Role/StandardResponses.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Role::Template" : {
"file" : "lib/Dancer2/Core/Role/Template.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Route" : {
"file" : "lib/Dancer2/Core/Route.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Runner" : {
"file" : "lib/Dancer2/Core/Runner.pm",
- "version" : "0.12"
- },
- "Dancer2::Core::Server::PSGI" : {
- "file" : "lib/Dancer2/Core/Server/PSGI.pm",
- "version" : "0.12"
- },
- "Dancer2::Core::Server::Standalone" : {
- "file" : "lib/Dancer2/Core/Server/Standalone.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Session" : {
"file" : "lib/Dancer2/Core/Session.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Time" : {
"file" : "lib/Dancer2/Core/Time.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Core::Types" : {
"file" : "lib/Dancer2/Core/Types.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::FileUtils" : {
"file" : "lib/Dancer2/FileUtils.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Handler::AutoPage" : {
"file" : "lib/Dancer2/Handler/AutoPage.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Handler::File" : {
"file" : "lib/Dancer2/Handler/File.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Capture" : {
"file" : "lib/Dancer2/Logger/Capture.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Capture::Trap" : {
"file" : "lib/Dancer2/Logger/Capture/Trap.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Console" : {
"file" : "lib/Dancer2/Logger/Console.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Diag" : {
"file" : "lib/Dancer2/Logger/Diag.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::File" : {
"file" : "lib/Dancer2/Logger/File.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Note" : {
"file" : "lib/Dancer2/Logger/Note.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Logger::Null" : {
"file" : "lib/Dancer2/Logger/Null.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Manual" : {
"file" : "lib/Dancer2/Manual.pod",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Plugin" : {
"file" : "lib/Dancer2/Plugin.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Plugin::Ajax" : {
"file" : "lib/Dancer2/Plugin/Ajax.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Plugins" : {
"file" : "lib/Dancer2/Plugins.pod",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Serializer::Dumper" : {
"file" : "lib/Dancer2/Serializer/Dumper.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Serializer::JSON" : {
"file" : "lib/Dancer2/Serializer/JSON.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Serializer::YAML" : {
"file" : "lib/Dancer2/Serializer/YAML.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Session::Simple" : {
"file" : "lib/Dancer2/Session/Simple.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Session::YAML" : {
"file" : "lib/Dancer2/Session/YAML.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Template::Implementation::ForkedTiny" : {
"file" : "lib/Dancer2/Template/Implementation/ForkedTiny.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Template::Simple" : {
"file" : "lib/Dancer2/Template/Simple.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Template::TemplateToolkit" : {
"file" : "lib/Dancer2/Template/TemplateToolkit.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Template::Tiny" : {
"file" : "lib/Dancer2/Template/Tiny.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Test" : {
"file" : "lib/Dancer2/Test.pm",
- "version" : "0.12"
+ "version" : "0.140001"
},
"Dancer2::Tutorial" : {
"file" : "lib/Dancer2/Tutorial.pod",
- "version" : "0.12"
+ "version" : "0.140001"
}
},
"release_status" : "stable",
@@ -405,6 +393,6 @@
"url" : "https://github.com/PerlDancer/Dancer2"
}
},
- "version" : "0.12"
+ "version" : "0.140001"
}
diff --git a/META.yml b/META.yml
index e452904..f9069e4 100644
--- a/META.yml
+++ b/META.yml
@@ -5,12 +5,12 @@ author:
build_requires:
Capture::Tiny: 0.12
ExtUtils::MakeMaker: 0
+ File::Spec: 0
File::Temp: 0.22
FindBin: 0
HTTP::Body: 0
HTTP::Request: 0
HTTP::Request::Common: 0
- HTTP::Server::Simple::PSGI: 0
IO::Handle: 0
IPC::Open3: 0
LWP::Protocol::PSGI: 0.06
@@ -22,8 +22,8 @@ build_requires:
Test::Script: 0
Test::TCP: 1.13
YAML: 0
- YAML::Any: 0
lib: 0
+ perl: 5.006
utf8: 0
vars: 0
configure_requires:
@@ -31,7 +31,7 @@ configure_requires:
File::ShareDir::Install: 0.03
Module::Build: 0.3601
dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Dist::Zilla version 5.015, CPAN::Meta::Converter version 2.120921'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -40,205 +40,195 @@ name: Dancer2
provides:
Dancer2:
file: lib/Dancer2.pm
- version: 0.12
+ version: 0.140001
Dancer2::CLI:
file: lib/Dancer2/CLI.pm
- version: 0.12
+ version: 0.140001
Dancer2::CLI::Command::gen:
file: lib/Dancer2/CLI/Command/gen.pm
- version: 0.12
+ version: 0.140001
Dancer2::CLI::Command::version:
file: lib/Dancer2/CLI/Command/version.pm
- version: 0.12
+ version: 0.140001
Dancer2::Config:
file: lib/Dancer2/Config.pod
- version: 0.12
+ version: 0.140001
Dancer2::Cookbook:
file: lib/Dancer2/Cookbook.pod
- version: 0.12
+ version: 0.140001
Dancer2::Core:
file: lib/Dancer2/Core.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::App:
file: lib/Dancer2/Core/App.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Context:
file: lib/Dancer2/Core/Context.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Cookie:
file: lib/Dancer2/Core/Cookie.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::DSL:
file: lib/Dancer2/Core/DSL.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Dispatcher:
file: lib/Dancer2/Core/Dispatcher.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Error:
file: lib/Dancer2/Core/Error.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Factory:
file: lib/Dancer2/Core/Factory.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::HTTP:
file: lib/Dancer2/Core/HTTP.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Hook:
file: lib/Dancer2/Core/Hook.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::MIME:
file: lib/Dancer2/Core/MIME.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Request:
file: lib/Dancer2/Core/Request.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Request::Upload:
file: lib/Dancer2/Core/Request/Upload.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Response:
file: lib/Dancer2/Core/Response.pm
- version: 0.12
- Dancer2::Core::Role::Config:
- file: lib/Dancer2/Core/Role/Config.pm
- version: 0.12
+ version: 0.140001
+ Dancer2::Core::Role::ConfigReader:
+ file: lib/Dancer2/Core/Role/ConfigReader.pm
+ version: 0.140001
Dancer2::Core::Role::DSL:
file: lib/Dancer2/Core/Role/DSL.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Engine:
file: lib/Dancer2/Core/Role/Engine.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Handler:
file: lib/Dancer2/Core/Role/Handler.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Headers:
file: lib/Dancer2/Core/Role/Headers.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Hookable:
file: lib/Dancer2/Core/Role/Hookable.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Logger:
file: lib/Dancer2/Core/Role/Logger.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Serializer:
file: lib/Dancer2/Core/Role/Serializer.pm
- version: 0.12
- Dancer2::Core::Role::Server:
- file: lib/Dancer2/Core/Role/Server.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::SessionFactory:
file: lib/Dancer2/Core/Role/SessionFactory.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::SessionFactory::File:
file: lib/Dancer2/Core/Role/SessionFactory/File.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::StandardResponses:
file: lib/Dancer2/Core/Role/StandardResponses.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Role::Template:
file: lib/Dancer2/Core/Role/Template.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Route:
file: lib/Dancer2/Core/Route.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Runner:
file: lib/Dancer2/Core/Runner.pm
- version: 0.12
- Dancer2::Core::Server::PSGI:
- file: lib/Dancer2/Core/Server/PSGI.pm
- version: 0.12
- Dancer2::Core::Server::Standalone:
- file: lib/Dancer2/Core/Server/Standalone.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Session:
file: lib/Dancer2/Core/Session.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Time:
file: lib/Dancer2/Core/Time.pm
- version: 0.12
+ version: 0.140001
Dancer2::Core::Types:
file: lib/Dancer2/Core/Types.pm
- version: 0.12
+ version: 0.140001
Dancer2::FileUtils:
file: lib/Dancer2/FileUtils.pm
- version: 0.12
+ version: 0.140001
Dancer2::Handler::AutoPage:
file: lib/Dancer2/Handler/AutoPage.pm
- version: 0.12
+ version: 0.140001
Dancer2::Handler::File:
file: lib/Dancer2/Handler/File.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Capture:
file: lib/Dancer2/Logger/Capture.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Capture::Trap:
file: lib/Dancer2/Logger/Capture/Trap.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Console:
file: lib/Dancer2/Logger/Console.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Diag:
file: lib/Dancer2/Logger/Diag.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::File:
file: lib/Dancer2/Logger/File.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Note:
file: lib/Dancer2/Logger/Note.pm
- version: 0.12
+ version: 0.140001
Dancer2::Logger::Null:
file: lib/Dancer2/Logger/Null.pm
- version: 0.12
+ version: 0.140001
Dancer2::Manual:
file: lib/Dancer2/Manual.pod
- version: 0.12
+ version: 0.140001
Dancer2::Plugin:
file: lib/Dancer2/Plugin.pm
- version: 0.12
+ version: 0.140001
Dancer2::Plugin::Ajax:
file: lib/Dancer2/Plugin/Ajax.pm
- version: 0.12
+ version: 0.140001
Dancer2::Plugins:
file: lib/Dancer2/Plugins.pod
- version: 0.12
+ version: 0.140001
Dancer2::Serializer::Dumper:
file: lib/Dancer2/Serializer/Dumper.pm
- version: 0.12
+ version: 0.140001
Dancer2::Serializer::JSON:
file: lib/Dancer2/Serializer/JSON.pm
- version: 0.12
+ version: 0.140001
Dancer2::Serializer::YAML:
file: lib/Dancer2/Serializer/YAML.pm
- version: 0.12
+ version: 0.140001
Dancer2::Session::Simple:
file: lib/Dancer2/Session/Simple.pm
- version: 0.12
+ version: 0.140001
Dancer2::Session::YAML:
file: lib/Dancer2/Session/YAML.pm
- version: 0.12
+ version: 0.140001
Dancer2::Template::Implementation::ForkedTiny:
file: lib/Dancer2/Template/Implementation/ForkedTiny.pm
- version: 0.12
+ version: 0.140001
Dancer2::Template::Simple:
file: lib/Dancer2/Template/Simple.pm
- version: 0.12
+ version: 0.140001
Dancer2::Template::TemplateToolkit:
file: lib/Dancer2/Template/TemplateToolkit.pm
- version: 0.12
+ version: 0.140001
Dancer2::Template::Tiny:
file: lib/Dancer2/Template/Tiny.pm
- version: 0.12
+ version: 0.140001
Dancer2::Test:
file: lib/Dancer2/Test.pm
- version: 0.12
+ version: 0.140001
Dancer2::Tutorial:
file: lib/Dancer2/Tutorial.pod
- version: 0.12
+ version: 0.140001
recommends:
CGI::Deurl::XS: 0
Crypt::URandom: 0
JSON::XS: 0
Math::Random::ISAAC::XS: 0
- Plack::Request: 0
Pod::Simple::Search: 0
Pod::Simple::SimpleTree: 0
Scope::Upper: 0
@@ -267,7 +257,7 @@ requires:
HTTP::Body: 0
HTTP::Date: 0
HTTP::Headers: 0
- HTTP::Server::Simple::PSGI: 0
+ HTTP::Server::PSGI: 0
Hash::Merge::Simple: 0
IO::File: 0
JSON: 0
@@ -280,7 +270,8 @@ requires:
MooX::Types::MooseLike: 0.16
MooX::Types::MooseLike::Base: 0
POSIX: 0
- Plack::Request: 0
+ Plack: 1.0016
+ Plack::Builder: 0
Pod::Simple::Search: 0
Pod::Simple::SimpleTree: 0
Return::MultiLevel: 0
@@ -292,14 +283,14 @@ requires:
Test::More: 0.92
URI: 0
URI::Escape: 0
- YAML::Any: 0
+ YAML: 0
overload: 0
parent: 0
- perl: 5.00503
+ perl: 5.006
strict: 0
warnings: 0
resources:
bugtracker: https://github.com/PerlDancer/Dancer2/issues
homepage: http://perldancer.org/
repository: https://github.com/PerlDancer/Dancer2
-version: 0.12
+version: 0.140001
diff --git a/Makefile.PL b/Makefile.PL
index dcb2b6d..10dfb81 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -1,8 +1,9 @@
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.015.
use strict;
use warnings;
-use 5.005030;
+use 5.006;
use ExtUtils::MakeMaker 6.30;
@@ -49,7 +50,7 @@ my %WriteMakefileArgs = (
"HTTP::Body" => 0,
"HTTP::Date" => 0,
"HTTP::Headers" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
+ "HTTP::Server::PSGI" => 0,
"Hash::Merge::Simple" => 0,
"IO::File" => 0,
"JSON" => 0,
@@ -62,7 +63,8 @@ my %WriteMakefileArgs = (
"MooX::Types::MooseLike" => "0.16",
"MooX::Types::MooseLike::Base" => 0,
"POSIX" => 0,
- "Plack::Request" => 0,
+ "Plack" => "1.0016",
+ "Plack::Builder" => 0,
"Pod::Simple::Search" => 0,
"Pod::Simple::SimpleTree" => 0,
"Return::MultiLevel" => 0,
@@ -74,7 +76,7 @@ my %WriteMakefileArgs = (
"Test::More" => "0.92",
"URI" => 0,
"URI::Escape" => 0,
- "YAML::Any" => 0,
+ "YAML" => 0,
"overload" => 0,
"parent" => 0,
"strict" => 0,
@@ -83,12 +85,12 @@ my %WriteMakefileArgs = (
"TEST_REQUIRES" => {
"Capture::Tiny" => "0.12",
"ExtUtils::MakeMaker" => 0,
+ "File::Spec" => 0,
"File::Temp" => "0.22",
"FindBin" => 0,
"HTTP::Body" => 0,
"HTTP::Request" => 0,
"HTTP::Request::Common" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
"IO::Handle" => 0,
"IPC::Open3" => 0,
"LWP::Protocol::PSGI" => "0.06",
@@ -99,12 +101,11 @@ my %WriteMakefileArgs = (
"Test::Script" => 0,
"Test::TCP" => "1.13",
"YAML" => 0,
- "YAML::Any" => 0,
"lib" => 0,
"utf8" => 0,
"vars" => 0
},
- "VERSION" => "0.12",
+ "VERSION" => "0.140001",
"test" => {
"TESTS" => "t/*.t t/dsl/*.t t/roles/*.t t/route-pod-coverage/*.t t/template_tiny/*.t"
}
@@ -138,7 +139,7 @@ my %FallbackPrereqs = (
"HTTP::Headers" => 0,
"HTTP::Request" => 0,
"HTTP::Request::Common" => 0,
- "HTTP::Server::Simple::PSGI" => 0,
+ "HTTP::Server::PSGI" => 0,
"Hash::Merge::Simple" => 0,
"IO::File" => 0,
"IO::Handle" => 0,
@@ -155,7 +156,8 @@ my %FallbackPrereqs = (
"MooX::Types::MooseLike" => "0.16",
"MooX::Types::MooseLike::Base" => 0,
"POSIX" => 0,
- "Plack::Request" => 0,
+ "Plack" => "1.0016",
+ "Plack::Builder" => 0,
"Plack::Test" => 0,
"Pod::Simple::Search" => 0,
"Pod::Simple::SimpleTree" => 0,
@@ -173,7 +175,6 @@ my %FallbackPrereqs = (
"URI" => 0,
"URI::Escape" => 0,
"YAML" => 0,
- "YAML::Any" => 0,
"lib" => 0,
"overload" => 0,
"parent" => 0,
diff --git a/README.md b/README.md
index adf05a5..99407d6 100644
--- a/README.md
+++ b/README.md
@@ -29,9 +29,9 @@ Now point your browser to [http://localhost:3000](http://localhost:3000) and voi
* [Dancer's Website](http://perldancer.org)
* [Most recent release on CPAN](https://metacpan.org/release/Dancer2)
* [Builds status on Travis](https://travis-ci.org/PerlDancer/Dancer2)
-* [Our Mailing List](http://list.perldancer.org/cgi-bin/listinfo/dancer-users)
+* [Our Mailing List](http://lists.preshweb.co.uk/mailman/listinfo/dancer-users)
* [Follow us on Twitter](https://twitter.com/perldancer)
-* [Find us on irc.perl.org #dancer](irc://irc.perl.org/#dancer)
+* [Find us on irc.perl.org #dancer](http://perldancer.org/irc)
* [The Advent Calendar](http://advent.perldancer.org/)
* [Contribution/Git Guide](https://github.com/PerlDancer/Dancer2/blob/master/GitGuide.md)
diff --git a/lib/Dancer2.pm b/lib/Dancer2.pm
index fa34631..d989c79 100644
--- a/lib/Dancer2.pm
+++ b/lib/Dancer2.pm
@@ -1,15 +1,12 @@
package Dancer2;
-{
- $Dancer2::VERSION = '0.12';
-}
# ABSTRACT: Lightweight yet powerful web application framework
-
+$Dancer2::VERSION = '0.140001';
use strict;
use warnings;
use Class::Load 'load_class';
use Dancer2::Core;
-use Dancer2::Core::Runner;
use Dancer2::Core::App;
+use Dancer2::Core::Runner;
use Dancer2::FileUtils;
our $AUTHORITY = 'SUKRIA';
@@ -17,7 +14,7 @@ our $AUTHORITY = 'SUKRIA';
# set version in dist.ini now
# but we still need a basic version for
# the tests
-$Dancer2::VERSION ||= '0.09'; # 2.0.9
+$Dancer2::VERSION ||= '0.140001'; # 2.14.1
our $runner;
@@ -46,8 +43,8 @@ sub import {
}
scalar(@final_args) % 2
- and die
- "parameters to 'use Dancer2' should be one of : 'key => value', ':script', or !<keyword>, where <keyword> is a DSL keyword you don't want to import";
+ and die q{parameters must be key/value pairs, ':script' or '!keyword'};
+
my %final_args = @final_args;
$final_args{dsl} ||= 'Dancer2::Core::DSL';
@@ -56,12 +53,9 @@ sub import {
if ( not defined $runner ) {
# TODO should support commandline options as well
-
- $runner = Dancer2::Core::Runner->new( caller => $script, );
+ $runner = Dancer2::Core::Runner->new( caller => $script );
}
- my $server = $runner->server;
-
# the app object
# populating with the server's postponed hooks in advance
my $app = Dancer2::Core::App->new(
@@ -69,13 +63,13 @@ sub import {
environment => $runner->environment,
location => $runner->location,
runner_config => $runner->config,
- postponed_hooks => $server->postponed_hooks,
+ postponed_hooks => $runner->postponed_hooks,
);
_set_import_method_to_caller($caller);
# register the app within the runner instance
- $server->register_application($app);
+ $runner->register_application($app);
# load the DSL, defaulting to Dancer2::Core::DSL
load_class( $final_args{dsl} );
@@ -122,7 +116,7 @@ Dancer2 - Lightweight yet powerful web application framework
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -303,7 +297,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI.pm b/lib/Dancer2/CLI.pm
index 8495f56..f8d3468 100644
--- a/lib/Dancer2/CLI.pm
+++ b/lib/Dancer2/CLI.pm
@@ -1,9 +1,6 @@
# ABSTRACT: Dancer2 cli application
package Dancer2::CLI;
-{
- $Dancer2::CLI::VERSION = '0.12';
-}
-
+$Dancer2::CLI::VERSION = '0.140001';
use App::Cmd::Setup -app;
1;
@@ -18,7 +15,7 @@ Dancer2::CLI - Dancer2 cli application
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -26,7 +23,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI/Command/gen.pm b/lib/Dancer2/CLI/Command/gen.pm
index b24dd90..1356a38 100644
--- a/lib/Dancer2/CLI/Command/gen.pm
+++ b/lib/Dancer2/CLI/Command/gen.pm
@@ -1,9 +1,6 @@
# ABSTRACT: create new Dancer2 application
package Dancer2::CLI::Command::gen;
-{
- $Dancer2::CLI::Command::gen::VERSION = '0.12';
-}
-
+$Dancer2::CLI::Command::gen::VERSION = '0.140001';
use strict;
use warnings;
@@ -280,7 +277,7 @@ Dancer2::CLI::Command::gen - create new Dancer2 application
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -288,7 +285,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI/Command/version.pm b/lib/Dancer2/CLI/Command/version.pm
index 8350b9b..4dc4399 100644
--- a/lib/Dancer2/CLI/Command/version.pm
+++ b/lib/Dancer2/CLI/Command/version.pm
@@ -1,8 +1,6 @@
-# ABSTRACT: display version
package Dancer2::CLI::Command::version;
-{
- $Dancer2::CLI::Command::version::VERSION = '0.12';
-}
+# ABSTRACT: display version
+$Dancer2::CLI::Command::version::VERSION = '0.140001';
use App::Cmd::Setup -command;
sub description { 'Display version of Dancer2' }
@@ -29,7 +27,7 @@ Dancer2::CLI::Command::version - display version
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -37,7 +35,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Config.pod b/lib/Dancer2/Config.pod
index 37034cd..1c109c3 100644
--- a/lib/Dancer2/Config.pod
+++ b/lib/Dancer2/Config.pod
@@ -1,6 +1,6 @@
package Dancer2::Config;
# ABSTRACT: Configure Dancer2 to suit your needs
-
+$Dancer2::Config::VERSION = '0.140001';
__END__
=pod
@@ -11,15 +11,15 @@ Dancer2::Config - Configure Dancer2 to suit your needs
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
-The Dancer2 configuration (as implemented by L<Dancer2::Core::Role::Config>)
-handles reading and changing the configuration of your Dancer2 apps. This
-document describes how to manipulate Dancer2's configuration settings (through
-code or by file), and to document the various settings that are available in
-Dancer2.
+The Dancer2 configuration (as implemented by
+L<Dancer2::Core::Role::ConfigReader>) handles reading and changing the
+configuration of your Dancer2 apps. This document describes how to
+manipulate Dancer2's configuration settings (through code or by file),
+and to document the various settings that are available in Dancer2.
=head1 MANIPULATING SETTINGS VIA CODE
@@ -137,11 +137,6 @@ The port Dancer2 will listen to.
Default value is 3000. This setting can be changed on the command-line with the
B<--port> switch.
-=head3 daemon (boolean)
-
-If set to true, runs the standalone webserver in the background.
-This setting can be changed on the command-line with the B<--daemon> flag.
-
=head3 behind_proxy (boolean)
If set to true, Dancer2 will look to C<X-Forwarded-Protocol> and
@@ -477,7 +472,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Cookbook.pod b/lib/Dancer2/Cookbook.pod
index 5fb0c66..8241edc 100644
--- a/lib/Dancer2/Cookbook.pod
+++ b/lib/Dancer2/Cookbook.pod
@@ -1,6 +1,6 @@
package Dancer2::Cookbook;
# ABSTRACT: Example-driven quick-start to the Dancer2 web framework
-
+$Dancer2::Cookbook::VERSION = '0.140001';
__END__
=pod
@@ -11,7 +11,7 @@ Dancer2::Cookbook - Example-driven quick-start to the Dancer2 web framework
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -845,7 +845,7 @@ The content of the error will be serialized using the appropriate serializer.
=head2 Running stand-alone
At the simplest, your Dancer2 app can run standalone, operating as its own
-webserver using L<HTTP::Server::Simple::PSGI>.
+webserver using L<HTTP::Server::PSGI>.
Simply fire up your app:
@@ -1384,7 +1384,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core.pm b/lib/Dancer2/Core.pm
index 3649fd5..b899d1a 100644
--- a/lib/Dancer2/Core.pm
+++ b/lib/Dancer2/Core.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Core libraries for Dancer2 2.0
package Dancer2::Core;
-{
- $Dancer2::Core::VERSION = '0.12';
-}
-
+$Dancer2::Core::VERSION = '0.140001';
use strict;
use warnings;
@@ -32,7 +29,7 @@ Dancer2::Core - Core libraries for Dancer2 2.0
=head1 VERSION
-version 0.12
+version 0.140001
=head1 FUNCTIONS
@@ -46,7 +43,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/App.pm b/lib/Dancer2/Core/App.pm
index c0f9689..930366c 100644
--- a/lib/Dancer2/Core/App.pm
+++ b/lib/Dancer2/Core/App.pm
@@ -1,9 +1,6 @@
# ABSTRACT: encapsulation of Dancer2 packages
package Dancer2::Core::App;
-{
- $Dancer2::Core::App::VERSION = '0.12';
-}
-
+$Dancer2::Core::App::VERSION = '0.140001';
use Moo;
use File::Spec;
use Scalar::Util 'blessed';
@@ -17,7 +14,189 @@ use Dancer2::Core::Hook;
# we have hooks here
with 'Dancer2::Core::Role::Hookable';
-with 'Dancer2::Core::Role::Config';
+with 'Dancer2::Core::Role::ConfigReader';
+
+sub supported_engines { [ qw<logger serializer session template> ] }
+
+has logger_engine => (
+ is => 'ro',
+ isa => Maybe[ConsumerOf['Dancer2::Core::Role::Logger']],
+ lazy => 1,
+ builder => '_build_logger_engine',
+ writer => 'set_logger_engine',
+);
+
+has session_engine => (
+ is => 'ro',
+ isa => Maybe[ConsumerOf['Dancer2::Core::Role::SessionFactory']],
+ lazy => 1,
+ builder => '_build_session_engine',
+ writer => 'set_session_engine',
+);
+
+has template_engine => (
+ is => 'ro',
+ isa => Maybe[ConsumerOf['Dancer2::Core::Role::Template']],
+ lazy => 1,
+ builder => '_build_template_engine',
+ writer => 'set_template_engine',
+);
+
+has serializer_engine => (
+ is => 'ro',
+ isa => Maybe[ConsumerOf['Dancer2::Core::Role::Serializer']],
+ lazy => 1,
+ builder => '_build_serializer_engine',
+ writer => 'set_serializer_engine',
+);
+
+has '+local_triggers' => (
+ default => sub {
+ my $self = shift;
+ my $triggers = {
+ # general triggers we want to allow, besides engines
+ views => sub {
+ my ( $self, $value, $config ) = @_;
+ $self->template_engine->views($value);
+ },
+
+ layout => sub {
+ my ( $self, $value, $config ) = @_;
+ $self->template_engine->layout($value);
+ },
+ };
+
+ foreach my $engine ( @{ $self->supported_engines } ) {
+ $triggers->{$engine} = sub {
+ my ( $self, $value, $config ) = @_;
+
+ return $value if ref $value;
+
+ my $build_method = "_build_${engine}_engine";
+ my $setter_method = "set_${engine}_engine";
+ my $engine_instance = $self->$build_method( $value, $config );
+
+ # set the engine with the new value from the builder
+ $self->$setter_method($engine_instance);
+
+ return $engine_instance;
+ };
+ }
+
+ return $triggers;
+ },
+);
+
+sub _build_logger_engine {
+ my ($self, $value, $config) = @_;
+
+ $config = $self->config if !defined $config;
+ $value = $config->{logger} if !defined $value;
+
+ return $value if ref($value);
+
+ # XXX This is needed for the tests that create an app without
+ # a runner.
+ $value = 'console' if !defined $value;
+
+ my $engine_options =
+ $self->_get_config_for_engine( logger => $value, $config );
+
+ my $logger = Dancer2::Core::Factory->create(
+ logger => $value,
+ %{$engine_options},
+ app_name => $self->name,
+ postponed_hooks => $self->get_postponed_hooks
+ );
+
+ $logger->log_level($config->{log}) if exists $config->{log};
+
+ return $logger;
+}
+
+sub _build_session_engine {
+ my ($self, $value, $config) = @_;
+
+ $config = $self->config if !defined $config;
+ $value = $config->{'session'} if !defined $value;
+
+ $value = 'simple' if !defined $value;
+ return $value if ref($value);
+
+ my $engine_options =
+ $self->_get_config_for_engine( session => $value, $config );
+
+ return Dancer2::Core::Factory->create(
+ session => $value,
+ %{$engine_options},
+ postponed_hooks => $self->get_postponed_hooks,
+ );
+}
+
+sub _build_template_engine {
+ my ($self, $value, $config) = @_;
+
+ $config = $self->config if !defined $config;
+ $value = $config->{'template'} if !defined $value;
+
+ return undef if !defined $value;
+ return $value if ref($value);
+
+ my $engine_options =
+ $self->_get_config_for_engine( template => $value, $config );
+
+ my $engine_attrs = { config => $engine_options };
+ $engine_attrs->{layout} ||= $config->{layout};
+ $engine_attrs->{views} ||= $config->{views}
+ || path( $self->location, 'views' );
+
+ return Dancer2::Core::Factory->create(
+ template => $value,
+ %{$engine_attrs},
+ postponed_hooks => $self->get_postponed_hooks,
+ );
+}
+
+sub _build_serializer_engine {
+ my ($self, $value, $config) = @_;
+
+ $config = $self->config if !defined $config;
+ $value = $config->{serializer} if !defined $value;
+
+ return undef if !defined $value;
+ return $value if ref($value);
+
+ my $engine_options =
+ $self->_get_config_for_engine( serializer => $value, $config );
+
+ return Dancer2::Core::Factory->create(
+ serializer => $value,
+ config => $engine_options,
+ postponed_hooks => $self->get_postponed_hooks,
+ );
+}
+
+sub _get_config_for_engine {
+ my ( $self, $engine, $name, $config ) = @_;
+
+ my $default_config = {
+ environment => $self->environment,
+ location => $self->config_location,
+ };
+
+ defined $config->{'engines'} && defined $config->{'engines'}{$engine}
+ or return $default_config;
+
+ my $engine_config = {};
+
+ for my $config_key ($name, Dancer2::Core::camelize($name)) {
+ $engine_config = $config->{engines}{$engine}{$config_key}
+ if defined $config->{engines}->{$engine}{$config_key};
+ }
+ return { %{$default_config}, %{$engine_config}, } || $default_config;
+}
+
+
has postponed_hooks => (
is => 'ro',
@@ -31,25 +210,12 @@ has plugins => (
default => sub { [] },
);
-has server => (
- is => 'rw',
- isa => ConsumerOf ['Dancer2::Core::Role::Server'],
- weak_ref => 1,
-);
-
has runner_config => (
is => 'ro',
isa => HashRef,
default => sub { {} },
);
-has default_config => (
- is => 'ro',
- isa => HashRef,
- lazy => 1,
- builder => '_build_default_config',
-);
-
has route_handlers => (
is => 'rw',
isa => ArrayRef,
@@ -68,8 +234,9 @@ has context => (
trigger => sub {
my ( $self, $ctx ) = @_;
$self->_init_for_context($ctx),;
- for my $type (@{$self->supported_engines}) {
- my $engine = $self->engine($type) or next;
+ for my $type ( @{ $self->supported_engines } ) {
+ my $attr = "${type}_engine";
+ my $engine = $self->$attr or next;
defined($ctx) ? $engine->context($ctx) : $engine->clear_context;
}
},
@@ -198,7 +365,7 @@ sub _init_hooks {
my $response = shift;
# make sure an engine is defined, if not, nothing to do
- my $engine = $self->engine('session');
+ my $engine = $self->session_engine;
return if !defined $engine;
# make sure we have a context to examine
@@ -261,7 +428,7 @@ sub register_plugin {
push @{ $self->plugins }, $plugin;
}
-# This method overrides the default one from Role::Config
+# This method overrides the default one from Role::ConfigReader
sub settings {
my ($self) = @_;
+{ %{ Dancer2->runner->config }, %{ $self->config } };
@@ -271,9 +438,10 @@ sub engine {
my ( $self, $name ) = @_;
croak "Engine '$name' is not supported."
- if !grep {$_ eq $name} @{$self->supported_engines};
+ if !grep {$_ eq $name} @{ $self->supported_engines };
- return $self->engines->{$name};
+ my $attr_name = "${name}_engine";
+ return $self->$attr_name;
}
sub session {
@@ -306,7 +474,7 @@ sub session {
sub template {
my ($self) = shift;
- my $template = $self->engine('template');
+ my $template = $self->template_engine;
my $content = $template->process(@_);
@@ -317,8 +485,9 @@ sub hook_candidates {
my ($self) = @_;
my @engines;
- for my $e (@{$self->supported_engines}) {
- my $engine = $self->engine($e) or next;
+ for my $e ( @{ $self->supported_engines } ) {
+ my $attr = "${e}_engine";
+ my $engine = $self->$attr or next;
push @engines, $engine;
}
@@ -362,7 +531,7 @@ sub mime_type {
sub log {
my ($self, $level, @args) = @_;
- my $logger = $self->engine('logger')
+ my $logger = $self->logger_engine
or croak "No logger defined";
$logger->$level(@args);
@@ -547,7 +716,7 @@ Dancer2::Core::App - encapsulation of Dancer2 packages
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -565,8 +734,6 @@ that package, thanks to that encapsulation.
=head2 plugins
-=head2 server
-
=head2 runner_config
=head2 default_config
@@ -620,7 +787,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Context.pm b/lib/Dancer2/Core/Context.pm
index fc82e32..cff60b2 100644
--- a/lib/Dancer2/Core/Context.pm
+++ b/lib/Dancer2/Core/Context.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Context;
-{
- $Dancer2::Core::Context::VERSION = '0.12';
-}
-
+$Dancer2::Core::Context::VERSION = '0.140001';
# ABSTRACT: handles everything proper to a request's context.
use Moo;
@@ -237,7 +234,7 @@ Dancer2::Core::Context - handles everything proper to a request's context.
=head1 VERSION
-version 0.12
+version 0.140001
=head1 ATTRIBUTES
@@ -327,7 +324,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Cookie.pm b/lib/Dancer2/Core/Cookie.pm
index 96aba93..3f1bf86 100644
--- a/lib/Dancer2/Core/Cookie.pm
+++ b/lib/Dancer2/Core/Cookie.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: A cookie representing class
-
package Dancer2::Core::Cookie;
-{
- $Dancer2::Core::Cookie::VERSION = '0.12';
-}
+# ABSTRACT: A cookie representing class
+$Dancer2::Core::Cookie::VERSION = '0.140001';
use Moo;
use URI::Escape;
use Dancer2::Core::Types;
@@ -119,7 +116,7 @@ Dancer2::Core::Cookie - A cookie representing class
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -204,7 +201,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/DSL.pm b/lib/Dancer2/Core/DSL.pm
index 4bced7a..3d6c2d0 100644
--- a/lib/Dancer2/Core/DSL.pm
+++ b/lib/Dancer2/Core/DSL.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Dancer2's Domain Specific Language (DSL)
package Dancer2::Core::DSL;
-{
- $Dancer2::Core::DSL::VERSION = '0.12';
-}
-
+$Dancer2::Core::DSL::VERSION = '0.140001';
use Moo;
use Carp;
use Class::Load 'load_class';
@@ -379,7 +376,7 @@ Dancer2::Core::DSL - Dancer2's Domain Specific Language (DSL)
=head1 VERSION
-version 0.12
+version 0.140001
=head1 FUNCTIONS
@@ -408,7 +405,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Dispatcher.pm b/lib/Dancer2/Core/Dispatcher.pm
index 98489a3..319fa60 100644
--- a/lib/Dancer2/Core/Dispatcher.pm
+++ b/lib/Dancer2/Core/Dispatcher.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class for dispatching request to the appropriate route handler
-
package Dancer2::Core::Dispatcher;
-{
- $Dancer2::Core::Dispatcher::VERSION = '0.12';
-}
+# ABSTRACT: Class for dispatching request to the appropriate route handler
+$Dancer2::Core::Dispatcher::VERSION = '0.140001';
use Moo;
use Encode;
@@ -155,21 +152,6 @@ sub _dispatch_route {
return $response;
}
-# In the case of a HEAD request, we need to drop the body, but we also
-# need to keep the value of the Content-Length header.
-# Because there's a trigger on the content field to change the value of
-# the C-L header every time we change the value, we need to modify a around
-# modifier to change the value of content and restore the length.
-around 'dispatch' => sub {
- my ( $orig, $self, $env, $request, $curr_context ) = @_;
- my $response = $orig->( $self, $env, $request, $curr_context );
- return $response unless defined $request && $request->is_head;
- my $cl = $response->header('Content-Length');
- $response->content('');
- $response->header( 'Content-Length' => $cl );
- return $response;
-};
-
sub response_internal_error {
my ( $self, $context, $error ) = @_;
@@ -194,7 +176,7 @@ sub response_not_found {
environment => Dancer2->runner->environment,
location => Dancer2->runner->location,
runner_config => Dancer2->runner->config,
- postponed_hooks => Dancer2->runner->server->postponed_hooks,
+ postponed_hooks => Dancer2->runner->postponed_hooks,
api_version => 2,
);
@@ -220,7 +202,7 @@ Dancer2::Core::Dispatcher - Class for dispatching request to the appropriate rou
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -281,7 +263,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Error.pm b/lib/Dancer2/Core/Error.pm
index 86e946e..7ae9a38 100644
--- a/lib/Dancer2/Core/Error.pm
+++ b/lib/Dancer2/Core/Error.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class representing fatal errors
-
package Dancer2::Core::Error;
-{
- $Dancer2::Core::Error::VERSION = '0.12';
-}
+# ABSTRACT: Class representing fatal errors
+$Dancer2::Core::Error::VERSION = '0.140001';
use Moo;
use Carp;
use Dancer2::Core::Types;
@@ -479,7 +476,7 @@ Dancer2::Core::Error - Class representing fatal errors
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -589,7 +586,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Factory.pm b/lib/Dancer2/Core/Factory.pm
index 8fd8c2a..04dec6e 100644
--- a/lib/Dancer2/Core/Factory.pm
+++ b/lib/Dancer2/Core/Factory.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Instantiate components by type and name
-
package Dancer2::Core::Factory;
-{
- $Dancer2::Core::Factory::VERSION = '0.12';
-}
+# ABSTRACT: Instantiate components by type and name
+$Dancer2::Core::Factory::VERSION = '0.140001';
use strict;
use warnings;
@@ -36,7 +33,7 @@ Dancer2::Core::Factory - Instantiate components by type and name
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -44,7 +41,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/HTTP.pm b/lib/Dancer2/Core/HTTP.pm
index ccd9a38..02b643b 100644
--- a/lib/Dancer2/Core/HTTP.pm
+++ b/lib/Dancer2/Core/HTTP.pm
@@ -1,10 +1,7 @@
# ABSTRACT: helper for rendering HTTP status codes for Dancer2
package Dancer2::Core::HTTP;
-{
- $Dancer2::Core::HTTP::VERSION = '0.12';
-}
-
+$Dancer2::Core::HTTP::VERSION = '0.140001';
use strict;
use warnings;
@@ -137,7 +134,7 @@ Dancer2::Core::HTTP - helper for rendering HTTP status codes for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 FUNCTIONS
@@ -167,7 +164,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Hook.pm b/lib/Dancer2/Core/Hook.pm
index 86a8f11..9125b1f 100644
--- a/lib/Dancer2/Core/Hook.pm
+++ b/lib/Dancer2/Core/Hook.pm
@@ -1,8 +1,6 @@
-# ABSTRACT: Manipulate hooks with Dancer2
package Dancer2::Core::Hook;
-{
- $Dancer2::Core::Hook::VERSION = '0.12';
-}
+# ABSTRACT: Manipulate hooks with Dancer2
+$Dancer2::Core::Hook::VERSION = '0.140001';
use Moo;
use Dancer2::Core::Types;
use Carp;
@@ -53,7 +51,7 @@ Dancer2::Core::Hook - Manipulate hooks with Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -106,7 +104,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/MIME.pm b/lib/Dancer2/Core/MIME.pm
index ae78a18..1645aaf 100644
--- a/lib/Dancer2/Core/MIME.pm
+++ b/lib/Dancer2/Core/MIME.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Class to ease manipulation of MIME types
package Dancer2::Core::MIME;
-{
- $Dancer2::Core::MIME::VERSION = '0.12';
-}
-
+$Dancer2::Core::MIME::VERSION = '0.140001';
use Moo;
use MIME::Types;
@@ -91,7 +88,7 @@ Dancer2::Core::MIME - Class to ease manipulation of MIME types
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -173,7 +170,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Request.pm b/lib/Dancer2/Core/Request.pm
index c7fa83e..f050fc9 100644
--- a/lib/Dancer2/Core/Request.pm
+++ b/lib/Dancer2/Core/Request.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Request;
-{
- $Dancer2::Core::Request::VERSION = '0.12';
-}
-
+$Dancer2::Core::Request::VERSION = '0.140001';
# ABSTRACT: Interface for accessing incoming requests
use Moo;
@@ -15,19 +12,11 @@ use URI::Escape;
use Dancer2::Core::Types;
use Dancer2::Core::Request::Upload;
+use Dancer2::Core::Cookie;
with 'Dancer2::Core::Role::Headers';
-
-# check presence of XS module to speedup request
-eval { require URL::Encode::XS; };
-our $XS_URL_DECODE = !$@;
-
-eval { require CGI::Deurl::XS; };
-our $XS_PARSE_QUERY_STRING = !$@;
-
-
# add an attribute for each HTTP_* variables
# (HOST is managed manually)
my @http_env_keys = (qw/
@@ -53,6 +42,15 @@ foreach my $attr ( @http_env_keys ) {
}
+# check presence of XS module to speedup request
+eval { require URL::Encode::XS; };
+our $XS_URL_DECODE = !$@;
+
+eval { require CGI::Deurl::XS; };
+our $XS_PARSE_QUERY_STRING = !$@;
+
+
+
# then all the native attributes
has env => (
is => 'ro',
@@ -225,10 +223,7 @@ sub host {
my ($self) = @_;
if ( $self->is_behind_proxy ) {
- my @hosts = split /\s*,\s*/, (
- $self->env->{HTTP_X_FORWARDED_HOST} || $self->env->{X_FORWARDED_HOST}
- );
-
+ my @hosts = split /\s*,\s*/, $self->env->{HTTP_X_FORWARDED_HOST}, 2;
return $hosts[0];
} else {
return $self->env->{'HTTP_HOST'};
@@ -242,7 +237,7 @@ sub host {
# aliases, kept for backward compat
sub agent { $_[0]->user_agent }
sub remote_address { $_[0]->address }
-sub forwarded_for_address { $_[0]->env->{'X_FORWARDED_FOR'} }
+sub forwarded_for_address { $_[0]->env->{HTTP_X_FORWARDED_FOR} }
sub address { $_[0]->env->{REMOTE_ADDR} }
sub remote_host { $_[0]->env->{REMOTE_HOST} }
sub protocol { $_[0]->env->{SERVER_PROTOCOL} }
@@ -257,9 +252,9 @@ sub scheme {
my ($self) = @_;
my $scheme;
if ( $self->is_behind_proxy ) {
+ # Note the 'HTTP_' prefix the PSGI spec adds to headers.
$scheme =
- $self->env->{'X_FORWARDED_PROTOCOL'}
- || $self->env->{'HTTP_X_FORWARDED_PROTOCOL'}
+ $self->env->{'HTTP_X_FORWARDED_PROTOCOL'}
|| $self->env->{'HTTP_X_FORWARDED_PROTO'}
|| $self->env->{'HTTP_FORWARDED_PROTO'}
|| "";
@@ -300,8 +295,11 @@ sub deserialize {
return unless $self->serializer->support_content_type($content_type);
+ # The latest draft of the RFC does not forbid DELETE to have content,
+ # rather the behaviour is undefined. Take the most lenient route and
+ # deserialize any content on delete as well.
return
- unless grep { $self->method eq $_ } qw/ PUT POST PATCH /;
+ unless grep { $self->method eq $_ } qw/ PUT POST PATCH DELETE /;
# try to deserialize
my $body = $self->_read_to_end();
@@ -393,7 +391,7 @@ sub forward {
my ( $self, $context, $url, $params, $options ) = @_;
my $new_request = $self->make_forward_to( $url, $params, $options );
- my $new_response = Dancer2->runner->server->dispatcher->dispatch(
+ my $new_response = Dancer2->runner->dispatcher->dispatch(
$new_request->env,
$new_request,
$context,
@@ -703,7 +701,7 @@ sub _init_request_headers {
( my $field = $_ ) =~ s/^HTTPS?_//;
( $field => $env->{$_} );
}
- grep {/^(?:HTTP|CONTENT|COOKIE)/i} keys %$env
+ grep {/^(?:HTTP|CONTENT)/i} keys %$env
)
);
}
@@ -752,13 +750,13 @@ has cookies => (
);
sub _build_cookies {
- my ($self) = @_;
+ my $self = shift;
+ my $cookies = {};
- my $env_str = $self->env->{COOKIE} || $self->env->{HTTP_COOKIE};
- return {} unless defined $env_str;
+ my $http_cookie = $self->header('Cookie');
+ return $cookies unless defined $http_cookie; # nothing to do
- my $cookies = {};
- foreach my $cookie ( split( /[,;]\s/, $env_str ) ) {
+ foreach my $cookie ( split( /[,;]\s/, $http_cookie ) ) {
# here, we don't want more than the 2 first elements
# a cookie string can contains something like:
@@ -788,7 +786,7 @@ Dancer2::Core::Request - Interface for accessing incoming requests
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -814,7 +812,7 @@ a Dancer2 application.
=head2 env()
-Return the current environment (C<%ENV>), as a hashref.
+Return the current PSGI environment hash reference.
=head2 path()
@@ -867,7 +865,7 @@ objects.
It uses the environment hash table given to build the request object:
- Dancer2::Core::Request->new(env => \%ENV);
+ Dancer2::Core::Request->new(env => \%env);
It also accepts the C<body_is_parsed> boolean flag, if the new request object should
not parse request body.
@@ -1064,11 +1062,10 @@ C<uploads>.
Returns a reference to a hash containing cookies, where the keys are the names of the
cookies and values are L<Dancer2::Core::Cookie> objects.
-=head1 HTTP environment variables
+=head1 Common HTTP request headers
-All HTTP environment variables that are in %ENV will be provided in the
-L<Dancer2::Core::Request> object through specific accessors, here are those
-supported:
+Commonly used client-supplied HTTP request headers are available through
+specific accessors, here are those supported:
=over 4
@@ -1108,6 +1105,13 @@ supported:
=back
+With the exception of C<host>, these accessors are lookups into the PSGI env
+hash reference.
+
+Note that the L<PSGI> specification prefixes client-supplied request headers with
+C<HTTP_>. For example, a C<X-Requested-With> header has the key
+C<HTTP_X_REQUESTED_WITH> in the PSGI env hashref.
+
=head1 EXTRA SPEED
Install URL::Encode::XS and CGI::Deurl::XS for extra speed.
@@ -1124,7 +1128,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Request/Upload.pm b/lib/Dancer2/Core/Request/Upload.pm
index 761d51b..2756a7a 100644
--- a/lib/Dancer2/Core/Request/Upload.pm
+++ b/lib/Dancer2/Core/Request/Upload.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Request::Upload;
-{
- $Dancer2::Core::Request::Upload::VERSION = '0.12';
-}
-
+$Dancer2::Core::Request::Upload::VERSION = '0.140001';
# ABSTRACT: Class representing file upload requests
use Moo;
@@ -106,7 +103,7 @@ Dancer2::Core::Request::Upload - Class representing file upload requests
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -184,7 +181,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Response.pm b/lib/Dancer2/Core/Response.pm
index c81401c..f85cd34 100644
--- a/lib/Dancer2/Core/Response.pm
+++ b/lib/Dancer2/Core/Response.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Response object for Dancer2
package Dancer2::Core::Response;
-{
- $Dancer2::Core::Response::VERSION = '0.12';
-}
-
+$Dancer2::Core::Response::VERSION = '0.140001';
use Moo;
use Encode;
@@ -103,6 +100,7 @@ before content => sub {
my $self = shift;
if (ref($_[0]) and $self->has_serializer) {
$_[0] = $self->serialize($_[0]);
+ $self->is_encoded(1); # All serializers return byte strings
}
};
@@ -212,7 +210,7 @@ Dancer2::Core::Response - Response object for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 ATTRIBUTES
@@ -294,7 +292,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Config.pm b/lib/Dancer2/Core/Role/ConfigReader.pm
similarity index 53%
rename from lib/Dancer2/Core/Role/Config.pm
rename to lib/Dancer2/Core/Role/ConfigReader.pm
index 7f7b5de..618b3da 100644
--- a/lib/Dancer2/Core/Role/Config.pm
+++ b/lib/Dancer2/Core/Role/ConfigReader.pm
@@ -1,19 +1,17 @@
# ABSTRACT: Config role for Dancer2 core objects
-package Dancer2::Core::Role::Config;
-{
- $Dancer2::Core::Role::Config::VERSION = '0.12';
-}
-
+package Dancer2::Core::Role::ConfigReader;
+$Dancer2::Core::Role::ConfigReader::VERSION = '0.140001';
use Moo::Role;
-use Dancer2::Core::Factory;
-use Dancer2::Core;
use File::Spec;
use Config::Any;
-use Dancer2::Core::Types;
-use Dancer2::FileUtils qw/dirname path/;
use Hash::Merge::Simple;
-use Carp 'croak', 'carp';
+use Carp qw/croak carp/;
+
+use Dancer2::Core::Factory;
+use Dancer2::Core;
+use Dancer2::Core::Types;
+use Dancer2::FileUtils qw/path/;
has location => (
is => 'ro',
@@ -21,6 +19,13 @@ has location => (
builder => '_build_location',
);
+has default_config => (
+ is => 'ro',
+ isa => HashRef,
+ lazy => 1,
+ builder => '_build_default_config',
+);
+
has config_location => (
is => 'ro',
isa => ReadableFilePath,
@@ -43,7 +48,6 @@ has environments_location => (
},
);
-# TODO: make readonly and add method rebuild_config?
has config => (
is => 'rw',
isa => HashRef,
@@ -51,13 +55,6 @@ has config => (
builder => '_build_config',
);
-has engines => (
- is => 'ro',
- isa => HashRef,
- lazy => 1,
- builder => '_build_engines',
-);
-
has environment => (
is => 'ro',
isa => Str,
@@ -65,33 +62,32 @@ has environment => (
builder => '_build_environment',
);
-has _engines_triggers => (
- is => 'ro',
- isa => HashRef,
+has config_files => (
+ is => 'rw',
lazy => 1,
- builder => '_build_engines_triggers',
+ isa => ArrayRef,
+ builder => '_build_config_files',
);
-has _config_triggers => (
+has local_triggers => (
is => 'ro',
isa => HashRef,
- lazy => 1,
- builder => '_build_config_triggers',
+ default => sub { +{} },
);
-has supported_engines => (
+has global_triggers => (
is => 'ro',
- isa => ArrayRef,
- lazy => 1,
- default => sub {[qw/logger serializer session template/]},
+ isa => HashRef,
+ default => sub { +{
+ traces => sub {
+ my ( $self, $traces ) = @_;
+ require Carp;
+ $Carp::Verbose = $traces ? 1 : 0;
+ },
+ } },
);
-has config_files => (
- is => 'rw',
- lazy => 1,
- isa => ArrayRef,
- builder => '_build_config_files',
-);
+sub _build_default_config { +{} }
sub _build_location { File::Spec->rel2abs('.') }
@@ -101,13 +97,13 @@ sub _build_environment {
sub _build_config_files {
my ($self) = @_;
- my $location = $self->config_location;
+ my $location = $self->config_location;
# an undef location means no config files for the caller
return [] unless defined $location;
my $running_env = $self->environment;
- my @exts = Config::Any->extensions;
+ my @exts = Config::Any->extensions;
my @files;
foreach my $ext (@exts) {
@@ -134,7 +130,7 @@ sub _build_config {
my $config = Hash::Merge::Simple->merge(
$default,
- map { $self->load_config_file($_) } @{ $self->config_files }
+ map +( $self->load_config_file($_) ), @{ $self->config_files }
);
$config = $self->_normalize_config($config);
@@ -246,187 +242,18 @@ sub _normalize_config_entry {
return $value;
}
-sub _build_engines_triggers {
- my $self = shift;
-
- my $triggers = {};
-
- foreach my $engine (@{$self->supported_engines}) {
- $triggers->{$engine} = sub {
- my ($self, $value, $config) = @_;
-
- return $value if ref($value);
-
- my $method = "_build_engine_$engine";
- my $e = $self->$method($value, $config);
- $self->engines->{$engine} = $e;
- return $e;
- };
- }
-
- return $triggers;
-}
-
-sub _build_config_triggers {
- my $self = shift;
-
- # TODO route_cache
- return {
- traces => sub {
- my ( $self, $traces ) = @_;
- require Carp;
- $Carp::Verbose = $traces ? 1 : 0;
- },
- views => sub {
- my ( $self, $value, $config ) = @_;
- $self->engine('template')->views($value);
- },
- layout => sub {
- my ( $self, $value, $config ) = @_;
- $self->engine('template')->layout($value);
- },
- };
-}
-
sub _compile_config_entry {
my ( $self, $name, $value, $config ) = @_;
- my $trigger;
-
- if (grep {$name eq $_} @{$self->supported_engines}) {
- $trigger = $self->_engines_triggers->{$name};
- }else{
- $trigger = $self->_config_triggers->{$name};
- }
+ my $trigger = exists $self->local_triggers->{$name} ?
+ $self->local_triggers->{$name} :
+ $self->global_triggers->{$name};
- return $value unless defined $trigger;
+ defined $trigger or return $value;
return $trigger->( $self, $value, $config );
}
-sub _get_config_for_engine {
- my ( $self, $engine, $name, $config ) = @_;
-
- my $default_config = {
- environment => $self->environment,
- location => $self->config_location,
- };
- return $default_config unless defined $config->{engines};
-
- if ( !defined $config->{engines}{$engine} ) {
- return $default_config;
- }
-
- my $engine_config = {};
-
- # XXX we need to move the camilize function out from Core::Factory
- # - Franck, 2013/08/03
- for my $config_key ($name, Dancer2::Core::camelize($name)) {
- $engine_config = $config->{engines}{$engine}{$config_key}
- if defined $config->{engines}->{$engine}{$config_key};
- }
- return { %{$default_config}, %{$engine_config}, } || $default_config;
-}
-
-sub _build_engines {
- my $self = shift;
- return {
- logger => $self->_build_engine_logger(),
- session => $self->_build_engine_session(),
- template => $self->_build_engine_template(),
- serializer => $self->_build_engine_serializer(),
- };
-}
-
-sub _build_engine_logger {
- my ($self, $value, $config) = @_;
-
- $config = $self->config if !defined $config;
- $value = $config->{logger} if !defined $value;
-
- return $value if ref($value);
-
- # XXX This is needed for the tests that create an app without
- # a runner.
- $value = 'console' if !defined $value;
-
- my $engine_options =
- $self->_get_config_for_engine( logger => $value, $config );
-
- my $logger = Dancer2::Core::Factory->create(
- logger => $value,
- %{$engine_options},
- app_name => $self->name,
- postponed_hooks => $self->get_postponed_hooks
- );
-
- $logger->log_level($config->{log}) if exists $config->{log};
-
- return $logger;
-}
-
-sub _build_engine_session {
- my ($self, $value, $config) = @_;
-
- $config = $self->config if !defined $config;
- $value = $config->{'session'} if !defined $value;
-
- $value = 'simple' if !defined $value;
- return $value if ref($value);
-
- my $engine_options =
- $self->_get_config_for_engine( session => $value, $config );
-
- return Dancer2::Core::Factory->create(
- session => $value,
- %{$engine_options},
- postponed_hooks => $self->get_postponed_hooks,
- );
-}
-
-sub _build_engine_template {
- my ($self, $value, $config) = @_;
-
- $config = $self->config if !defined $config;
- $value = $config->{'template'} if !defined $value;
-
- return undef if !defined $value;
- return $value if ref($value);
-
- my $engine_options =
- $self->_get_config_for_engine( template => $value, $config );
-
- my $engine_attrs = { config => $engine_options };
- $engine_attrs->{layout} ||= $config->{layout};
- $engine_attrs->{views} ||= $config->{views}
- || path( $self->location, 'views' );
-
- return Dancer2::Core::Factory->create(
- template => $value,
- %{$engine_attrs},
- postponed_hooks => $self->get_postponed_hooks,
- );
-}
-
-sub _build_engine_serializer {
- my ($self, $value, $config) = @_;
-
- $config = $self->config if !defined $config;
- $value = $config->{serializer} if !defined $value;
-
- return undef if !defined $value;
- return $value if ref($value);
-
- my $engine_options =
- $self->_get_config_for_engine( serializer => $value, $config );
-
- return Dancer2::Core::Factory->create(
- serializer => $value,
- config => $engine_options,
- postponed_hooks => $self->get_postponed_hooks,
- );
-}
-
1;
__END__
@@ -435,11 +262,11 @@ __END__
=head1 NAME
-Dancer2::Core::Role::Config - Config role for Dancer2 core objects
+Dancer2::Core::Role::ConfigReader - Config role for Dancer2 core objects
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -467,10 +294,6 @@ Gets the directory were the environment files are stored.
Returns the whole configuration.
-=head2 engines
-
-Returns all the engines.
-
=head2 environments
Returns the name of the environment.
@@ -479,22 +302,6 @@ Returns the name of the environment.
List of all the configuration files.
-=head2 supported_engines
-
-The list of engines supported by Dancer.
-
-=over 4
-
-=item logger
-
-=item serializer
-
-=item session
-
-=item template
-
-=back
-
=head1 ATTRIBUTES
=head1 METHODS
@@ -523,7 +330,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/DSL.pm b/lib/Dancer2/Core/Role/DSL.pm
index 1c6ce2a..f692bfe 100644
--- a/lib/Dancer2/Core/Role/DSL.pm
+++ b/lib/Dancer2/Core/Role/DSL.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for DSL
-
package Dancer2::Core::Role::DSL;
-{
- $Dancer2::Core::Role::DSL::VERSION = '0.12';
-}
+# ABSTRACT: Role for DSL
+$Dancer2::Core::Role::DSL::VERSION = '0.140001';
use Moo::Role;
use Dancer2::Core::Types;
use Carp 'croak';
@@ -107,7 +104,7 @@ Dancer2::Core::Role::DSL - Role for DSL
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -115,7 +112,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Engine.pm b/lib/Dancer2/Core/Role/Engine.pm
index c651031..eb0f294 100644
--- a/lib/Dancer2/Core/Role/Engine.pm
+++ b/lib/Dancer2/Core/Role/Engine.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for engines
-
package Dancer2::Core::Role::Engine;
-{
- $Dancer2::Core::Role::Engine::VERSION = '0.12';
-}
+# ABSTRACT: Role for engines
+$Dancer2::Core::Role::Engine::VERSION = '0.140001';
use Moo::Role;
use Dancer2::Core::Types;
@@ -42,7 +39,7 @@ Dancer2::Core::Role::Engine - Role for engines
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -71,7 +68,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Handler.pm b/lib/Dancer2/Core/Role/Handler.pm
index 70d79b1..c02a0c4 100644
--- a/lib/Dancer2/Core/Role/Handler.pm
+++ b/lib/Dancer2/Core/Role/Handler.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for Handlers
-
package Dancer2::Core::Role::Handler;
-{
- $Dancer2::Core::Role::Handler::VERSION = '0.12';
-}
+# ABSTRACT: Role for Handlers
+$Dancer2::Core::Role::Handler::VERSION = '0.140001';
use Moo::Role;
use Dancer2::Core::Types;
@@ -28,7 +25,7 @@ Dancer2::Core::Role::Handler - Role for Handlers
=head1 VERSION
-version 0.12
+version 0.140001
=head1 ATTRIBUTES
@@ -46,7 +43,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Headers.pm b/lib/Dancer2/Core/Role/Headers.pm
index f611d54..b2d7abc 100644
--- a/lib/Dancer2/Core/Role/Headers.pm
+++ b/lib/Dancer2/Core/Role/Headers.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Role for handling headers
package Dancer2::Core::Role::Headers;
-{
- $Dancer2::Core::Role::Headers::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::Headers::VERSION = '0.140001';
use Moo::Role;
use Dancer2::Core::Types;
@@ -83,7 +80,7 @@ Dancer2::Core::Role::Headers - Role for handling headers
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -131,7 +128,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Hookable.pm b/lib/Dancer2/Core/Role/Hookable.pm
index 4ac0245..c5cad97 100644
--- a/lib/Dancer2/Core/Role/Hookable.pm
+++ b/lib/Dancer2/Core/Role/Hookable.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for hookable objects
-
package Dancer2::Core::Role::Hookable;
-{
- $Dancer2::Core::Role::Hookable::VERSION = '0.12';
-}
+# ABSTRACT: Role for hookable objects
+$Dancer2::Core::Role::Hookable::VERSION = '0.140001';
use Moo::Role;
use Dancer2::Core;
use Dancer2::Core::Types;
@@ -157,7 +154,7 @@ Dancer2::Core::Role::Hookable - Role for hookable objects
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -165,7 +162,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Logger.pm b/lib/Dancer2/Core/Role/Logger.pm
index 877da5c..261a74f 100644
--- a/lib/Dancer2/Core/Role/Logger.pm
+++ b/lib/Dancer2/Core/Role/Logger.pm
@@ -1,14 +1,12 @@
-# ABSTRACT: Role for logger engines
-
package Dancer2::Core::Role::Logger;
-{
- $Dancer2::Core::Role::Logger::VERSION = '0.12';
-}
+# ABSTRACT: Role for logger engines
+$Dancer2::Core::Role::Logger::VERSION = '0.140001';
use Dancer2::Core::Types;
-use POSIX qw/strftime/;
-use Data::Dumper;
use Moo::Role;
+use POSIX 'strftime';
+use Data::Dumper;
+
with 'Dancer2::Core::Role::Engine';
sub supported_hooks {
@@ -177,7 +175,7 @@ Dancer2::Core::Role::Logger - Role for logger engines
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -312,7 +310,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Serializer.pm b/lib/Dancer2/Core/Role/Serializer.pm
index d668b3f..28975ff 100644
--- a/lib/Dancer2/Core/Role/Serializer.pm
+++ b/lib/Dancer2/Core/Role/Serializer.pm
@@ -1,12 +1,9 @@
-# ABSTRACT: Role for Serializer engines
-
package Dancer2::Core::Role::Serializer;
-{
- $Dancer2::Core::Role::Serializer::VERSION = '0.12';
-}
+# ABSTRACT: Role for Serializer engines
+$Dancer2::Core::Role::Serializer::VERSION = '0.140001';
use Dancer2::Core::Types;
-
use Moo::Role;
+
with 'Dancer2::Core::Role::Engine';
sub supported_hooks {
@@ -78,7 +75,7 @@ Dancer2::Core::Role::Serializer - Role for Serializer engines
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -86,7 +83,7 @@ Any class that consumes this role will be able to be used as a
serializer under Dancer2.
In order to implement this role, the consumer B<must> implement the
-methods C<serialize>, <deserialize> and C<loaded>, and should define
+methods C<serialize>, C<deserialize> and C<loaded>, and should define
the C<content_type> attribute value.
=head1 ATTRIBUTES
@@ -117,6 +114,9 @@ content type defined by the C<content_type> attribute.
A third optional argument is a hash reference of options to the
serializer.
+The serialize method must return bytes and therefore has to handle any
+encoding.
+
=head2 deserialize($content, [\%options])
The inverse method of C<serialize>. Receives the serializer class
@@ -126,6 +126,9 @@ return a reference to the deserialized Perl data structure.
A third optional argument is a hash reference of options to the
serializer.
+The deserialize method receives encoded bytes and must therefore
+handle any decoding required.
+
=head2 loaded
This method should return a boolean true value if the serializer is
@@ -142,7 +145,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Server.pm b/lib/Dancer2/Core/Role/Server.pm
deleted file mode 100644
index 518b353..0000000
--- a/lib/Dancer2/Core/Role/Server.pm
+++ /dev/null
@@ -1,191 +0,0 @@
-# ABSTRACT: Role for Server classes
-package Dancer2::Core::Role::Server;
-{
- $Dancer2::Core::Role::Server::VERSION = '0.12';
-}
-use Moo::Role;
-
-use Carp 'croak';
-use File::Spec;
-
-use Dancer2::Core::Types;
-use Dancer2::Core::App;
-use Dancer2::Core::Dispatcher;
-use Dancer2::Core::Response;
-use Dancer2::Core::Request;
-use Dancer2::Core::Context;
-
-requires '_build_name';
-
-has name => (
- is => 'ro',
- lazy => 1,
- builder => 1,
-);
-
-has host => (
- is => 'rw',
- isa => Str,
- required => 1,
-);
-
-has port => (
- is => 'rw',
- isa => Num,
- required => 1,
-);
-
-has is_daemon => (
- is => 'rw',
- isa => Bool,
-);
-
-has apps => (
- is => 'ro',
- isa => ArrayRef,
- default => sub { [] },
-);
-
-has dispatcher => (
- is => 'rw',
- isa => InstanceOf ['Dancer2::Core::Dispatcher'],
- lazy => 1,
- builder => '_build_dispatcher',
-);
-
-has postponed_hooks => (
- is => 'rw',
- isa => HashRef,
- default => sub { {} },
-);
-
-sub _build_dispatcher {
- my ($self) = @_;
- my $d = Dancer2::Core::Dispatcher->new();
- $d->apps( $self->apps );
- return $d;
-}
-
-# our PSGI application
-sub psgi_app {
- my ($self) = @_;
- sub {
- my ($env) = @_;
- my $app;
-
- eval { $app = $self->dispatcher->dispatch($env)->to_psgi; };
-
- if ($@) {
- return [
- 500,
- [ 'Content-Type' => 'text/plain' ],
- ["Internal Server Error\n\n$@"],
- ];
- }
- return $app;
- };
-}
-
-sub register_application {
- my ( $self, $app ) = @_;
- push @{ $self->apps }, $app;
- $app->server($self);
-
- # add postponed hooks to our app-global copy
- $self->add_postponed_hooks( $app->postponed_hooks );
-}
-
-sub add_postponed_hooks {
- my $self = shift;
- my $hooks = shift;
-
- $self->postponed_hooks( {
- %{ $self->postponed_hooks },
- %{ $hooks },
- } );
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Role::Server - Role for Server classes
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-This role defines what servers need to implement and provide some helpful
-attributes and methods for server implementations.
-
-This role requires implementations that consume it to provide a C<name>
-subroutine.
-
-=head1 ATTRIBUTES
-
-=head2 host
-
-Hostname to which the server will bind.
-
-B<Required>.
-
-=head2 port
-
-Port number to which the server will bind.
-
-B<Required>.
-
-=head2 is_daemon
-
-Boolean for whether the server should daemonize.
-
-=head2 apps
-
-An arrayref to hold Dancer2 applications.
-
-=head2 dispatcher
-
-A read/write attribute which holds the L<Dancer2::Core::Dispatcher> object, to
-dispatch an incoming request to the appropriate route.
-
-It has a lazy builder that creates a new dispatcher with the server's apps.
-
-=head2 postponed_hooks
-
-Postponed hooks will be applied at the end, when the hookable objects are
-instantiated, not before.
-
-=head1 METHODS
-
-=head2 psgi_app
-
-Returns a code reference of a proper PSGI reply to a dispatched request.
-
-It dispatches the request using the dispatcher (and provides the environment
-variables) and then calls C<to_psgi> and returns that reply wrapped in a code
-reference.
-
-Please review L<PSGI> for more details on the protocol and how it works.
-
-=head2 register_application
-
-Adds another application to the C<apps> attribute (see above).
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Role/SessionFactory.pm b/lib/Dancer2/Core/Role/SessionFactory.pm
index d58e61d..90725db 100644
--- a/lib/Dancer2/Core/Role/SessionFactory.pm
+++ b/lib/Dancer2/Core/Role/SessionFactory.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Role::SessionFactory;
-{
- $Dancer2::Core::Role::SessionFactory::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::SessionFactory::VERSION = '0.140001';
#ABSTRACT: Role for session factories
@@ -275,7 +272,7 @@ Dancer2::Core::Role::SessionFactory - Role for session factories
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -434,7 +431,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/SessionFactory/File.pm b/lib/Dancer2/Core/Role/SessionFactory/File.pm
index 1ffff4d..210fd7f 100644
--- a/lib/Dancer2/Core/Role/SessionFactory/File.pm
+++ b/lib/Dancer2/Core/Role/SessionFactory/File.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Role::SessionFactory::File;
-{
- $Dancer2::Core::Role::SessionFactory::File::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::SessionFactory::File::VERSION = '0.140001';
#ABSTRACT: Role for file-based session factories
@@ -117,7 +114,7 @@ Dancer2::Core::Role::SessionFactory::File - Role for file-based session factorie
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -173,7 +170,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/StandardResponses.pm b/lib/Dancer2/Core/Role/StandardResponses.pm
index da17ce5..90989e6 100644
--- a/lib/Dancer2/Core/Role/StandardResponses.pm
+++ b/lib/Dancer2/Core/Role/StandardResponses.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role to provide commonly used responses
-
package Dancer2::Core::Role::StandardResponses;
-{
- $Dancer2::Core::Role::StandardResponses::VERSION = '0.12';
-}
+# ABSTRACT: Role to provide commonly used responses
+$Dancer2::Core::Role::StandardResponses::VERSION = '0.140001';
use Moo::Role;
@@ -44,7 +41,7 @@ Dancer2::Core::Role::StandardResponses - Role to provide commonly used responses
=head1 VERSION
-version 0.12
+version 0.140001
=head1 METHODS
@@ -73,7 +70,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Template.pm b/lib/Dancer2/Core/Role/Template.pm
index ed32514..44be194 100644
--- a/lib/Dancer2/Core/Role/Template.pm
+++ b/lib/Dancer2/Core/Role/Template.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Role for template engines
package Dancer2::Core::Role::Template;
-{
- $Dancer2::Core::Role::Template::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::Template::VERSION = '0.140001';
use Dancer2::Core::Types;
use Dancer2::FileUtils qw'path';
use Carp 'croak';
@@ -202,7 +199,7 @@ Dancer2::Core::Role::Template - Role for template engines
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -275,7 +272,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Route.pm b/lib/Dancer2/Core/Route.pm
index 4bc26dd..16fcda5 100644
--- a/lib/Dancer2/Core/Route.pm
+++ b/lib/Dancer2/Core/Route.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Dancer2's route handler
package Dancer2::Core::Route;
-{
- $Dancer2::Core::Route::VERSION = '0.12';
-}
-
+$Dancer2::Core::Route::VERSION = '0.140001';
use strict;
use warnings;
@@ -236,7 +233,7 @@ Dancer2::Core::Route - Dancer2's route handler
=head1 VERSION
-version 0.12
+version 0.140001
=head1 ATTRIBUTES
@@ -281,7 +278,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Runner.pm b/lib/Dancer2/Core/Runner.pm
index ab315af..f6b29da 100644
--- a/lib/Dancer2/Core/Runner.pm
+++ b/lib/Dancer2/Core/Runner.pm
@@ -1,20 +1,14 @@
-# ABSTRACT: Top-layer class to start a dancer app
package Dancer2::Core::Runner;
-{
- $Dancer2::Core::Runner::VERSION = '0.12';
-}
-
+# ABSTRACT: Top-layer class to start a dancer app
+$Dancer2::Core::Runner::VERSION = '0.140001';
use Moo;
-use Carp 'croak';
-use Class::Load 'try_load_class';
-use Dancer2::Core::Types;
use Dancer2::Core::MIME;
+use Dancer2::Core::Types;
+use Dancer2::Core::Dispatcher;
+use HTTP::Server::PSGI;
+use Plack::Builder qw();
-use File::Spec;
-use File::Basename;
-use Dancer2::FileUtils;
-
-with 'Dancer2::Core::Role::Config';
+with 'Dancer2::Core::Role::ConfigReader';
# the path to the caller script that is starting the app
# mandatory, because we use that to determine where the appdir is.
@@ -24,59 +18,77 @@ has caller => (
required => 1,
);
+# FIXME: i hate this
+has mime_type => (
+ is => 'ro',
+ isa => InstanceOf ['Dancer2::Core::MIME'],
+ default => sub { Dancer2::Core::MIME->new(); },
+);
+
has server => (
is => 'ro',
- isa => ConsumerOf ['Dancer2::Core::Role::Server'],
+ isa => InstanceOf['HTTP::Server::PSGI'],
lazy => 1,
builder => '_build_server',
+ handles => ['run'],
);
-has mime_type => (
+has apps => (
is => 'ro',
- isa => InstanceOf ['Dancer2::Core::MIME'],
- default => sub { Dancer2::Core::MIME->new(); },
+ isa => ArrayRef,
+ default => sub { [] },
);
-# when the runner is created, it has to init the server instance
-# according to the configuration
-sub _build_server {
- my $self = shift;
- my $server_name = $self->config->{apphandler};
- my $server_class = "Dancer2::Core::Server::${server_name}";
+has dispatcher => (
+ is => 'rw',
+ isa => InstanceOf ['Dancer2::Core::Dispatcher'],
+ lazy => 1,
+ builder => '_build_dispatcher',
+);
- my ( $ok, $error ) =try_load_class($server_class);
- $ok or croak "Unable to load $server_class: $error\n";
+has postponed_hooks => (
+ is => 'ro',
+ isa => HashRef,
+ default => sub { +{} },
+);
- return $server_class->new(
- host => $self->config->{host},
- port => $self->config->{port},
- is_daemon => $self->config->{is_daemon},
- );
-}
+# FIXME: this should be in the configuration
+has host => (
+ is => 'ro',
+ lazy => 1,
+ default => sub { $_[0]->config->{'host'} },
+);
+
+has port => (
+ is => 'ro',
+ lazy => 1,
+ default => sub { $_[0]->config->{'port'} },
+);
-# our Config role needs a default_config hash
-sub default_config {
+has timeout => (
+ is => 'ro',
+ lazy => 1,
+ default => sub { $_[0]->config->{'timeout'} },
+);
- $ENV{PLACK_ENV}
- and $ENV{DANCER_APPHANDLER} = 'PSGI';
+sub _build_dispatcher {
+ my $self = shift;
+ # FIXME: ::Dispatcher::apps attr is readwrite, why?
+ return Dancer2::Core::Dispatcher->new( apps => $self->apps );
+}
- my ($self) = @_;
- { apphandler => ( $ENV{DANCER_APPHANDLER} || 'Standalone' ),
- content_type => ( $ENV{DANCER_CONTENT_TYPE} || 'text/html' ),
- charset => ( $ENV{DANCER_CHARSET} || '' ),
- warnings => ( $ENV{DANCER_WARNINGS} || 0 ),
- startup_info => ( $ENV{DANCER_STARTUP_INFO} || 1 ),
- traces => ( $ENV{DANCER_TRACES} || 0 ),
- logger => ( $ENV{DANCER_LOGGER} || 'console' ),
- host => ( $ENV{DANCER_SERVER} || '0.0.0.0' ),
- port => ( $ENV{DANCER_PORT} || '3000' ),
- is_daemon => ( $ENV{DANCER_DAEMON} || 0 ),
- views => ( $ENV{DANCER_VIEWS}
- || path( $self->config_location, 'views' ) ),
- appdir => $self->location,
- };
+sub _build_server {
+ my $self = shift;
+
+ HTTP::Server::PSGI->new(
+ host => $self->host,
+ port => $self->port,
+ timeout => $self->timeout,
+ server_software => "Perl Dancer2 $Dancer2::VERSION",
+ );
}
+# FIXME: i hate you most of all
sub _build_location {
my $self = shift;
my $script = $self->caller;
@@ -120,6 +132,28 @@ sub _build_location {
return File::Spec->rel2abs($path);
}
+sub _build_default_config {
+ my $self = shift;
+
+ $ENV{PLACK_ENV}
+ and $ENV{DANCER_APPHANDLER} = 'PSGI';
+
+ return {
+ apphandler => ( $ENV{DANCER_APPHANDLER} || 'Standalone' ),
+ content_type => ( $ENV{DANCER_CONTENT_TYPE} || 'text/html' ),
+ charset => ( $ENV{DANCER_CHARSET} || '' ),
+ warnings => ( $ENV{DANCER_WARNINGS} || 0 ),
+ startup_info => ( $ENV{DANCER_STARTUP_INFO} || 1 ),
+ traces => ( $ENV{DANCER_TRACES} || 0 ),
+ logger => ( $ENV{DANCER_LOGGER} || 'console' ),
+ host => ( $ENV{DANCER_SERVER} || '0.0.0.0' ),
+ port => ( $ENV{DANCER_PORT} || '3000' ),
+ views => ( $ENV{DANCER_VIEWS}
+ || path( $self->config_location, 'views' ) ),
+ appdir => $self->location,
+ };
+}
+
sub BUILD {
my $self = shift;
@@ -135,100 +169,120 @@ sub BUILD {
or $Dancer2::runner = $self;
}
-sub start {
- my ($self) = @_;
- my $server = $self->server;
-
- foreach my $app ( @{ $server->apps } ) {
- $app->finish;
- }
+sub register_application {
+ my $self = shift;
+ my $app = shift;
- # update the server config if needed
- my $port = $self->setting('server_port');
- my $host = $self->setting('server_host');
- my $is_daemon = $self->setting('server_is_daemon');
+ push @{ $self->apps }, $app;
- $server->port($port) if defined $port;
- $server->host($host) if defined $host;
- $server->is_daemon($is_daemon) if defined $is_daemon;
- $server->start;
+ # add postponed hooks to our psgi app
+ $self->add_postponed_hooks( $app->postponed_hooks );
}
-# Used by 'logger' to get a name from a Runner
-sub name {"runner"}
-
-1;
-
-#still exists?
-#=method BUILD
-#
-#The builder initializes the proper server instance (C<Dancer2::Core::Server::*>)
-#and sets the C<server> attribute to it.
-#
-#=method get_environment
-#
-#Returns the environment. Same as C<< $object->environment >>.
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Runner - Top-layer class to start a dancer app
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-Runs Dancer2 app.
-
-Inherits from L<Dancer2::Core::Role::Config>.
-
-=head2 environment
-
-The environment string. The options, in this order, are:
-
-=over 4
+sub add_postponed_hooks {
+ my $self = shift;
+ my $hooks = shift;
-=item * C<DANCER_ENVIRONMENT>
+ # merge postponed hooks
+ @{ $self->{'postponed_hooks'} }{ keys %{$hooks} } = values %{$hooks};
+}
-=item * C<PLACK_ENV>
+# decide what to start
+# do we just return a PSGI app
+# or do we actually start a development standalone server?
+sub start {
+ my $self = shift;
+ my $app = $self->psgi_app;
-=item * C<development>
+ # we decide whether we return a PSGI coderef
+ # or spin a local development PSGI server
+ $self->config->{'apphandler'} eq 'PSGI'
+ and return $app;
-=back
+ # FIXME: this should not include the server tokens
+ # since those are already added to the server itself
+ $self->start_server($app);
+}
-=head1 ATTRIBUTES
+sub start_server {
+ my $self = shift;
+ my $app = shift;
-=head2 caller
+ # does not return
+ $self->print_banner;
+ $self->server->run($app);
+}
-The path to the caller script that is starting the app.
+sub psgi_app {
+ my $self = shift;
+ my $server = $self->server;
-This is required in order to determine where the appdir is.
+ foreach my $app ( @{ $self->apps } ) {
+ $app->finish;
+ }
-=head2 server
+ # eval entire request to catch any internal errors
+ my $psgi = sub {
+ my $env = shift;
+ my $response;
+
+ eval {
+ $response = $self->dispatcher->dispatch($env)->to_psgi;
+ 1;
+ } or do {
+ return [
+ 500,
+ [ 'Content-Type' => 'text/plain' ],
+ [ "Internal Server Error\n\n$@" ],
+ ];
+ };
+
+ return $response;
+ };
-A read/write attribute to that holds the proper server.
+ my $builder = Plack::Builder->new;
+ $builder->add_middleware('Head');
+ return $builder->wrap($psgi);
+}
-It checks for an object that consumes the L<Dancer2::Core::Role::Server> role.
+sub print_banner {
+ my $self = shift;
+ my $pid = $$;
+
+ # we only print the info if we need to
+ # FIXME: go to the configuration
+ #Dancer2->runner->config->{'startup_info'} or return;
+
+ # bare minimum
+ print STDERR ">> Dancer2 v$Dancer2::VERSION server $pid listening "
+ . 'on http://'
+ . $self->host . ':'
+ . $self->port . "\n";
+
+ # all loaded plugins
+ foreach my $module ( grep { $_ =~ m{^Dancer2/Plugin/} } keys %INC ) {
+ $module =~ s{/}{::}g; # change / to ::
+ $module =~ s{\.pm$}{}; # remove .pm at the end
+ my $version = $module->VERSION;
+
+ defined $version or $version = 'no version number defined';
+ print STDERR ">> $module ($version)\n";
+ }
+}
-=head2 mime_type
+1;
-A read/write attribute that holds a L<Dancer2::Core::MIME> object.
+__END__
-=head1 METHODS
+=pod
-=head2 default_config
+=head1 NAME
-It then sets up the default configuration.
+Dancer2::Core::Runner - Top-layer class to start a dancer app
-=head2 start
+=head1 VERSION
-Runs C<finish> (to set everything up) on all of the server's applications. It
-then Sets up the current server and starts it by calling its C<start> method.
+version 0.140001
=head1 AUTHOR
@@ -236,7 +290,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Server/PSGI.pm b/lib/Dancer2/Core/Server/PSGI.pm
deleted file mode 100644
index 1c8f321..0000000
--- a/lib/Dancer2/Core/Server/PSGI.pm
+++ /dev/null
@@ -1,60 +0,0 @@
-# ABSTRACT: Dummy class for passing the PSGI app to a PSGI server
-
-package Dancer2::Core::Server::PSGI;
-{
- $Dancer2::Core::Server::PSGI::VERSION = '0.12';
-}
-use Moo;
-use Carp;
-use Plack::Request;
-
-with 'Dancer2::Core::Role::Server';
-
-
-sub start {
- my ($self) = @_;
- $self->psgi_app;
-}
-
-sub _build_name {'PSGI'}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Server::PSGI - Dummy class for passing the PSGI app to a PSGI server
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-When used as a server, this class just return the PSGI application.
-
-=head1 METHODS
-
-=head2 name
-
-The server's name: B<PSGI>.
-
-=head2 start
-
-Return the PSGI application
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Server/Standalone.pm b/lib/Dancer2/Core/Server/Standalone.pm
deleted file mode 100644
index 88cb910..0000000
--- a/lib/Dancer2/Core/Server/Standalone.pm
+++ /dev/null
@@ -1,125 +0,0 @@
-# ABSTRACT: Basic standalone HTTP server for Dancer2
-
-package Dancer2::Core::Server::Standalone;
-{
- $Dancer2::Core::Server::Standalone::VERSION = '0.12';
-}
-
-use Moo;
-use Dancer2::Core::Types;
-with 'Dancer2::Core::Role::Server';
-use parent 'HTTP::Server::Simple::PSGI';
-
-
-sub _build_name {'Standalone'}
-
-
-has backend => (
- is => 'ro',
- isa => InstanceOf ['HTTP::Server::Simple::PSGI'],
- lazy => 1,
- builder => '_build_backend',
-);
-
-sub _build_backend {
- my $self = shift;
- $self->app( $self->psgi_app );
- return $self;
-}
-
-
-sub start {
- my $self = shift;
-
- $self->is_daemon
- ? $self->backend->background()
- : $self->backend->run();
-
-}
-
-sub print_banner {
- my $self = shift;
- my $pid = $$; #Todo:how to get background pid?
-
- # we only print the info if we need to
- Dancer2->runner->config->{'startup_info'} or return;
-
- # bare minimum
- print STDERR ">> Dancer2 v$Dancer2::VERSION server $pid listening "
- . 'on http://'
- . $self->host . ':'
- . $self->port . "\n";
-
- # all loaded plugins
- foreach my $module ( grep { $_ =~ m{^Dancer2/Plugin/} } keys %INC ) {
- $module =~ s{/}{::}g; # change / to ::
- $module =~ s{\.pm$}{}; # remove .pm at the end
- my $version = $module->VERSION;
-
- defined $version or $version = 'no version number defined';
- print STDERR ">> $module ($version)\n";
- }
-
-}
-
-
-sub valid_http_method {
- my $self = shift;
- my $method = shift or return 0;
- return $method =~ /^(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH)$/;
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Server::Standalone - Basic standalone HTTP server for Dancer2
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-This is a server implementation for a stand-alone server. It contains all the
-code to start an L<HTTP::Server::Simple::PSGI> server and handle the requests.
-
-This class consumes the role L<Dancer2::Core::Server::Standalone>.
-
-=head1 ATTRIBUTES
-
-=head2 backend
-
-A L<HTTP::Server::Simple::PSGI> server.
-
-=head1 METHODS
-
-=head2 name
-
-The server's name: B<Standalone>.
-
-=head2 start
-
-Starts the server.
-
-=head2 valid_http_method
-
-Overrides method inherited from L<HTTP::Server::Simple>, allowing C<GET>, C<POST>,
-C<HEAD>, C<PUT>, C<DELETE>, C<OPTIONS> and C<PATCH> requests.
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Session.pm b/lib/Dancer2/Core/Session.pm
index 251699d..4c951f6 100644
--- a/lib/Dancer2/Core/Session.pm
+++ b/lib/Dancer2/Core/Session.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Session;
-{
- $Dancer2::Core::Session::VERSION = '0.12';
-}
-
+$Dancer2::Core::Session::VERSION = '0.140001';
#ABSTRACT: class to represent any session object
@@ -80,7 +77,7 @@ Dancer2::Core::Session - class to represent any session object
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -157,7 +154,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Time.pm b/lib/Dancer2/Core/Time.pm
index 53a3461..cb631a5 100644
--- a/lib/Dancer2/Core/Time.pm
+++ b/lib/Dancer2/Core/Time.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Time;
-{
- $Dancer2::Core::Time::VERSION = '0.12';
-}
-
+$Dancer2::Core::Time::VERSION = '0.140001';
#ABSTRACT: class to handle common helpers for time manipulations
@@ -144,7 +141,7 @@ Dancer2::Core::Time - class to handle common helpers for time manipulations
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -203,7 +200,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Types.pm b/lib/Dancer2/Core/Types.pm
index c006bbb..0470ac2 100644
--- a/lib/Dancer2/Core/Types.pm
+++ b/lib/Dancer2/Core/Types.pm
@@ -1,8 +1,5 @@
package Dancer2::Core::Types;
-{
- $Dancer2::Core::Types::VERSION = '0.12';
-}
-
+$Dancer2::Core::Types::VERSION = '0.140001';
# ABSTRACT: Moo types for Dancer2 core.
use strict;
@@ -149,7 +146,7 @@ Dancer2::Core::Types - Moo types for Dancer2 core.
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -200,7 +197,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/FileUtils.pm b/lib/Dancer2/FileUtils.pm
index c429d71..8879aa8 100644
--- a/lib/Dancer2/FileUtils.pm
+++ b/lib/Dancer2/FileUtils.pm
@@ -1,10 +1,7 @@
# ABSTRACT: File utility helpers
package Dancer2::FileUtils;
-{
- $Dancer2::FileUtils::VERSION = '0.12';
-}
-
+$Dancer2::FileUtils::VERSION = '0.140001';
use strict;
use warnings;
@@ -114,7 +111,7 @@ Dancer2::FileUtils - File utility helpers
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -232,7 +229,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Handler/AutoPage.pm b/lib/Dancer2/Handler/AutoPage.pm
index 8503352..c5b032b 100644
--- a/lib/Dancer2/Handler/AutoPage.pm
+++ b/lib/Dancer2/Handler/AutoPage.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class for handling the AutoPage feature
-
package Dancer2::Handler::AutoPage;
-{
- $Dancer2::Handler::AutoPage::VERSION = '0.12';
-}
+# ABSTRACT: Class for handling the AutoPage feature
+$Dancer2::Handler::AutoPage::VERSION = '0.140001';
use Moo;
use Carp 'croak';
use Dancer2::Core::Types;
@@ -64,7 +61,7 @@ Dancer2::Handler::AutoPage - Class for handling the AutoPage feature
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -111,7 +108,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Handler/File.pm b/lib/Dancer2/Handler/File.pm
index b5c4af7..7d12367 100644
--- a/lib/Dancer2/Handler/File.pm
+++ b/lib/Dancer2/Handler/File.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: class for handling file content rendering
-
package Dancer2::Handler::File;
-{
- $Dancer2::Handler::File::VERSION = '0.12';
-}
+# ABSTRACT: class for handling file content rendering
+$Dancer2::Handler::File::VERSION = '0.140001';
use Carp 'croak';
use Moo;
use HTTP::Date;
@@ -145,7 +142,7 @@ Dancer2::Handler::File - class for handling file content rendering
=head1 VERSION
-version 0.12
+version 0.140001
=head1 AUTHOR
@@ -153,7 +150,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Capture.pm b/lib/Dancer2/Logger/Capture.pm
index db6bd04..98fd4e4 100644
--- a/lib/Dancer2/Logger/Capture.pm
+++ b/lib/Dancer2/Logger/Capture.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Capture dancer logs
-
package Dancer2::Logger::Capture;
-{
- $Dancer2::Logger::Capture::VERSION = '0.12';
-}
+# ABSTRACT: Capture dancer logs
+$Dancer2::Logger::Capture::VERSION = '0.140001';
use Moo;
use Dancer2::Logger::Capture::Trap;
@@ -37,7 +34,7 @@ Dancer2::Logger::Capture - Capture dancer logs
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -91,7 +88,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Capture/Trap.pm b/lib/Dancer2/Logger/Capture/Trap.pm
index f11bc9e..079e953 100644
--- a/lib/Dancer2/Logger/Capture/Trap.pm
+++ b/lib/Dancer2/Logger/Capture/Trap.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: a place to store captured Dancer2 logs
-
package Dancer2::Logger::Capture::Trap;
-{
- $Dancer2::Logger::Capture::Trap::VERSION = '0.12';
-}
+# ABSTRACT: a place to store captured Dancer2 logs
+$Dancer2::Logger::Capture::Trap::VERSION = '0.140001';
use Moo;
use Dancer2::Core::Types;
@@ -38,7 +35,7 @@ Dancer2::Logger::Capture::Trap - a place to store captured Dancer2 logs
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -83,7 +80,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Console.pm b/lib/Dancer2/Logger/Console.pm
index 75963dd..0846059 100644
--- a/lib/Dancer2/Logger/Console.pm
+++ b/lib/Dancer2/Logger/Console.pm
@@ -1,10 +1,8 @@
-# ABSTRACT: Console logger
-
package Dancer2::Logger::Console;
-{
- $Dancer2::Logger::Console::VERSION = '0.12';
-}
+# ABSTRACT: Console logger
+$Dancer2::Logger::Console::VERSION = '0.140001';
use Moo;
+
with 'Dancer2::Core::Role::Logger';
sub log {
@@ -24,7 +22,7 @@ Dancer2::Logger::Console - Console logger
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -56,7 +54,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Diag.pm b/lib/Dancer2/Logger/Diag.pm
index 3b11c35..9cb2f99 100644
--- a/lib/Dancer2/Logger/Diag.pm
+++ b/lib/Dancer2/Logger/Diag.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Test::More diag() logging engine for Dancer2
-
package Dancer2::Logger::Diag;
-{
- $Dancer2::Logger::Diag::VERSION = '0.12';
-}
+# ABSTRACT: Test::More diag() logging engine for Dancer2
+$Dancer2::Logger::Diag::VERSION = '0.140001';
use Moo;
use Test::More;
+
with 'Dancer2::Core::Role::Logger';
@@ -28,7 +26,7 @@ Dancer2::Logger::Diag - Test::More diag() logging engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -49,7 +47,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/File.pm b/lib/Dancer2/Logger/File.pm
index 67e1b90..266c922 100644
--- a/lib/Dancer2/Logger/File.pm
+++ b/lib/Dancer2/Logger/File.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: file-based logging engine for Dancer2
-
package Dancer2::Logger::File;
-{
- $Dancer2::Logger::File::VERSION = '0.12';
-}
+# ABSTRACT: file-based logging engine for Dancer2
+$Dancer2::Logger::File::VERSION = '0.140001';
use Carp 'carp';
use Moo;
use Dancer2::Core::Types;
@@ -85,7 +82,7 @@ Dancer2::Logger::File - file-based logging engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -128,7 +125,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Note.pm b/lib/Dancer2/Logger/Note.pm
index ca03532..4cd6c2f 100644
--- a/lib/Dancer2/Logger/Note.pm
+++ b/lib/Dancer2/Logger/Note.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Test::More note() logging engine for Dancer2
-
package Dancer2::Logger::Note;
-{
- $Dancer2::Logger::Note::VERSION = '0.12';
-}
+# ABSTRACT: Test::More note() logging engine for Dancer2
+$Dancer2::Logger::Note::VERSION = '0.140001';
use Moo;
use Test::More;
+
with 'Dancer2::Core::Role::Logger';
@@ -27,7 +25,7 @@ Dancer2::Logger::Note - Test::More note() logging engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -51,7 +49,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Null.pm b/lib/Dancer2/Logger/Null.pm
index 9bf1ec9..88b5aef 100644
--- a/lib/Dancer2/Logger/Null.pm
+++ b/lib/Dancer2/Logger/Null.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Blackhole-like silent logging engine for Dancer2
-
package Dancer2::Logger::Null;
-{
- $Dancer2::Logger::Null::VERSION = '0.12';
-}
+# ABSTRACT: Blackhole-like silent logging engine for Dancer2
+$Dancer2::Logger::Null::VERSION = '0.140001';
use Moo;
with 'Dancer2::Core::Role::Logger';
@@ -22,7 +19,7 @@ Dancer2::Logger::Null - Blackhole-like silent logging engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -41,7 +38,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Manual.pod b/lib/Dancer2/Manual.pod
index 87161b0..ed1db63 100644
--- a/lib/Dancer2/Manual.pod
+++ b/lib/Dancer2/Manual.pod
@@ -1,6 +1,6 @@
# ABSTRACT: A gentle introduction to Dancer2
package Dancer2::Manual;
-
+$Dancer2::Manual::VERSION = '0.140001';
__END__
=pod
@@ -11,7 +11,7 @@ Dancer2::Manual - A gentle introduction to Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -1657,7 +1657,7 @@ versions:
Provides an accessor for variables shared between filters and route handlers.
Given a key/value pair, it sets a variable:
- hook before sub {
+ hook before => sub {
var foo => 42;
};
@@ -1693,7 +1693,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugin.pm b/lib/Dancer2/Plugin.pm
index dd444d3..ea82f96 100644
--- a/lib/Dancer2/Plugin.pm
+++ b/lib/Dancer2/Plugin.pm
@@ -1,8 +1,5 @@
package Dancer2::Plugin;
-{
- $Dancer2::Plugin::VERSION = '0.12';
-}
-
+$Dancer2::Plugin::VERSION = '0.140001';
# ABSTRACT: Extending Dancer2's DSL with plugins
@@ -261,7 +258,7 @@ Dancer2::Plugin - Extending Dancer2's DSL with plugins
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -450,7 +447,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugin/Ajax.pm b/lib/Dancer2/Plugin/Ajax.pm
index b43b73f..bd4b59b 100644
--- a/lib/Dancer2/Plugin/Ajax.pm
+++ b/lib/Dancer2/Plugin/Ajax.pm
@@ -1,10 +1,7 @@
# ABSTRACT: a plugin for adding Ajax route handlers
package Dancer2::Plugin::Ajax;
-{
- $Dancer2::Plugin::Ajax::VERSION = '0.12';
-}
-
+$Dancer2::Plugin::Ajax::VERSION = '0.140001';
use strict;
use warnings;
@@ -65,7 +62,7 @@ Dancer2::Plugin::Ajax - a plugin for adding Ajax route handlers
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -126,7 +123,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugins.pod b/lib/Dancer2/Plugins.pod
index e2c1f79..960137b 100644
--- a/lib/Dancer2/Plugins.pod
+++ b/lib/Dancer2/Plugins.pod
@@ -1,6 +1,6 @@
package Dancer2::Plugins;
# ABSTRACT: Recommended Dancer2 plugins
-
+$Dancer2::Plugins::VERSION = '0.140001';
__END__
=pod
@@ -11,7 +11,7 @@ Dancer2::Plugins - Recommended Dancer2 plugins
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -126,7 +126,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/Dumper.pm b/lib/Dancer2/Serializer/Dumper.pm
index 6be8c5e..d152b00 100644
--- a/lib/Dancer2/Serializer/Dumper.pm
+++ b/lib/Dancer2/Serializer/Dumper.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Serializer for handling Dumper data
package Dancer2::Serializer::Dumper;
-{
- $Dancer2::Serializer::Dumper::VERSION = '0.12';
-}
-
+$Dancer2::Serializer::Dumper::VERSION = '0.140001';
use Moo;
use Carp 'croak';
use Data::Dumper;
@@ -56,7 +53,7 @@ Dancer2::Serializer::Dumper - Serializer for handling Dumper data
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -101,7 +98,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/JSON.pm b/lib/Dancer2/Serializer/JSON.pm
index 17ca8f1..3128c13 100644
--- a/lib/Dancer2/Serializer/JSON.pm
+++ b/lib/Dancer2/Serializer/JSON.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Serializer for handling JSON data
-
package Dancer2::Serializer::JSON;
-{
- $Dancer2::Serializer::JSON::VERSION = '0.12';
-}
+# ABSTRACT: Serializer for handling JSON data
+$Dancer2::Serializer::JSON::VERSION = '0.140001';
use Moo;
use JSON ();
@@ -61,7 +58,7 @@ Dancer2::Serializer::JSON - Serializer for handling JSON data
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -104,7 +101,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/YAML.pm b/lib/Dancer2/Serializer/YAML.pm
index 482070a..b6b1002 100644
--- a/lib/Dancer2/Serializer/YAML.pm
+++ b/lib/Dancer2/Serializer/YAML.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Serializer for handling YAML data
-
package Dancer2::Serializer::YAML;
-{
- $Dancer2::Serializer::YAML::VERSION = '0.12';
-}
+# ABSTRACT: Serializer for handling YAML data
+$Dancer2::Serializer::YAML::VERSION = '0.140001';
use Moo;
use Carp 'croak';
+use Encode;
with 'Dancer2::Core::Role::Serializer';
has '+content_type' => (default => 'text/x-yaml');
@@ -26,17 +24,17 @@ sub to_yaml {
# class definition
-sub BUILD { eval "use YAML::Any ()"; croak "Fail to load YAML: $@" if $@ }
+sub BUILD { eval "use YAML ()"; croak "Fail to load YAML: $@" if $@ }
sub loaded {1}
sub serialize {
my ( $self, $entity ) = @_;
- YAML::Any::Dump($entity);
+ encode('UTF-8', YAML::Dump($entity));
}
sub deserialize {
my ( $self, $content ) = @_;
- YAML::Any::Load($content);
+ YAML::Load(decode('UTF-8', $content));
}
1;
@@ -51,7 +49,7 @@ Dancer2::Serializer::YAML - Serializer for handling YAML data
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -94,7 +92,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Session/Simple.pm b/lib/Dancer2/Session/Simple.pm
index 2e1bde1..cb47bb0 100644
--- a/lib/Dancer2/Session/Simple.pm
+++ b/lib/Dancer2/Session/Simple.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: in-memory session backend for Dancer2
-
package Dancer2::Session::Simple;
-{
- $Dancer2::Session::Simple::VERSION = '0.12';
-}
+# ABSTRACT: in-memory session backend for Dancer2
+$Dancer2::Session::Simple::VERSION = '0.140001';
use Moo;
use Dancer2::Core::Types;
use Carp;
@@ -51,7 +48,7 @@ Dancer2::Session::Simple - in-memory session backend for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -80,7 +77,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Session/YAML.pm b/lib/Dancer2/Session/YAML.pm
index 5282de7..af4e414 100644
--- a/lib/Dancer2/Session/YAML.pm
+++ b/lib/Dancer2/Session/YAML.pm
@@ -1,13 +1,10 @@
package Dancer2::Session::YAML;
-{
- $Dancer2::Session::YAML::VERSION = '0.12';
-}
-
+$Dancer2::Session::YAML::VERSION = '0.140001';
# ABSTRACT: YAML-file-based session backend for Dancer2
use Moo;
use Dancer2::Core::Types;
-use YAML::Any;
+use YAML;
has _suffix => (
is => 'ro',
@@ -19,13 +16,13 @@ with 'Dancer2::Core::Role::SessionFactory::File';
sub _freeze_to_handle {
my ( $self, $fh, $data ) = @_;
- print {$fh} YAML::Any::Dump($data);
+ print {$fh} YAML::Dump($data);
return;
}
sub _thaw_from_handle {
my ( $self, $fh ) = @_;
- return YAML::Any::LoadFile($fh);
+ return YAML::LoadFile($fh);
}
1;
@@ -40,7 +37,7 @@ Dancer2::Session::YAML - YAML-file-based session backend for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -87,7 +84,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Implementation/ForkedTiny.pm b/lib/Dancer2/Template/Implementation/ForkedTiny.pm
index 8bc87d0..9207d96 100644
--- a/lib/Dancer2/Template/Implementation/ForkedTiny.pm
+++ b/lib/Dancer2/Template/Implementation/ForkedTiny.pm
@@ -1,8 +1,5 @@
package Dancer2::Template::Implementation::ForkedTiny;
-{
- $Dancer2::Template::Implementation::ForkedTiny::VERSION = '0.12';
-}
-
+$Dancer2::Template::Implementation::ForkedTiny::VERSION = '0.140001';
# ABSTRACT: Dancer2 own implementation of Template::Tiny
use 5.00503;
@@ -230,7 +227,7 @@ Dancer2::Template::Implementation::ForkedTiny - Dancer2 own implementation of Te
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -387,7 +384,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Simple.pm b/lib/Dancer2/Template/Simple.pm
index 3728af7..d142c34 100644
--- a/lib/Dancer2/Template/Simple.pm
+++ b/lib/Dancer2/Template/Simple.pm
@@ -1,9 +1,6 @@
-#ABSTRACT: Pure Perl 5 template engine for Dancer2
-
package Dancer2::Template::Simple;
-{
- $Dancer2::Template::Simple::VERSION = '0.12';
-}
+# ABSTRACT: Pure Perl 5 template engine for Dancer2
+$Dancer2::Template::Simple::VERSION = '0.140001';
use strict;
use warnings;
use Moo;
@@ -157,7 +154,7 @@ Dancer2::Template::Simple - Pure Perl 5 template engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -214,7 +211,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/TemplateToolkit.pm b/lib/Dancer2/Template/TemplateToolkit.pm
index 7a4441f..e3f3845 100644
--- a/lib/Dancer2/Template/TemplateToolkit.pm
+++ b/lib/Dancer2/Template/TemplateToolkit.pm
@@ -1,10 +1,7 @@
# ABSTRACT: Template toolkit engine for Dancer2
package Dancer2::Template::TemplateToolkit;
-{
- $Dancer2::Template::TemplateToolkit::VERSION = '0.12';
-}
-
+$Dancer2::Template::TemplateToolkit::VERSION = '0.140001';
use strict;
use warnings;
use Carp qw/croak/;
@@ -64,7 +61,7 @@ Dancer2::Template::TemplateToolkit - Template toolkit engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -101,7 +98,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Tiny.pm b/lib/Dancer2/Template/Tiny.pm
index 70df538..a232dc8 100644
--- a/lib/Dancer2/Template/Tiny.pm
+++ b/lib/Dancer2/Template/Tiny.pm
@@ -1,22 +1,17 @@
package Dancer2::Template::Tiny;
-{
- $Dancer2::Template::Tiny::VERSION = '0.12';
-}
-
# ABSTRACT: Template::Tiny engine for Dancer2
-
-use strict;
-use warnings;
-use Carp qw/croak/;
+$Dancer2::Template::Tiny::VERSION = '0.140001';
use Moo;
+use Carp qw/croak/;
use Dancer2::Core::Types;
use Dancer2::Template::Implementation::ForkedTiny;
use Dancer2::FileUtils 'read_file_content';
with 'Dancer2::Core::Role::Template';
-has '+engine' =>
- ( isa => InstanceOf ['Dancer2::Template::Implementation::ForkedTiny'], );
+has '+engine' => (
+ isa => InstanceOf ['Dancer2::Template::Implementation::ForkedTiny']
+);
sub _build_engine {
Dancer2::Template::Implementation::ForkedTiny->new( %{ $_[0]->config } );
@@ -53,7 +48,7 @@ Dancer2::Template::Tiny - Template::Tiny engine for Dancer2
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -114,7 +109,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Test.pm b/lib/Dancer2/Test.pm
index a734f7c..ef50c23 100644
--- a/lib/Dancer2/Test.pm
+++ b/lib/Dancer2/Test.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Useful routines for testing Dancer2 apps
-
package Dancer2::Test;
-{
- $Dancer2::Test::VERSION = '0.12';
-}
+# ABSTRACT: Useful routines for testing Dancer2 apps
+$Dancer2::Test::VERSION = '0.140001';
use strict;
use warnings;
@@ -569,7 +566,7 @@ Dancer2::Test - Useful routines for testing Dancer2 apps
=head1 VERSION
-version 0.12
+version 0.140001
=head1 DESCRIPTION
@@ -869,7 +866,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Tutorial.pod b/lib/Dancer2/Tutorial.pod
index a200e08..6fef06c 100644
--- a/lib/Dancer2/Tutorial.pod
+++ b/lib/Dancer2/Tutorial.pod
@@ -1,6 +1,6 @@
package Dancer2::Tutorial;
# ABSTRACT: An example to get you dancing
-
+$Dancer2::Tutorial::VERSION = '0.140001';
__END__
=pod
@@ -11,7 +11,7 @@ Dancer2::Tutorial - An example to get you dancing
=head1 VERSION
-version 0.12
+version 0.140001
=head1 What is Dancer2?
@@ -651,7 +651,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/script/dancer2 b/script/dancer2
index c8e6bb4..8f1739c 100755
--- a/script/dancer2
+++ b/script/dancer2
@@ -31,7 +31,7 @@ dancer2 - Dancer2 command line interface
=head1 VERSION
-version 0.12
+version 0.140001
=head1 SYNOPSIS
@@ -146,7 +146,7 @@ Dancer Core Developers
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/t/00-compile.t b/t/00-compile.t
index 6b228f7..99c3030 100644
--- a/t/00-compile.t
+++ b/t/00-compile.t
@@ -1,9 +1,10 @@
+use 5.006;
use strict;
use warnings;
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.023
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.040
-use Test::More tests => 61 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+use Test::More tests => 58 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
@@ -26,7 +27,7 @@ my @module_files = (
'Dancer2/Core/Request.pm',
'Dancer2/Core/Request/Upload.pm',
'Dancer2/Core/Response.pm',
- 'Dancer2/Core/Role/Config.pm',
+ 'Dancer2/Core/Role/ConfigReader.pm',
'Dancer2/Core/Role/DSL.pm',
'Dancer2/Core/Role/Engine.pm',
'Dancer2/Core/Role/Handler.pm',
@@ -34,15 +35,12 @@ my @module_files = (
'Dancer2/Core/Role/Hookable.pm',
'Dancer2/Core/Role/Logger.pm',
'Dancer2/Core/Role/Serializer.pm',
- 'Dancer2/Core/Role/Server.pm',
'Dancer2/Core/Role/SessionFactory.pm',
'Dancer2/Core/Role/SessionFactory/File.pm',
'Dancer2/Core/Role/StandardResponses.pm',
'Dancer2/Core/Role/Template.pm',
'Dancer2/Core/Route.pm',
'Dancer2/Core/Runner.pm',
- 'Dancer2/Core/Server/PSGI.pm',
- 'Dancer2/Core/Server/Standalone.pm',
'Dancer2/Core/Session.pm',
'Dancer2/Core/Time.pm',
'Dancer2/Core/Types.pm',
@@ -76,21 +74,27 @@ my @scripts = (
# no fake home requested
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
use IPC::Open3;
use IO::Handle;
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
my @warnings;
for my $lib (@module_files)
{
# see L<perlfaq8/How can I capture STDERR from an external command?>
- my $stdin = ''; # converted to a gensym by open3
my $stderr = IO::Handle->new;
- my $pid = open3($stdin, '>&STDERR', $stderr, qq{$^X -Mblib -e"require q[$lib]"});
+ my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+ binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+ my @_warnings = <$stderr>;
waitpid($pid, 0);
- is($? >> 8, 0, "$lib loaded ok");
+ is($?, 0, "$lib loaded ok");
- if (my @_warnings = <$stderr>)
+ if (@_warnings)
{
warn @_warnings;
push @warnings, @_warnings;
@@ -103,16 +107,19 @@ foreach my $file (@scripts)
my $line = <$fh>;
close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!.*?\bperl\b\s*(.*)$/;
- my $flags = $1;
+ my @flags = $1 ? split(/\s+/, $1) : ();
- my $stdin = ''; # converted to a gensym by open3
my $stderr = IO::Handle->new;
- my $pid = open3($stdin, '>&STDERR', $stderr, qq{$^X -Mblib $flags -c $file});
+ my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, @flags, '-c', $file);
+ binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+ my @_warnings = <$stderr>;
waitpid($pid, 0);
- is($? >> 8, 0, "$file compiled ok");
+ is($?, 0, "$file compiled ok");
- if (my @_warnings = grep { !/syntax OK$/ } <$stderr>)
+ # in older perls, -c output is simply the file portion of the path being tested
+ if (@_warnings = grep { !/\bsyntax OK$/ }
+ grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
{
warn @_warnings;
push @warnings, @_warnings;
@@ -120,6 +127,7 @@ foreach my $file (@scripts)
} }
+
is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
diff --git a/t/00-report-prereqs.t b/t/00-report-prereqs.t
index c3472e7..efe30ca 100644
--- a/t/00-report-prereqs.t
+++ b/t/00-report-prereqs.t
@@ -40,7 +40,7 @@ my @modules = qw(
HTTP::Headers
HTTP::Request
HTTP::Request::Common
- HTTP::Server::Simple::PSGI
+ HTTP::Server::PSGI
Hash::Merge::Simple
IO::File
IO::Handle
@@ -59,7 +59,8 @@ my @modules = qw(
MooX::Types::MooseLike
MooX::Types::MooseLike::Base
POSIX
- Plack::Request
+ Plack
+ Plack::Builder
Plack::Test
Pod::Simple::Search
Pod::Simple::SimpleTree
@@ -79,7 +80,6 @@ my @modules = qw(
URI::Escape
URL::Encode::XS
YAML
- YAML::Any
lib
overload
parent
diff --git a/t/ajax_plugin.t b/t/ajax_plugin.t
index 5bf4957..8b9e501 100644
--- a/t/ajax_plugin.t
+++ b/t/ajax_plugin.t
@@ -28,7 +28,7 @@ use HTTP::Request::Common qw(GET HEAD PUT POST DELETE);
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/any.t b/t/any.t
index 5eb5241..61e2a36 100644
--- a/t/any.t
+++ b/t/any.t
@@ -18,7 +18,7 @@ use HTTP::Request::Common;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/auto_page.t b/t/auto_page.t
index f40728b..d1a1776 100644
--- a/t/auto_page.t
+++ b/t/auto_page.t
@@ -16,8 +16,7 @@ use HTTP::Request::Common;
engine('template')->layout('main');
}
-$_->finish for @{ Dancer2->runner->server->apps };
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/charset_server.t b/t/charset_server.t
index 7e336f7..5a297a6 100644
--- a/t/charset_server.t
+++ b/t/charset_server.t
@@ -63,7 +63,8 @@ Test::TCP::test_tcp(
set charset => 'utf-8';
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/config.t b/t/config.t
index 30e9003..b9baf23 100644
--- a/t/config.t
+++ b/t/config.t
@@ -5,7 +5,6 @@ use Test::Fatal;
use Carp 'croak';
use Dancer2::Core::Runner;
-use Dancer2::Core::Role::Config;
use Dancer2::FileUtils qw/dirname path/;
use File::Spec;
use File::Temp;
@@ -17,7 +16,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
package Prod;
use Moo;
- with 'Dancer2::Core::Role::Config';
+ with 'Dancer2::Core::Role::ConfigReader';
sub name {'Prod'}
@@ -27,7 +26,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
package Dev;
use Moo;
- with 'Dancer2::Core::Role::Config';
+ with 'Dancer2::Core::Role::ConfigReader';
sub _build_environment {'development'}
sub location {$location}
@@ -35,7 +34,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
package Failure;
use Moo;
- with 'Dancer2::Core::Role::Config';
+ with 'Dancer2::Core::Role::ConfigReader';
sub _build_environment {'failure'}
sub location {$location}
@@ -43,7 +42,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
package Staging;
use Moo;
- with 'Dancer2::Core::Role::Config';
+ with 'Dancer2::Core::Role::ConfigReader';
sub _build_environment {'staging'}
sub location {$location}
@@ -51,7 +50,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
package Merging;
use Moo;
- with 'Dancer2::Core::Role::Config';
+ with 'Dancer2::Core::Role::ConfigReader';
sub name {'Merging'}
@@ -67,8 +66,8 @@ is_deeply $d->config_files,
"config_files() only sees existing files";
my $f = Prod->new;
-is $f->does('Dancer2::Core::Role::Config'), 1,
- "role Dancer2::Core::Role::Config is consumed";
+is $f->does('Dancer2::Core::Role::ConfigReader'), 1,
+ "role Dancer2::Core::Role::ConfigReader is consumed";
is_deeply $f->config_files,
[ path( $location, 'config.yml' ),
diff --git a/t/context.t b/t/context.t
index c232f5b..c9db4bb 100644
--- a/t/context.t
+++ b/t/context.t
@@ -17,7 +17,7 @@ my $env = {
REMOTE_ADDR => '127.0.0.1',
HTTP_COOKIE =>
'dancer.session=1234; fbs_102="access_token=xxxxxxxxxx%7Cffffff"',
- X_FORWARDED_FOR => '127.0.0.2',
+ HTTP_X_FORWARDED_FOR => '127.0.0.2',
REMOTE_HOST => 'localhost',
HTTP_USER_AGENT => 'Mozilla',
REMOTE_USER => 'sukria',
diff --git a/t/context_trigger.t b/t/context_trigger.t
index d3100a1..9cee083 100644
--- a/t/context_trigger.t
+++ b/t/context_trigger.t
@@ -45,7 +45,9 @@ Test::TCP::test_tcp(
};
setting appdir => $tempdir;
- Dancer2->runner->server->port($port);
+
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/custom_dsl.t b/t/custom_dsl.t
index a602952..10f1a91 100644
--- a/t/custom_dsl.t
+++ b/t/custom_dsl.t
@@ -16,7 +16,7 @@ prend '/' => sub {
request->method;
};
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/dancer-test.t b/t/dancer-test.t
index d6e6380..fbc92ba 100644
--- a/t/dancer-test.t
+++ b/t/dancer-test.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 49;
+use Test::More tests => 50;
use Dancer2;
use Dancer2::Test;
@@ -108,3 +108,20 @@ $param_response =
{ params => { test => [ 'test/', $russian_test ] } } );
is $param_response->content, 'test/' . encode( 'UTF-8', $russian_test ),
'multi utf8 value properly merge';
+
+get '/headers' => sub {
+ join " : ", request->header('X-Sent-By'), request->cookies->{foo};
+};
+note "extra headers in request"; {
+ my $sent_by = 'Dancer2::Test';
+ my $headers_test = dancer_response( GET => '/headers',
+ {
+ headers => [
+ [ 'X-Sent-By' => $sent_by ],
+ [ 'Cookie' => "foo=bar" ],
+ ],
+ }
+ );
+ is $headers_test->content, "$sent_by : bar",
+ "extra headers included in request";
+}
diff --git a/t/deserialize.t b/t/deserialize.t
index 05d1395..e1fa348 100644
--- a/t/deserialize.t
+++ b/t/deserialize.t
@@ -1,7 +1,7 @@
use strict;
use warnings;
-use Test::More tests => 10;
+use Test::More tests => 12;
use Plack::Test;
use HTTP::Request::Common;
@@ -23,13 +23,19 @@ use HTTP::Request::Common;
return join " : ", map { $_ => $p->{$_} } sort keys %$p;
};
+ # This route is used for both toure and body params.
post '/from/:town' => sub {
my $p = params;
return $p;
};
+
+ any [qw/del patch/] => '/from/:town' => sub {
+ my $p = params('body');
+ return $p;
+ };
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -68,7 +74,8 @@ note "Verify Serializers decode into characters"; {
my $body = $serializer->serialize({utf8 => $utf8});
# change the app serializer
- Dancer2->runner->server->apps->[0]->engines->{'serializer'} =
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->apps->[0]->{'serializer_engine'} =
$serializer;
my $r = $cb->(
@@ -87,22 +94,24 @@ note "Verify Serializers decode into characters"; {
};
}
+# default back to JSON for the rest
+# we're overiding a RO attribute only for this test!
+Dancer2->runner->apps->[0]->{'serializer_engine'} =
+ Dancer2::Serializer::JSON->new;
+
note "Decoding of mixed route and deserialized body params"; {
# Check integers from request body remain integers
# but route params get decoded.
test_psgi $app, sub {
my $cb = shift;
- # change the app serializer
- Dancer2->runner->server->apps->[0]->engines->{'serializer'} =
- Dancer2::Serializer::JSON->new;
-
- my $r = $cb->(
- POST "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
- 'Content-Type' => 'application/json',
- Content => JSON::to_json({ population => 592393 }),
+ my @req_params = (
+ "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
+ 'Content-Type' => 'application/json',
+ Content => JSON::to_json({ population => 592393 }),
);
+ my $r = $cb->( POST @req_params );
my $content = Encode::decode( 'UTF-8', $r->content );
# Watch out for hash order randomization..
@@ -120,24 +129,56 @@ note "Decoding of mixed route and deserialized body params"; {
};
}
+# Check body is deserialized on PATCH and DELETE.
+# The RFC states the behaviour for DELETE is undefined; We take the lenient
+# and deserialize it.
+# http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-4.3.5
+note "Deserialze any body content that is allowed or undefined"; {
+ test_psgi $app, sub {
+ my $cb = shift;
+
+ for my $method ( qw/delete patch/ ) {
+ my $request = HTTP::Request->new(
+ $method,
+ "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
+ [ 'Content-Type' => 'application/json' ],
+ JSON::to_json({ population => 592393 }),
+ );
+ my $response = $cb->($request);
+ my $content = Encode::decode( 'UTF-8', $response->content );
+
+ # Only body params returned
+ is(
+ $content,
+ '{"population":592393}',
+ "JSON body deserialized for " . uc($method) . " requests",
+ );
+ }
+ }
+}
+
note 'Check serialization errors'; {
- my $serializer = Dancer2::Serializer::JSON->new();
- my $req = Dancer2::Core::Request->new(
- method => 'PUT',
- path => '/from_params',
- content_type => 'application/json',
- body => "---",
- serializer => $serializer,
- );
-
- ok(
- $req->serializer->has_error,
- "Invalid JSON threw error in serializer",
- );
-
- like(
- $req->serializer->error,
- qr/malformed number/,
- ".. of a 'malformed number'",
- );
+ test_psgi $app, sub {
+ my $cb = shift;
+
+ $cb->(
+ PUT '/from_params',
+ 'Content-Type' => 'application/json',
+ Content => '---',
+ );
+
+ ok(
+ Dancer2->runner->apps->[0]->{'serializer_engine'}->has_error,
+ "Invalid JSON threw error in serializer",
+ );
+
+ like(
+ Dancer2->runner->apps->[0]->{'serializer_engine'}->error,
+ qr/malformed number/,
+ ".. of a 'malformed number'",
+ );
+ }
}
+
+done_testing();
+
diff --git a/t/dsl.t b/t/dsl.t
index 4870508..1cc399e 100644
--- a/t/dsl.t
+++ b/t/dsl.t
@@ -10,7 +10,7 @@ any [ 'get', 'post' ], '/' => sub {
request->method;
};
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/dsl/halt.t b/t/dsl/halt.t
index 8e74fa4..69ad2fd 100644
--- a/t/dsl/halt.t
+++ b/t/dsl/halt.t
@@ -23,7 +23,7 @@ subtest 'halt within routes' => sub {
};
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -68,7 +68,7 @@ subtest 'halt in before halt' => sub {
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/error.t b/t/error.t
index ad122d8..e717afc 100644
--- a/t/error.t
+++ b/t/error.t
@@ -23,7 +23,7 @@ my $env = {
REMOTE_ADDR => '127.0.0.1',
HTTP_COOKIE =>
'dancer.session=1234; fbs_102="access_token=xxxxxxxxxx%7Cffffff"',
- X_FORWARDED_FOR => '127.0.0.2',
+ HTTP_X_FORWARDED_FOR => '127.0.0.2',
REMOTE_HOST => 'localhost',
HTTP_USER_AGENT => 'Mozilla',
REMOTE_USER => 'sukria',
@@ -54,7 +54,7 @@ subtest "send_error in route" => sub {
};
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -88,7 +88,7 @@ subtest "send_error with custom stuff" => sub {
};
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/error_template.t b/t/error_template.t
index 79b59e1..7a70fa1 100644
--- a/t/error_template.t
+++ b/t/error_template.t
@@ -30,7 +30,7 @@ use HTTP::Request::Common;
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/forward.t b/t/forward.t
index 047f92f..4d7919d 100644
--- a/t/forward.t
+++ b/t/forward.t
@@ -33,7 +33,7 @@ get '/go_to_post/' => sub {
# get '/b' => sub { vars->{test} = 1; forward '/a'; };
# get '/a' => sub { return "test is " . var('test'); };
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/forward_before_hook.t b/t/forward_before_hook.t
index 3138629..f14980e 100644
--- a/t/forward_before_hook.t
+++ b/t/forward_before_hook.t
@@ -32,7 +32,7 @@ hook before => sub {
forward '/default';
};
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/forward_test_tcp.t b/t/forward_test_tcp.t
index a1c8dc0..e3a986f 100644
--- a/t/forward_test_tcp.t
+++ b/t/forward_test_tcp.t
@@ -31,7 +31,12 @@ test_tcp(
post '/' => sub {'post-home'};
post '/bounce/' => sub { forward('/') };
- Dancer2->runner->server->port($port);
+ print STDERR "Running on port $port\n";
+
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
+
+ print STDERR "Starting\n";
start;
},
client => sub {
@@ -60,7 +65,8 @@ test_tcp(
$res = $ua->get("http://127.0.0.1:$port/bounce/");
is $res->header('Content-Length') => 5;
is $res->header('Content-Type') => 'text/html; charset=UTF-8';
- is $res->header('Server') => "Perl Dancer2 $Dancer2::VERSION";
+ is $res->header('Server') =>
+ "Perl Dancer2 $Dancer2::VERSION, Perl Dancer2 $Dancer2::VERSION";
$res = $ua->post("http://127.0.0.1:$port/");
is $res->code => 200;
@@ -71,7 +77,8 @@ test_tcp(
is $res->content => 'post-home';
is $res->header('Content-Length') => 9;
is $res->header('Content-Type') => 'text/html; charset=UTF-8';
- is $res->header('Server') => "Perl Dancer2 $Dancer2::VERSION";
+ is $res->header('Server') =>
+ "Perl Dancer2 $Dancer2::VERSION, Perl Dancer2 $Dancer2::VERSION";
}
);
diff --git a/t/handler_file.t b/t/handler_file.t
index 49e0fde..422eee3 100644
--- a/t/handler_file.t
+++ b/t/handler_file.t
@@ -22,7 +22,7 @@ use HTTP::Request::Common;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/hooks.t b/t/hooks.t
index 97d5a7e..9d5301a 100644
--- a/t/hooks.t
+++ b/t/hooks.t
@@ -116,8 +116,7 @@ my $tests_flags = {};
}
-$_->finish for @{ Dancer2->runner->server->apps };
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/http_methods.t b/t/http_methods.t
index 2cecf4e..7193394 100644
--- a/t/http_methods.t
+++ b/t/http_methods.t
@@ -3,7 +3,7 @@ use warnings;
use Test::More tests => 9;
use Plack::Test;
-use HTTP::Request::Common;
+use HTTP::Request;
use Dancer2;
@@ -16,7 +16,7 @@ my %method = (
options => 'OPTIONS',
);
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -33,8 +33,8 @@ test_psgi $app, sub {
eval "get '/head' => sub {'HEAD'}";
- my $res = $cb->( HEAD '/head' );
- is( $res->content, 'HEAD', 'HEAD /' );
+ my $res = $cb->( HTTP::Request->new( HEAD => '/head' ) );
+ is( $res->content, '', 'HEAD /' ); # HEAD requests have no content
is( $res->headers->content_length, 4, 'Content-Length for HEAD' );
};
diff --git a/t/lib/FooPlugin.pm b/t/lib/FooPlugin.pm
index 597fc8c..1df1fd8 100644
--- a/t/lib/FooPlugin.pm
+++ b/t/lib/FooPlugin.pm
@@ -31,7 +31,7 @@ sub _retrieve_get_urls {
my $dsl = shift;
my ( $route, @urls );
- for my $app ( @{ $dsl->runner->server->apps } ) {
+ for my $app ( @{ $dsl->runner->apps } ) {
my $routes = $app->routes;
# push the static get routes into an array.
diff --git a/t/plugin_import.t b/t/plugin_import.t
index 4a53f5a..494a1cd 100644
--- a/t/plugin_import.t
+++ b/t/plugin_import.t
@@ -15,7 +15,7 @@ use HTTP::Request::Common;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/plugin_multiple_apps.t b/t/plugin_multiple_apps.t
index 58e7a6b..eaad13a 100644
--- a/t/plugin_multiple_apps.t
+++ b/t/plugin_multiple_apps.t
@@ -20,7 +20,7 @@ use HTTP::Request::Common;
use t::lib::SubApp2 with => { session => engine('session') };
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/plugin_syntax.t b/t/plugin_syntax.t
index 0d47fdb..5b8d07b 100644
--- a/t/plugin_syntax.t
+++ b/t/plugin_syntax.t
@@ -23,7 +23,7 @@ subtest 'global and route keywords' => sub {
foo_route;
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -63,7 +63,7 @@ subtest 'plugin old syntax' => sub {
around_get;
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -83,7 +83,7 @@ subtest caller_dsl => sub {
use t::lib::DancerPlugin;
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -129,7 +129,7 @@ subtest 'hooks in plugins' => sub {
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/redirect.t b/t/redirect.t
index c16aa84..39e6c35 100644
--- a/t/redirect.t
+++ b/t/redirect.t
@@ -16,7 +16,7 @@ subtest 'basic redirects' => sub {
get '/redirect_querystring' => sub { redirect '/login?failed=1' };
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -86,7 +86,7 @@ subtest 'absolute and relative redirects' => sub {
get '/relative' => sub { redirect "somewhere/else"; };
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -133,7 +133,7 @@ subtest 'redirect behind a proxy' => sub {
get '/bounce' => sub { redirect '/test2' };
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
@@ -173,6 +173,18 @@ subtest 'redirect behind a proxy' => sub {
'... or from X_FORWARDED_PROTOCOL',
);
}
+
+ {
+ is(
+ $cb->(
+ GET '/test2/bounce',
+ 'X-FORWARDED-HOST' => 'nice.host.name',
+ 'X-FORWARDED-PROTO' => 'https',
+ )->headers->header('Location'),
+ 'https://nice.host.name/test2',
+ '... or from X_FORWARDED_PROTO',
+ );
+ }
};
};
@@ -186,7 +198,7 @@ subtest 'redirect behind multiple proxies' => sub {
get '/bounce' => sub { redirect '/test2' };
}
- my $app = Dancer2->runner->server->psgi_app;
+ my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/release-distmeta.t b/t/release-distmeta.t
index 15368e8..a24a89a 100644
--- a/t/release-distmeta.t
+++ b/t/release-distmeta.t
@@ -7,9 +7,8 @@ BEGIN {
}
}
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
-use Test::More;
+use Test::CPAN::Meta;
-eval "use Test::CPAN::Meta";
-plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
meta_yaml_ok();
diff --git a/t/release-pod-syntax.t b/t/release-pod-syntax.t
index d46a955..cdd6a6c 100644
--- a/t/release-pod-syntax.t
+++ b/t/release-pod-syntax.t
@@ -7,9 +7,8 @@ BEGIN {
}
}
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
all_pod_files_ok();
diff --git a/t/request.t b/t/request.t
index e3528f7..da315f5 100644
--- a/t/request.t
+++ b/t/request.t
@@ -21,12 +21,13 @@ sub run_test {
SERVER_PORT => 5000,
SERVER_PROTOCOL => 'HTTP/1.1',
REMOTE_ADDR => '127.0.0.1',
- X_FORWARDED_FOR => '127.0.0.2',
- X_FORWARDED_HOST => 'secure.frontend',
- X_FORWARDED_PROTOCOL => 'https',
+ HTTP_X_FORWARDED_FOR => '127.0.0.2',
+ HTTP_X_FORWARDED_HOST => 'secure.frontend',
+ HTTP_X_FORWARDED_PROTOCOL => 'https',
REMOTE_HOST => 'localhost',
HTTP_USER_AGENT => 'Mozilla',
REMOTE_USER => 'sukria',
+ HTTP_COOKIE => 'cookie.a=foo=bar; cookie.b=1234abcd',
};
my $req = Dancer2::Core::Request->new( env => $env );
@@ -63,6 +64,9 @@ sub run_test {
note "tests params";
is_deeply { $req->params }, { foo => 42, bar => [ 12, 13, 14 ] };
+ note "tests cookies";
+ is( keys %{ $req->cookies }, 2, "multiple cookies extracted" );
+
my $forward = $req->make_forward_to('/somewhere');
is $forward->path_info, '/somewhere';
is $forward->method, 'GET';
@@ -97,7 +101,7 @@ sub run_test {
is_behind_proxy => 1
);
is $req->secure, 1;
- is $req->host, $env->{X_FORWARDED_HOST};
+ is $req->host, $env->{HTTP_X_FORWARDED_HOST};
is $req->scheme, 'https';
}
diff --git a/t/roles/server.t b/t/roles/server.t
deleted file mode 100644
index 1b95867..0000000
--- a/t/roles/server.t
+++ /dev/null
@@ -1,37 +0,0 @@
-use Test::More;
-use Test::Fatal;
-
-use strict;
-use warnings;
-
-{
-
- package Foo;
- use Moo;
- with 'Dancer2::Core::Role::Server';
-
- sub _build_name {'foo'}
-}
-
-my $s;
-
-like( exception { $s = Foo->new }, qr{required.*host}, "host is mandatory", );
-
-like(
- exception { $s = Foo->new( host => 'localhost' ) },
- qr{required.*port}, "port is mandatory",
-);
-
-my $runner = Dancer2::Core::Runner->new( caller => $0 );
-$s = Foo->new( host => 'localhost', port => 3000, runner => $runner );
-my $app = Dancer2::Core::App->new( name => 'main' );
-
-$s->register_application($app);
-
-is $s->apps->[0]->name, 'main', 'app has been registered';
-isa_ok $s->dispatcher, 'Dancer2::Core::Dispatcher';
-
-my $psgi_app = $s->psgi_app;
-is ref($psgi_app), 'CODE', 'got a subroutine when asked for psgi_app';
-
-done_testing,
diff --git a/t/runner.t b/t/runner.t
index 3fd3baa..100315e 100644
--- a/t/runner.t
+++ b/t/runner.t
@@ -26,21 +26,8 @@ is $runner->environment, 'development';
is $runner->environment, 'foo';
}
-is $runner->server->name, 'Standalone', "server is created and is standalone";
-
note "testing default config of the server";
-is $runner->server->port, 3000;
-is $runner->server->host, '0.0.0.0';
-is $runner->server->is_daemon, 0;
-
-note "testing server failure";
-{
- $runner->config->{apphandler} = 'NotExist';
- like(
- exception { Dancer2::Core::Runner::_build_server($runner) },
- qr{Unable to load Dancer2::Core::Server::NotExist},
- 'Cannot run BUILD for server that does not exist',
- );
-}
+is $runner->port, 3000;
+is $runner->host, '0.0.0.0';
done_testing;
diff --git a/t/serializer.t b/t/serializer.t
index 86441ed..e372461 100644
--- a/t/serializer.t
+++ b/t/serializer.t
@@ -18,7 +18,7 @@ use HTTP::Request::Common;
get '/to_json' => sub { to_json({bar => 'baz'}, {pretty => 1}) };
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/server.t b/t/server.t
deleted file mode 100644
index 378d07f..0000000
--- a/t/server.t
+++ /dev/null
@@ -1,30 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-{
-
- package Foo;
- use Moo;
- with 'Dancer2::Core::Role::Server';
-
- sub _build_name {'Foo'}
-}
-
-use Dancer2::Core::Runner;
-my $runner = Dancer2::Core::Runner->new( caller => __FILE__ );
-
-my $f = Foo->new( host => 'localhost', port => 3000, runner => $runner );
-my $app = Dancer2::Core::App->new( name => 'foo' );
-
-$f->register_application($app);
-is $f->apps->[0]->name, 'foo';
-
-is $f->host, 'localhost';
-is $f->port, 3000;
-ok( !$f->is_daemon );
-
-ok( defined $f->dispatcher );
-is ref( $f->psgi_app ), 'CODE';
-
-done_testing;
diff --git a/t/server_standalone.t b/t/server_standalone.t
index 5f097aa..d827c60 100644
--- a/t/server_standalone.t
+++ b/t/server_standalone.t
@@ -33,7 +33,8 @@ Test::TCP::test_tcp(
"foo";
};
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/session_config.t b/t/session_config.t
index 1730cb2..68003d3 100644
--- a/t/session_config.t
+++ b/t/session_config.t
@@ -110,7 +110,8 @@ for my $session_expires ( 3600, '1h', '1 hour' ) {
port => $port
);
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/session_engines.t b/t/session_engines.t
index f59d868..566a480 100644
--- a/t/session_engines.t
+++ b/t/session_engines.t
@@ -100,7 +100,8 @@ foreach my $engine (@engines) {
port => $port
);
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/session_forward.t b/t/session_forward.t
index 0d0ae3e..080da09 100644
--- a/t/session_forward.t
+++ b/t/session_forward.t
@@ -35,7 +35,8 @@ my $server = sub {
session "more" => undef;
};
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
};
diff --git a/t/session_lifecycle.t b/t/session_lifecycle.t
index 54afc9b..3c1de9a 100644
--- a/t/session_lifecycle.t
+++ b/t/session_lifecycle.t
@@ -171,7 +171,8 @@ foreach my $engine (@engines) {
port => $port
);
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml b/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml b/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml b/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml b/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml b/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml b/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml b/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml b/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml b/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml b/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml b/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml b/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml b/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml b/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml b/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml b/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml b/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml b/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml b/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml b/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml b/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml b/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml b/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/shared_engines.t b/t/shared_engines.t
index a54859c..bb0b7c0 100644
--- a/t/shared_engines.t
+++ b/t/shared_engines.t
@@ -45,7 +45,8 @@ Test::TCP::test_tcp(
};
setting appdir => $tempdir;
- Dancer2->runner->server->port($port);
+ # we're overiding a RO attribute only for this test!
+ Dancer2->runner->{'port'} = $port;
start;
},
);
diff --git a/t/splat.t b/t/splat.t
index fd45435..c2f1f0a 100644
--- a/t/splat.t
+++ b/t/splat.t
@@ -20,7 +20,7 @@ my @splat;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/template.t b/t/template.t
index 58730c2..2af02b0 100644
--- a/t/template.t
+++ b/t/template.t
@@ -97,7 +97,7 @@ content added in after_layout_render";
get '/get_views_via_settings' => sub { set 'views' };
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/template_default_tokens.t b/t/template_default_tokens.t
index 61adfe5..4fab21e 100644
--- a/t/template_default_tokens.t
+++ b/t/template_default_tokens.t
@@ -37,7 +37,7 @@ params.foo: 42
session.foo in session
vars.foo: in var";
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/template_name.t b/t/template_name.t
index 538d6e2..fc528aa 100644
--- a/t/template_name.t
+++ b/t/template_name.t
@@ -17,7 +17,7 @@ use HTTP::Request::Common;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/uri_for.t b/t/uri_for.t
index b1a7862..c5cacf0 100644
--- a/t/uri_for.t
+++ b/t/uri_for.t
@@ -11,7 +11,7 @@ use HTTP::Request::Common;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
diff --git a/t/vars.t b/t/vars.t
index de4dc35..c7f6f8e 100644
--- a/t/vars.t
+++ b/t/vars.t
@@ -23,7 +23,7 @@ plan tests => 3;
};
}
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
is( ref $app, 'CODE', 'Got app' );
test_psgi $app, sub {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libdancer2-perl.git
More information about the Pkg-perl-cvs-commits
mailing list