The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

App::Rssfilter::FromHash - a role for creating App::Rssfilter objects from a configuration hash

VERSION

version 0.07

SYNOPSIS

    {
        package Cool::Name;
        use Role::Tiny::With;
        with 'App::Rssfilter::FromHash';

        sub new { ... }
        sub add_group { ... }
        sub add_feed { ... }
        sub add_rule { ... }
    };


    my $cool_name = Cool::Name->from_hash(
        name => 'some group',
        rules => [
            # add_rule will be called with ...
            keyvalue_pair => 'some value',
            # then ...
            {
                this_hashref => 'of options',
                with_multiple => 'keys and values',
            },
            # and then ...
            $already_constructed_object,
        ],
        feeds => [
            # same as rules above
            # mix elements as you please
            keyword_pair_for_first_feed => 'and value',
            keyword_pair_for_second_feed => 'with different value',
            {
                feed_option1 => 'more key-value pairs',
                feed_option2 => 'which will be passed as arguments',
                feed_option3 => 'for the third call to add_feed',
            },
        ],
        groups => [
            {
                name => 'a subgroup',
                # subgroups can have their own feeds, rules, and subgroups
                feeds => [ ... ],
                rules => [ ... ],
                groups => [ ... ],
            },
            {
                name => 'another subgroup',
                feeds => [ ... ],
                rules => [ ... ],
                groups => [ ... ],
            },
        ],
    );

DESCRIPTION

This role will extend its receiving class with a "from_hash" method. It requires that the receiver has add_group, add_feed, and add_rule methods, and accepts a name attribute to its constructor.

METHODS

from_hash

    my $receiver_instance = Receiver::Class->from_hash( %config );

Create a new instance of the receiving class (using $config{name} as its name), then walk the hash to create subgroups and add feeds or rules to it (or its subgroups).

The hash may have four elements:

  • name - name of this group

  • groups - arrayref of hashrefs for subgroups, same schema as the original hash

  • feeds - arrayref of feeds to fetch

  • rules - arrayref of rules to apply

Bare scalars in feeds will be collected into key-value pairs; everything else will be mapped onto the receiver's add_feed. Likewise for rules.

split_for_ctor

    B<INTERNAL>

    my @arguments_for_ctor_in_arrayrefs = $receiving_instance->split_for_ctor( @args );

Returns the elements of @args partitioned into arrayrefs, whose contents are suitable arguments for a Moose-y constructor. Collects bare scalars in @args with their following element into key-value pairs; arrayrefs & hashrefs are dereferenced; everthing else is taken as-is.

AUTHOR

Daniel Holz <dgholz@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Daniel Holz.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.