View on
MetaCPAN
search.cpan.org is shutting down
For details read Perl NOC. After June 25th this page will redirect to MetaCPAN.org
Thomas Müller > MooseX-Observer-0.010 > MooseX::Observer::Role::Observable

Download:
MooseX-Observer-0.010.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.010   Source  

NAME ^

MooseX::Observer::Role::Observable - Adds methods an logic to a class, enabling instances changes to be observed

VERSION ^

version 0.010

SYNOPSIS ^

    ############################################################################
    package Counter;

    use Moose;

    has count => (
        traits  => ['Counter'],
        is      => 'rw',
        isa     => 'Int',
        default => 0,
        handles => {
            inc_counter => 'inc',
            dec_counter => 'dec',
        },
    );

    # apply the observable-role and
    # provide methodnames, after which the observers are notified of changes
    with 'MooseX::Observer::Role::Observable' => { notify_after => [qw~
        count
        inc_counter
        dec_counter
        reset_counter
    ~] };

    sub reset_counter { shift->count(0) }

    sub _utility_method { ... }

    ############################################################################
    package Display;

    use Moose;

    # apply the oberserver-role, tagging the class as observer and ...
    with 'MooseX::Observer::Role::Observer';

    # ... require an update-method to be implemented
    # this is called after the observed subject calls an observed method
    sub update {
        my ( $self, $subject, $args, $eventname ) = @_;
        print $subject->count;
    }

    ############################################################################
    package main;

    my $counter = Counter->new();
    # add an observer of type "Display" to our observable counter
    $counter->add_observer( Display->new() );

    # increments the counter to 1, afterwards its observers are notified of changes
    # Display is notified of a change, its update-method is called 
    $counter->inc_counter;  # Display prints 1
    $counter->dec_counter;  # Display prints 0

DESCRIPTION ^

This is a parameterized role, that is applied to your observed class. Usually when applying this role, you provide a list of methodnames. After method modifiers are installed for these methods. They call the _notify-method, which in turn calls the update-method of all observers.

METHODS ^

add_observer($observer)

Adds an observer to the object. This Observer must do the MooseX::Observer::Role::Observer role.

count_observers

Returns how many observers are attached to the object.

all_observers

Returns a list of all observers attached to the object.

remove_observer($observer)

Remove the given observer from the object.

remove_all_observers

Removes all observers from the object.

_notify($args, $eventname)

This private method notifies all observers, passing $self, $args and an $eventname to the observers' update method.

INSTALLATION ^

See perlmodinstall for information and options on installing Perl modules.

SEE ALSO ^

Please see those modules/websites for more information related to this module.

AUTHOR ^

Thomas Müller <tmueller@cpan.org>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2011 by Thomas Müller.

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: