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