=pod =encoding utf8 =head1 NAME Mojolicious::Plugin::MoreUtilHelpers - Methods to format, count, sanitize, etc... =head1 SYNOPSIS # Mojolicious $self->plugin('MoreUtilHelpers', %defaults); # Mojolicious::Lite plugin 'MoreUtilHelpers', %defaults; $self->count(10, 'user'); # 10 users $self->count([User->new]); # 1 user $self->paragraphs($text); #

line 1

line 2

... $self->maxwords('a, b, c', 2) # a, b... $self->sanitize($html); # remove all HTML # keep and

tags $self->sanitize($html, tags => ['a','p']); # future calls to param($name[n]) return trimmed values $self->trim_param(@names); # DWIM Mojo::Collection $self->collection(@data); $self->collection($data); =head1 MOJOLICIOUS VERSION This version requires Mojolicious >= 7.0. If you're using an earlier version of Mojolicious you must use L or lower of this module. =head1 METHODS Defaults can be set for certain methods when the plugin is loaded. $self->plugin('MoreUtilHelpers', maxwords => { omit => ' [snip]' }, sanitize => { tags => ['code', 'pre', 'a'] }); By default and, unless stated otherwise, no defaults are set. See the method docs for more info. =head2 count $self->count(10, 'user'); # 10 users $self->count([User->new]); # 1 user $self->count([User->new], 'Luser'); # 1 Luser Use the singular or plural form of the word based on the number given by the first argument. If a non-empty array of objects are given the lowercase form of the package's basename is used. =head2 collection $self->collection(1,2,3) $self->collection([1,2,3]); $self->collection(undef); # empty collection DWIM (Bo Bhat B Bean) L creation. Currently C does not differentiate between C and array ref arguments. For example: $self->c(1)->to_array; # [1] $self->c([1])->to_array; # [[1]] $self->c(undef)->to_array; # [undef] $self->c([1,2,[3]])->to_array; # [[1,2,[3]]] Using C to create a C will give you the following: $self->collection(1)->to_array; # [1] $self->collection([1])->to_array; # [1] $self->collection(undef)->to_array; # [] $self->collection([1,2,[3]])->to_array; # [1,2,[3]] =head3 Making This Behavior The Default To replace L<< the C helper|Mojolicious::Plugin::DefaultHelpers/c >> with C: $self->plugin('MoreUtilHelpers', collection => { patch => 1 }); This B replace L. =head2 maxwords $self->maxwords($str, $n); $self->maxwords($str, $n, '…'); Truncate C<$str> after C<$n> words. If C<$str> has more than C<$n> words traling punctuation characters are stripped from the C<$n>th word and C<'...'> is appended. An alternate ommision character can be given as the third option. =head3 Setting Defaults $self->plugin('MoreUtilHelpers', maxwords => { omit => ' [snip]', max => 20 }); =head2 paragraphs $self->paragraphs($text); Wrap lines seperated by empty C<\r\n> or C<\n> lines in HTML paragraph tags (C

). For example: C would be turned into C<<

A\r\n

B\r\n

>>. The returned HTML is assumed to be safe and is wrapped in a L. =head2 sanitize $self->sanitize($html); $self->sanitize($html, tags => ['a','p'], attr => ['href']); Remove all HTML tags in the string given by C<$html>. If C and -optionally- C are given, remove everything but those tags and attributes. The returned HTML is assumed to be safe and is wrapped in a L. =head3 Setting Defaults $self->plugin('MoreUtilHelpers', sanitize => { tags => ['a','p'], attr => ['href'] }); =head2 trim_param $self->trim_param(@names); $self->trim_param(qr{user\.}); For each param name in C<@names>, make future calls to L return these params' values without leading and trailing whitespace. If an element of C<@names> is a regexp all matching param names will be processed. In some cases it may be best to add this to your routes via L: my $account = $self->routes->under(sub { shift->trim_param('name', 'email', 'phone'); return 1; }); $account->post('save')->to('account#save'); $account->post('update')->to('account#update'); Now calling C<< $self->param >> in these actions for C<'name'>, C<'email'> or C<'phone'> will return a trimmed result. Leading/trailing whitespace is removed by calling L. =head1 SEE ALSO L, L, L, L =head1 AUTHOR Skye Shaw (skye.shaw [AT] gmail.com) =head1 LICENSE Copyright (c) 2012-2014 Skye Shaw. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut