summaryrefslogtreecommitdiff
path: root/gsoc/2011-07-27-current-state-dancer-script.org
diff options
context:
space:
mode:
Diffstat (limited to 'gsoc/2011-07-27-current-state-dancer-script.org')
-rwxr-xr-xgsoc/2011-07-27-current-state-dancer-script.org118
1 files changed, 118 insertions, 0 deletions
diff --git a/gsoc/2011-07-27-current-state-dancer-script.org b/gsoc/2011-07-27-current-state-dancer-script.org
new file mode 100755
index 0000000..579f09f
--- /dev/null
+++ b/gsoc/2011-07-27-current-state-dancer-script.org
@@ -0,0 +1,118 @@
+#+title: Current State of Dancer::Script
+#+date: 2011-07-27
+#+layout: post
+#+category: gsoc
+
+Now that more than half of the program of GSoC has passed, Franck
+asked for me to do a write-up of my work, so everybody can check it
+and evaluate to see if it can be merged with the current devel repo of
+Dancer.
+
+You can check my whole work at [[https://github.com/gnusosa/Dancer][my repo in github]], and if you care to
+make changes, just PR at will *:)*
+
+*** Introducing Dancer::Script
+Dancer::Script module is a mash-up between the old script/dancer
+utility that we currently use to scaffold every new Dancer application
+and some other content that I added with management from Sawyer and
+Franck.
+
+Dancer::Script makes use of Dancer::Object and Dancer::Logger, the
+last so we can get better log outputs from the whole scaffolding
+process
+
+*** So what happened to =script/dancer= executable?
+
+Well, it became a 8 lines executables that only calls =Dancer::Script=
+*:D*
+
+#+begin_src perl
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Dancer::Script;
+
+Dancer::Script->init->run;
+#+end_src
+
+In the same matter, I modified =dispatch.cgi= and =dispatch.fcgi= so
+it will call =Dancer::Script=.
+
+=dispatch.fcgi=
+
+#+begin_src perl
+#!/usr/bin/env perl
+
+use Dancer::Script;
+
+Dancer::Script->run_scaffold('fcgi');
+#+end_src
+
+=Dancer::Script::run_scaffold_cgi= and
+=Dancer::Script::run_scaffold_fcgi= runs the code for the deployment
+of =CGI= and =FastCGI=. This way, every new change in Plack/PSGI that
+the team encounters and wish to add, can be directly added to
+=Dancer::Script= without the need of scaffolding a new Dancer
+application in every update that is done to Dancer. Since there are
+common releases and quick-updates in between weeks, I believe that
+this is a justified method.
+
+*** Verbose output
+Now that =Dancer::Script= makes use of =Dancer::Logger=, the following
+methods replaced good ol' =print=, the methods =error()= and
+=debug()=.
+
+So if we do =dancer -a Hello::World= we get a pretty output like the
+following:
+
+#+begin_src sh
+Carlos-Computer:test $ dancer -a Hello::World
+debug> Writing directory: Hello-World
+debug> Successfully wrote the directory: Hello-World
+debug> Writing directory: Hello-World/bin
+debug> Successfully wrote the directory: Hello-World/bin
+debug> Writing file: Hello-World/bin/app.pl
+debug> Successfully wrote: Hello-World/bin/app.pl
+.............
+#+end_src
+
+The same goes for =error()=
+
+#+begin_src sh
+Carlos-Computer:test $ dancer -a 1World
+error> Error: Invalid application name.
+error> Application names must not contain colons, dots, hyphens or start with a number.
+Carlos-Computer:test $
+#+end_src
+
+*** Is that all?
+Well, feature-wise speaking it is. But the other good part is that
+=Dancer::Script= is fully an object module that can be run without
+=script/dancer=. For example:
+
+#+begin_src perl
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Dancer::Script;
+
+Dancer::Script->init(appname => 'Hello::World', path => '/home/gnusosa/')->run;
+#+end_src
+
+So if you need to do something really specific with =Dancer::Script=,
+you don't need to call =script/dancer= and run your automagically
+work.
+
+*** But that's not all!
+Now that we have =Dancer::Script=, it will allow for future
+subclassing for extra features that anybody could write themselves.
+We'll also be able to easily add plugins so we could have flavors of
+=Dancer::Script=. Just like the ones that create a =Dist::Zilla= based
+dist or a Dancer plugin dist, etc... A lot of possibilities. *:)*
+
+This is the current state of my work, I hope you like it, and expect
+feedback of all kind. Thanks for your time. =:)=