summaryrefslogtreecommitdiff
path: root/posts/2010-04-19-the-dancer-ecosystem.org
blob: e155573d3b928d44cede4c15a7a949dabe0f23f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
Even though it's still a young project, an active community is starting
to emerge around Dancer. Some modules start to appear on CPAN and github
to add functionalities, or to extend existing ones.

** Templates

By default, Dancer comes with support for two templating systems:
Template Toolkit and Dancer::Template::Simple, a small templating engine
written by sukria. But support for other templating systems are
available:

-  Dancer::Template::Tenjin by ido
-  Dancer::Template::Sandbox by Sam Graham
-  Dancer::Template::Tiny by Sawyer
-  Dancer::Template::MicroTemplate by me
-  Dancer::Template::Mason by Yanick Champoux
-  Dancer::Template::Haml by David Moreno

** Logger

Out of the box, Dancer only has a simple logging system to write to
file, but more logging sytems are available:

#+BEGIN_HTML
  <ul>
#+END_HTML

#+BEGIN_HTML
  <li>
#+END_HTML

Dancer::Logger::Syslog by sukria

#+BEGIN_HTML
  </li>
#+END_HTML

#+BEGIN_HTML
  <li>
#+END_HTML

Dancer::Logger::LogHandler by me

#+BEGIN_HTML
  </li>
#+END_HTML

#+BEGIN_HTML
  <li>
#+END_HTML

Dancer::Logger::PSGI by me

#+BEGIN_HTML
  </li>
#+END_HTML

#+BEGIN_HTML
  </ul>
#+END_HTML

The last one is for writing directly your log message via Plack. You can
use a middleware like P::M::LogDispatch or P::M::Log4perl to handle logs
for your application. Even better, if you use P::M::ConsoleLogger, you
can have logs from your Dancer application in your javascript console.

** Debug

To debug your application with Plack, you can use the awesome
Plack::Middleware::Debug. I've writen Dancer::Debug (which requires my
fork of P::M::Debug), a middleware that add panels, with specific
informations for Dancer applications.

To activate this middleware, update your app.psgi to make it look like
this:

#+BEGIN_SRC perl
    my $handler = sub {
        my $env     = shift;
        my $request = Dancer::Request->new($env);
        Dancer->dance($request);
    };
    $handler = builder {
        enable "Debug", panels => [
            qw/Dancer::Settings Dancer::Logger Environment Memory
                ModuleVersions Response Session Parameters Dancer::Version /
        ];
        $handler;
    };
#+END_SRC

** Plugins

Dancer has support for plugins since a few version. There is not a lot
of plugins at the moment, but this will soon improve. Plugins support is
one of the top priorities for the 1.2 release.

*** Dancer::Plugin::REST

This one is really nice. This plugin, used with the serialization stuff,
allow you to write easily REST application.

#+BEGIN_SRC perl
    resource user => get => sub {    # return user where id = params->{id} },
        create => sub {              # create a new user with params->{user} },
        delete => sub {          # delete user where id = params->{id} },
        update => sub {      # update user with params->{user} };
#+END_SRC

And you got the following routes:

-  GET /user/:id
-  GET /user/:id.:format
-  POST /user/create
-  POST /user/create.:format
-  DELETE /user/:id
-  DELETE /user/:id.:format
-  PUT /user/:id
-  PUT /user/:id.:format

*** Dancer::Plugin::Database

This plugin, by bigpresh, add the database keyword to your app.

#+BEGIN_SRC perl
    use Dancer;
    use Dancer::Plugin::Database;

    # Calling the database keyword will get you a connected DBI handle:
    get '/widget/view/:id' => sub {
        my $sth = database->prepare('select * from widgets where id = ?',
            {}, params->{id});
        $sth->execute;
        template 'display_widget', {widget => $sth->fetchrow_hashref};
    };
#+END_SRC

*** Dancer::Plugin::SiteMap

With this plugin, by James Ronan, a sitemap of your application is
created.

#+BEGIN_HTML
  <blockquote>
#+END_HTML

Plugin module for the Dancer web framwork that automagically adds
sitemap routes to the webapp. Currently adds /sitemap and /sitemap.xml
where the former is a basic HTML list and the latter is an XML document
of URLS.

#+BEGIN_HTML
  </blockquote>
#+END_HTML

** you can help! :)

There is still a lot of stuff to do. Don't hesitate to come on
#dancer@irc.perl.org to discuss ideas or new features that you would
like.