The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Solution::Filter::Standard - Default Filters Based on Liquid's Standard Set

Standard Filters

These are the current default filters. They have been written to behave exactly like their Ruby Liquid counterparts accept where Perl makes improvment irresistable.

date

Reformat a date...

  • ...by calling the object's strftime method. This is tried first so dates may be defined as a DateTime or DateTimeX::Lite object...

        # On my dev machine where obj is an object built with DateTime->now()
        {{ obj  | date:'%c' }} => Dec 14, 2009 2:05:31 AM
  • ...with the POSIX module's strftime function. This is the last resort and flags may differ by system so... Buyer beware.

        # On my dev machine where date contains the current epoch as an integer
        {{ date | date:'%c' }} => 12/14/2009 2:05:31 AM

capitalize

Capitalize words in the input sentence. This filter first applies Perl's lc function and then the ucfirst function.

    {{ 'this is ONLY a test.' | capitalize }} => This is only a test.

downcase

Convert an input string to lowercase using Perl's lc function.

    {{ 'This is HUGE!' | downcase }} => This is huge!

upcase

Convert a input string to uppercase using Perl's uc function.

first

Get the first element of the passed in array

    # Where array is [1..6]
    {{ array | first }} => 1

last

Get the last element of the passed in array.

    # Where array is [1..6]
    {{ array | last }} => 6

join

Joins elements of the array with a certain character between them.

    # Where array is [1..6]
    {{ array | join }}      => 1 2 3 4 5 6
    {{ array | join:', ' }} => 1, 2, 3, 4, 5, 6

sort

Sort elements of the array.

    # Where array is defined as [3, 5, 7, 2, 8]
    {{ array | sort }} => 2, 3, 5, 7, 8

size

Return the size of an array, the length of a string, or the number of keys in a hash.

    # Where array is [1..6] and hash is { child => 'blarg'}
    {{ array     | size }} => 6
    {{ 'Testing' | size }} => 7
    {{ hash      | size }} => 1

strip_html

Strip html from string. Note that this filter uses s[<.*?][]g> in emmulation of the Ruby Liquid library's strip_html function. ...so don't email me if you (correcly) think this is a braindead way of stripping html.

    {{ '<div>Hello, <em id="whom">world!</em></div>' | strip_html }}  => Hello, world!
    '{{ '<IMG SRC = "foo.gif" ALT = "A > B">'        | strip_html }}' => ' B">'
    '{{ '<!-- <A comment> -->'                       | strip_html }}' => ' -->'

strip_newlines

Strips all newlines (\n) from string using the regular expression s[\n][]g.

newline_to_br

Replaces each newline (\n) with html break (<br />\n).

replace

Replace all occurrences of a string with another string. The replacement value is optional and defaults to an empty string ('').

    {{ 'foofoo'                 | replace:'foo','bar' }} => barbar
    {% assign this = 'that' %}
    {{ 'Replace that with this' | replace:this,'this' }} => Replace this with this
    {{ 'I have a listhp.'       | replace:'th' }}        => I have a lisp.

replace_first

Replaces the first occurrence of a string with another string. The replacement value is optional and defaults to an empty string ('').

    {{ 'barbar' | replace_first:'bar','foo' }} => 'foobar'

remove

Remove each occurrence of a string.

    {{ 'foobarfoobar' | remove:'foo' }} => 'barbar'

remove_first

Remove the first occurrence of a string.

    {{ 'barbar' | remove_first:'bar' }} => 'bar'

truncate

Truncate a string down to x characters.

    {{ 'Running the halls!!!' | truncate:19 }}         => Running the hall..
    {% assign blarg = 'STOP!' %}
    {{ 'Any Colour You Like' | truncate:10,blarg }}    => Any CSTOP!
    {{ 'Why are you running away?' | truncate:4,'?' }} => Why?
    {{ 'Ha' | truncate:4 }}                            => Ha
    {{ 'Ha' | truncate:1,'Laugh' }}                    => Laugh
    {{ 'Ha' | truncate:1,'...' }}                      => ...

...and...

    {{ 'This is a long line of text to test the default values for truncate' | truncate }}

...becomes...

    This is a long line of text to test the default...

truncatewords

Truncate a string down to x words.

    {{ 'This is a very quick test of truncating a number of words' | truncatewords:5,'...' }}
    {{ 'This is a very quick test of truncating a number of words where the limit is fifteen' | truncatewords: }}

...becomes...

    This is a very quick...
    This is a very quick test of truncating a number of words where the limit...

prepend

Prepend a string.

    {{ 'bar' | prepend:'foo' }} => 'foobar'

append

Append a string.

    {{ 'foo' | append:'bar' }} => 'foobar'

minus

Simple subtraction.

    {{ 4       | minus:2 }}  => 2
    '{{ 'Test' | minus:2 }}' => ''

plus

Simple addition or string contatenation.

    {{ 154    | plus:1183 }}  => 1337
    {{ 'What' | plus:'Uhu' }} => WhatUhu

MATHFAIL!

Please note that integer behavior differs with Perl vs. Ruby so...

    {{ '1' | plus:'1' }}

...becomes 11 in Ruby but 2 in Perl.

times

Simple multiplication or string repetion.

    {{ 'foo' | times:4 }} => foofoofoofoo
    {{ 5     | times:4 }} => 20

divided_by

Simple division.

    {{ 10 | divided_by:2 }} => 5

See Also

Liquid for Designers: http://wiki.github.com/tobi/liquid/liquid-for-designers

Solution's docs on custom filter creation

Author

Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/

The original Liquid template system was developed by jadedPixel (http://jadedpixel.com/) and Tobias Lütke (http://blog.leetsoft.com/).

License and Legal

Copyright (C) 2009 by Sanko Robinson <sanko@cpan.org>

This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0. See the LICENSE file included with this distribution or http://www.perlfoundation.org/artistic_license_2_0. For clarification, see http://www.perlfoundation.org/artistic_2_0_notes.

When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License. See http://creativecommons.org/licenses/by-sa/3.0/us/legalcode. For clarification, see http://creativecommons.org/licenses/by-sa/3.0/us/.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 333:

Non-ASCII character seen before =encoding in 'Lütke'. Assuming UTF-8