#===================================================================================================================
#    PROJECT:  Criteria::Compile
#===================================================================================================================


This module is available under the same terms as Perl itself.
Please read the project POD for more detailed information!


This module provides an easy framework to compile "wanted" subroutines by describing simple data structures and objects using custom grammar. Users can supply criteria using a set of basic grammar rules. Functionality can also be extended by defining custom grammar-handlers to construct the necessary logic. A number of useful grammars are provided out-of-the-box.


EXAMPLE CODE:

    #users can use common grammar to specify their criteria
    search_things(title_is => 'EXAMPLE TITLE', author_like => qr/Anthony.*/);


    #write the subroutine by using this module
    sub search_things {

        #build the criteria object
        my $criteria = Criteria::Compile->new(@_);

        #once we're ready, export it as an anonymous subroutine
        $criteria = $criteria->export_sub;

        #filter objects using the exported sub (calls ->title and ->author)
        return grep $criteria->($_), @things;
    }


DEFAULT AVAILABLE GRAMMAR:

    (.*)_is             EXAMPLE:    name_is => 'Anthony'
    (.*)_like           EXAMPLE:    address_like => qr/.*London.*/
    (.*)_greater_than   EXAMPLE:    score_greater_than => 20
    (.*)_less_than      EXAMPLE:    score_less_than => 20
    (.*)_in             EXAMPLE:    age_in => [16..25]
    (.*)_matches        EXAMPLE:    user_matches => \%allowed_users



CONTACT / SUPPORT

    - Email:  kaoyoriketsu@ansoni.com
    - IRC:    #perl on irc.freenode.net



