More Badger::Class Hooks

package Your::Forager;

use Badger::Class
    base       => 'Badger::Base',
    utils      => 'blessed params min max',
    constants  => 'ARRAY CRLF DELIMITER',
    codec      => 'storable+base64',
    filesystem => 'File';

sub hoard {
    my ($self, $filename, $data) = @_;
    File($filename)->write( encode($data) );
}

sub forage {
    my ($self, $filename) = @_;
    decode( File($filename)->text );
}
Thus Spake Andy:

Here's another ever-so-slightly contrived example showing off some other hooks. The utils hook does the same thing as use Badger::Utils in importing any of the various utilities it defines or can load from other modules. The constants (note plural) imports constants from Badger::Constants. Note that we're not actually using any of these utils or constants in the code snippets... they're just for show. However we are using the next two items. The codec option is delegated to the Badger::Codecs module. This constructs a composite codec which pipes data through Storable and then MIME::Base64 all in one go. It exports a codec constant subroutine which returns a codec object (codec->encode() and codec->decode()) and encode() and decode() subroutines which work in the traditional functional style. We're only using one codec, so this works just fine. If we were using several separate codecs then we would have specified a hash array so that we can name them (e.g. { codec1 => 'storable+base64', ... }). The final filesystem option is delegated to Badger::Filesystem. It does the same thing as writing use Badger::Filesystem 'File' in importing a File() subroutine for constructing Badger::Filesystem::File objects.

This module is an example of a simple serialisation object which has a method (hoard()) for serialising some data and storing it in a file. We create a File() object from the $filename and then call its write() method, passing the serialised data returned from our encode() function. The forage() method fetches it back out by loading the file text and passing it into the decode() method.