File Coverage

blib/lib/Dancer/Plugin/FlashMessage.pm
Criterion Covered Total %
statement 22 22 100.0
branch 5 6 83.3
condition 4 5 80.0
subroutine 6 6 100.0
pod n/a
total 37 39 94.8


line stmt bran cond sub pod time code
1             #
2             # This file is part of Dancer-Plugin-FlashMessage
3             #
4             # This software is copyright (c) 2011 by Damien "dams" Krotkine.
5             #
6             # This is free software; you can redistribute it and/or modify it under
7             # the same terms as the Perl 5 programming language system itself.
8             #
9 3     3   3037 use strict;
  3         7  
  3         128  
10 3     3   19 use warnings;
  3         7  
  3         187  
11              
12             package Dancer::Plugin::FlashMessage;
13             {
14             $Dancer::Plugin::FlashMessage::VERSION = '0.314';
15             }
16             # ABSTRACT: Dancer plugin to display temporary messages, so called "flash messages".
17              
18 3     3   18 use Carp;
  3         6  
  3         246  
19 3     3   1035 use Dancer ':syntax';
  3         319221  
  3         23  
20 3     3   3930 use Dancer::Plugin;
  3         4343  
  3         1284  
21              
22             our $AUTHORITY = 'DAMS';
23              
24             my $conf = plugin_setting;
25             my $token_name = $conf->{token_name} || 'flash';
26             my $session_hash_key = $conf->{session_hash_key} || '_flash';
27              
28             my $session_engine;
29              
30             register flash => sub ($;$) {
31 4     4   5308 my ($key, $value) = @_;
32              
33 4 50 66     31 $session_engine ||= engine 'session'
34             or croak __PACKAGE__ . " error2 : there is no session engine configured in the configuration. You need a session engine to be able to use this plugin";
35              
36 4   100     85 my $flash = session($session_hash_key) || {};
37 4 100       1359 @_ == 2 and $flash->{$key} = $value;
38 4 100       17 @_ == 1 and $value = delete $flash->{$key};
39 4         13 session $session_hash_key, $flash;
40 4         708 return $value;
41             };
42              
43             hook before_template => sub {
44             shift->{$token_name} = { map { my $key = $_; my $value;
45             ( $key, sub { defined $value and return $value;
46             my $flash = session($session_hash_key) || {};
47             $value = delete $flash->{$key};
48             session $session_hash_key, $flash;
49             return $value;
50             } );
51             } ( keys %{session($session_hash_key) || {} })
52             };
53             };
54              
55             register_plugin;
56              
57             1;
58              
59              
60              
61             =pod
62              
63             =head1 NAME
64              
65             Dancer::Plugin::FlashMessage - Dancer plugin to display temporary messages, so called "flash messages".
66              
67             =head1 VERSION
68              
69             version 0.314
70              
71             =head1 DESCRIPTION
72              
73             This plugin helps you display temporary messages, so called "flash messages".
74             It provides a C method to define the message. The plugin then takes
75             care of attaching the content to the session, propagating it to the templating
76             system, and then removing it from the session.
77              
78             However, it's up to you to have a place in your views or layout where the
79             message will be displayed. But that's not too hard (see L).
80              
81             Basically, the plugin gives you access to the 'flash' hash in your views. It
82             can be used to display flash messages.
83              
84             By default, the plugin works using a decent configuration. However, you can
85             change the behaviour of the plugin. See L
86              
87             =head1 NAME
88              
89             Dancer::Plugin::FlashMessage - A plugin to display "flash messages" : short temporary messages
90              
91             =head1 SYNOPSYS
92              
93             Example with Template Toolkit
94              
95             In your configuration, make sure you have session configured. Of course you can
96             use any session engine :
97              
98             session: "simple"
99              
100             In your index.tt view or in your layout :
101              
102             <% IF flash.error %>
103            
<% flash.error %>
104             <% END %>
105              
106             In your css :
107              
108             .error { background: #CEE5F5; padding: 0.5em;
109             border: 1px solid #AACBE2; }
110              
111             In your Dancer App :
112              
113             package MyWebService;
114              
115             use Dancer;
116             use Dancer::Plugin::FlashMessage;
117              
118             get '/hello' => sub {
119             flash error => 'Error message';
120             template 'index';
121             };
122              
123             =head1 METHODS
124              
125             =head2 flash
126              
127             # sets the flash message for the warning key
128             flash warning => 'some warning message';
129              
130             # retrieves and removes the flash message for the warning key
131             my $warning_message = flash 'warning';
132              
133             This method can take 1 or 2 parameters. When called with two parameters, it
134             sets the flash message for the given key.
135              
136             When called with one parameter, it returns the value of the flash message of
137             the given key. The message is deleted from the flash hash in the session.
138              
139             In both cases, C always returns the value;
140              
141             =head1 IN YOUR TEMPLATE
142              
143             After having set a flash message using C in your Dancer route, you can
144             access the flash message from within your template. The plugin provides you
145             with the C hashref, that you can access in your template, for example
146             like this :
147              
148            
<% flash.error %>
149              
150             When you use it in your template, the flash message is deleted. So next
151             time, C will not exist.
152              
153             =head1 CONFIGURATION
154              
155             With no configuration whatsoever, the plugin will work fine, thus contributing
156             to the I motto of Dancer.
157              
158             =head2 configuration default values
159              
160             These are the default values. See below for a description of the keys
161              
162             plugins:
163             FlashMessage:
164             token_name: flash
165             session_hash_key: _flash
166              
167             =head2 configuration description
168              
169             =over
170              
171             =item token_name
172              
173             The name of the template token that will contain the hash of flash messages.
174             B : C
175              
176             =item session_hash_key
177              
178             You probably don't need that, but this setting allows you to change the name of
179             the session key used to store the hash of flash messages. It may be useful in
180             the unlikely case where you have key name conflicts in your session. B :
181             C<_flash>
182              
183             =back
184              
185             =head1 COPYRIGHT
186              
187             This software is copyright (c) 2011 by Damien "dams" Krotkine .
188              
189             =head1 LICENCE
190              
191             This is free software; you can redistribute it and/or modify it under
192             the same terms as the Perl 5 programming language system itself.
193              
194             =head1 AUTHORS
195              
196             This module has been written by Damien "dams" Krotkine .
197              
198             =head1 SEE ALSO
199              
200             L
201              
202             =head1 AUTHOR
203              
204             Damien "dams" Krotkine
205              
206             =head1 COPYRIGHT AND LICENSE
207              
208             This software is copyright (c) 2011 by Damien "dams" Krotkine.
209              
210             This is free software; you can redistribute it and/or modify it under
211             the same terms as the Perl 5 programming language system itself.
212              
213             =cut
214              
215              
216             __END__