The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 209:

Non-ASCII character seen before =encoding in 'Müller'. Assuming CP1252