DDG::Block - Block to bundle plugins with triggers
version 1017
package DDG::Block::MyType; use Moo; with qw( DDG::Block ); sub request { ... } 1;
as another type of Block (not needed, checkout DDG::Block::Words and DDG::Block::Regexp).
my $block = DDG::Block::MyType->new( plugins => [qw( DDG::Goodie::A DDG::Goodie::B DDG::Goodie::C )] );
or
package DDG::Block::MyType::BlockA; use Moo; extends 'DDG::Block::MyType'; sub _build_plugins {[ DDG::Goodie::A DDG::Goodie::B DDG::Goodie::C ]} 1;
This is the Moo::Role of the so called Block concept. Its mission is to allow a list of plugins to get used based on specific trigger types. As an extend you can see DDG::Block::Regexp and DDG::Block::Words.
A class with DDG::Block needs a request function to handle a DDG::Request. It gets as only parameter the request object and needs to return a list of results or an empty list. Dont forget that returning undef on the request function means something depending of the context the DDG::Block is used.
The list of the plugins used for this block, its an array with a list of strings or hashes. A string defines a class which just gets regular instantiated via new, if you define a hash the parameter given in this hash are given to the instantiation process of the class defined by the key "class" inside the hash.
This attribute defines if the block should die on missing plugins, or if he should just go on. If given a CODEREF, then this CODEREF will get executed with the block as first parameter, and the missing class name as second. By default this is disabled.
This attribute defines if the block should stop if there is a hit which gives a result. By default this is on.
This attribute defines if the block is only allowing one instance of every plugin be called once, even if they hit cause of several cases. By default this is off, and should stay off.
A coderef that is executed before the build of the plugins. It gets the block object as first and the class name to instantiate as second parameter.
A coderef that is executed before the build of the plugins. It gets the block object as first and the object of the plugin as second parameter.
This private attribute contains an array with an arrayref of trigger and plugin, its the main point where all subclasses of Blocks fetches the plugin => triggers definition. Do never set this attribute yourself, or you are doomed ;). The generation of this array also instantiates the plugins, which makes it an important point for the general handling plugins who needs "after_build" and "before_build". It gets triggered on instantiation of the Block.
The function goes through all plugin class names given on the setup of the blog
This read-only attribute contains an arrayref of all plugins in a row. This can be used to iterate over all objects more easy then using "plugin_objs". It gets generated only on usage and takes "plugin_objs" as source.
Get called to find all the triggers given by a specific plugin. If your Block subclass requires a special handling here, then it can be overloaded and just behave like you require. It gets the object of the plugin as first parameter.
Gets called for every single trigger of a plugin to parse out and sort out. By default it doesnt do anything, but as the other functions you can overload this behaviour.
Gets called, if the plugin doesnt deliver any trigger, here you can wrap this to your own specific definition. Its so far only used in the DDG::Block::Words, to disallow empty triggers totally. By default it returns undef.
This function is used for calling handle_request_matches on the plugin, which is implemented there via DDG::Meta::RequestHandler.
DuckDuckGo <open@duckduckgo.com>
This software is Copyright (c) 2013 by DuckDuckGo, Inc. https://duckduckgo.com/.
This is free software, licensed under:
The Apache License, Version 2.0, January 2004
To install DDG, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DDG
CPAN shell
perl -MCPAN -e shell install DDG
For more information on module installation, please visit the detailed CPAN module installation guide.