X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FWeb%2FSimple%2FApplication.pm;fp=lib%2FWeb%2FSimple%2FApplication.pm;h=92fbca091ee2a6e791e1a805beb8e9e6e2b4799f;hb=12b3e9a3a9202abfd0565e4a02ae116c6bf5afdb;hp=99e64363e9d47458f7db9ea9583990edd0c5654c;hpb=1760e999b21c55418364ad066f6640f8a0d34714;p=catagits%2FWeb-Simple.git diff --git a/lib/Web/Simple/Application.pm b/lib/Web/Simple/Application.pm index 99e6436..92fbca0 100644 --- a/lib/Web/Simple/Application.pm +++ b/lib/Web/Simple/Application.pm @@ -126,22 +126,25 @@ your application. For example: Now, the C attribute of C<$self> will be set to a HashRef containing keys 'title' and 'posts_dir'. -If you construct your application like: +The keys from default_config are merged into any config supplied, so +if you construct your application like: - MyWebSimpleApp::Web->new(config=>{environment=>'dev'}) + MyWebSimpleApp::Web->new( + config => { title => 'Spoon', environment => 'dev' } + ) -then C will have a C key with a value of 'dev'. +then C will contain: -=head2 run_if_script - -In the case where you wish to run your L based application as a -stand alone CGI application, you can simple do: + { + title => 'Spoon', + posts_dir => '/path/to/myapp/posts', + environment => 'dev' + } - ## my_web_simple_app.pl - use MyWebSimpleApp::Web; - MyWebSimpleApp::Web->run_if_script. +=head2 run_if_script -Or (even more simply) just inline the entire application: +The run_if_script method is designed to be used at the end of the script +or .pm file where your application class is defined - for example: ## my_web_simple_app.pl #!/usr/bin/env perl @@ -162,47 +165,47 @@ Or (even more simply) just inline the entire application: HelloWorld->run_if_script; -Additionally, you can treat the above script as though it were a standard PSGI -application file (*.psgi). For example you can start up up with C +This returns a true value, so your file is now valid as a module - so - plackup my_web_simple_app.pl + require 'my_web_simple_app.pl'; -Which means you can write a L application as a plain old CGI -application and seemlessly migrate to a L based solution when you are -ready for that. + my $hw = HelloWorld->new; -Lastly, L will automatically detect and support a Fast CGI -environment. +will work fine (and you can rename it to lib/HelloWorld.pm later to make it +a real use-able module). -=head2 to_psgi_app +However, it detects if it's being run as a script (via testing $0) and if +so attempts to do the right thing. -Given a L application root namespace, return it in a form suitable -to run in inside a L container, or in L or in a C<*.psgi> -file: +If run under a CGI environment, your application will execute as a CGI. - ## app.psgi - use strictures 1; - use Plack::Builder; - use MyWebSimpleApp::Web; +If run under a FastCGI environment, your application will execute as a +FastCGI process (this works both for dynamic shared-hosting-style FastCGI +and for apache FastCgiServer style setups). - builder { - ## enable middleware - enable 'StackTrace'; - enable 'Debug'; +If run from the commandline with a URL path, it runs a GET request against +that path - - ## return application - MyWebSimpleApp::Web->to_psgi_app; - }; + $ perl -Ilib examples/hello-world/hello-world.cgi / + 200 OK + Content-Type: text/plain + + Hello world! -This could be run via C, etc. Please note the L DSL -is optional, if you are enabling L internally in your -L application; your app.psgi could be as simple as: +Additionally, you can treat the file as though it were a standard PSGI +application file (*.psgi). For example you can start up up with C + + plackup my_web_simple_app.pl - use MyWebSimpleApp::Web; - MyWebSimpleApp::Web->to_psgi_app; +or C -This means if you want to provide a 'default' set of middleware, one option is -to modify this method: + starman my_web_simple_app.pl + +=head2 to_psgi_app + +This method is called by L to create the L app coderef +for use via L and L. If you want to globally add middleware, +you can override this method: use Web::Simple 'HelloWorld'; use Plack::Builder; @@ -221,8 +224,21 @@ to modify this method: }; } -As always, mix and match the pieces you actually need and remember the -L philosophy of trying to keep it as minimal and simple as possible. +This method can also be used to mount a Web::Simple application within +a separate C<*.psgi> file - + + use strictures 1; + use Plack::Builder; + use WSApp; + use AnotherWSApp; + + builder { + mount '/' => WSApp->to_psgi_app; + mount '/another' => AnotherWSApp->to_psgi_app; + }; + +This method can be called as a class method, in which case it implicitly +calls ->new, or as an object method ... in which case it doesn't. =head2 run