Yanick Champoux > Perl-Achievements > Perl::Achievements::Achievement

Download:
Perl-Achievements-0.4.0.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

Open  0
View/Report Bugs
Module Version: v0.4.0   Source  

NAME ^

Perl::Achievements::Achievement - base role for achievements

VERSION ^

version 0.4.0

SYNOPSIS ^

    package Perl::Achievements::Achievement::PerlAchiever;

    use strict;
    use warnings;

    use Moose;
    use MooseX::SemiAffordanceAccessor;

    with 'Perl::Achievements::Achievement';

    has runs => (
        traits => [ qw/ Counter Perl::Achievements::Role::ConfigItem / ],
        isa     => 'Num',
        is      => 'rw',
        default => 0,
        handles => {
            inc_runs => 'inc',
        },
    );

    sub scan {
        my $self = shift;

        $self->inc_runs;

        return unless $self->runs >= 2** $self->level;

        $self->inc_level;

        $self->unlock( 
            sprintf "ran perl-achievements against %d scripts/modules",
                    2 ** ( $self->level - 1 ) 
        );
    }

    1;

DESCRIPTION ^

Each type of achievement is a module consuming the Perl::Achievements::Achievement role.

To be able to preserve counters and states across runs, all attributes of the class having the Perl::Achievements::Role::ConfigItem trait will be serialized and saved in a yaml file in the $PERL_ACHIEVEMENTS_HOME/achievements directory.

REQUIRED METHODS ^

scan()

scan is the only required method by the role. It is typically invoked by the main scan() method of the main Perl::Achievements object, and is expected to inspect the current Perl file (available via ppi()) and unlock the achievement when the right conditions are met.

METHODS ^

app()

Returns the Perl::Achievements object to which this achievement object belongs to.

ppi()

Returns the PPI::Document object corresponding to the Perl script currently under study.

log( $message )

Logs the $message.

log_debug( $message )

Debug-level logging.

level()

Returns the current achieved level. A level of undef means that the achievement has not been reached yet, whereas a level of 0 is used for achievements that don't have multiple levels.

set_level( $level )

Sets the level to $level.

inc_level( $increment )

Increments the level by the $increment. If the increment is not given, increment by 1.

unlock( $details )

Unlocks the achievement. An optional message can be passed, providing specific on the deed.

If not set manually beforehand, unlocking the achievement would automatically set the level to 0.

AUTHOR ^

Yanick Champoux <yanick@cpan.org>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2012 by Yanick Champoux.

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

syntax highlighting: