From: Matt S Trout Date: Sat, 27 Nov 2010 01:00:26 +0000 (+0000) Subject: fix config handling, finish porting bloggery, safer exporting X-Git-Tag: v0.005~19 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FWeb-Simple.git;a=commitdiff_plain;h=876e62e1e9790a0d16f82b5793e98d4eed904bb5 fix config handling, finish porting bloggery, safer exporting --- diff --git a/examples/bloggery/bloggery.cgi b/examples/bloggery/bloggery.cgi index b315b44..8e19886 100755 --- a/examples/bloggery/bloggery.cgi +++ b/examples/bloggery/bloggery.cgi @@ -66,17 +66,20 @@ sub summary_html { package Bloggery; -default_config( - title => 'Bloggery', - posts_dir => $FindBin::Bin.'/posts', -); +has post_list => (is => 'lazy'); -sub post_list { +sub default_config { + ( + title => 'Bloggery', + posts_dir => $FindBin::Bin.'/posts', + ); +} + +sub _build_post_list { my ($self) = @_; - $self->{post_list} - ||= Bloggery::PostList->from_dir( - $self->config->{posts_dir} - ); + Bloggery::PostList->from_dir( + $self->config->{posts_dir} + ); } sub post { @@ -87,10 +90,10 @@ sub post { sub dispatch_request { my $self = shift; sub (GET + /) { - redispatch_to '/index.html'; + redispatch_to '/index.html' }, sub (.html) { - response_filter { $self->render_html($_[1]) }, + response_filter { $self->render_html(@_) } }, sub (GET + /index) { $self->post_list diff --git a/lib/Web/Dispatch/Wrapper.pm b/lib/Web/Dispatch/Wrapper.pm index f60a435..80e6356 100644 --- a/lib/Web/Dispatch/Wrapper.pm +++ b/lib/Web/Dispatch/Wrapper.pm @@ -3,23 +3,28 @@ package Web::Dispatch::Wrapper; use strictures 1; use Exporter 'import'; -our @EXPORT_OK = qw(dispatch_wrapper redispatch_to response_filter); +our @EXPORT = qw(dispatch_wrapper redispatch_to response_filter); sub dispatch_wrapper (&) { + my ($code) = @_; + __PACKAGE__->from_code($code); +} + +sub from_code { my ($class, $code) = @_; bless(\$code, $class); } sub redispatch_to { - my ($class, $new_path) = @_; - $class->from_code(sub { + my ($new_path) = @_; + __PACKAGE__->from_code(sub { $_[1]->({ %{$_[0]}, PATH_INFO => $new_path }); }); } sub response_filter (&) { - my ($class, $code) = @_; - $class->from_code(sub { + my ($code) = @_; + __PACKAGE__->from_code(sub { my @result = $_[1]->($_[0]); if (@result) { $code->(@result); diff --git a/lib/Web/Simple.pm b/lib/Web/Simple.pm index 13e7518..b95f36c 100644 --- a/lib/Web/Simple.pm +++ b/lib/Web/Simple.pm @@ -3,13 +3,17 @@ package Web::Simple; use strictures 1; use 5.008; use warnings::illegalproto (); +use Moo (); +use Web::Dispatch::Wrapper (); our $VERSION = '0.004'; sub import { my ($class, $app_package) = @_; - $class->_export_into($app_package||caller); - eval "package $class; use Web::Dispatch::Wrapper; use Moo;"; + $app_package ||= caller; + $class->_export_into($app_package); + eval "package $app_package; use Web::Dispatch::Wrapper; use Moo; 1" + or die "Failed to setup app package: $@"; strictures->import; warnings::illegalproto->unimport; } diff --git a/lib/Web/Simple/Application.pm b/lib/Web/Simple/Application.pm index 49b7fea..6fb8784 100644 --- a/lib/Web/Simple/Application.pm +++ b/lib/Web/Simple/Application.pm @@ -2,12 +2,19 @@ package Web::Simple::Application; use Moo; -has 'config' => (is => 'ro', trigger => sub { - my ($self, $value) = @_; - my %default = $self->_default_config; - my @not = grep !exists $value->{$_}, keys %default; - @{$value}{@not} = @default{@not}; -}); +has 'config' => ( + is => 'ro', + default => sub { + my ($self) = @_; + +{ $self->default_config } + }, + trigger => sub { + my ($self, $value) = @_; + my %default = $self->default_config; + my @not = grep !exists $value->{$_}, keys %default; + @{$value}{@not} = @default{@not}; + } +); sub default_config { () }