NAME
Class::Monadic - Provides monadic methods (a.k.a. singleton methods)
VERSION
This document describes Class::Monadic version 0.01.
SYNOPSIS
use Class::Monadic;
my $dbh1 = DBI->connect(...);
Class::Monadic->initialize($dbh1)->add_method(
foo => sub{ ... },
);
$dbh1->foo(...); # OK
my $dbh2 = DBI->connect(...);
$dbh2->foo(); # throws "Can't locate object method ..."
# because foo() is $dbh1 specific.
# import a syntax sugar to make an object monadic
use Class::Monadic qw(monadic);
monadic($dbh1)->inject_base(qw(SomeComponent OtherComponent));
# now $dbh1 is-a both SomeComponent and OtherComponent
monadic($dbh1)->add_field(qw(x y z));
$dbh1->set_x(42);
print $dbh->get_x(); # => 42
DESCRIPTION
Class::Monadic provides per-object classs, monadic classes. It is also known as singleton classes in other languages, e.g. Ruby.
Monadic classes is used in order to define monadic methods (a.k.a. singleton methods), which are only available at the specific object they are defined into.
INTERFACE
Exportable functions
monadic($object)
A syntax sugar to Class::Monadic->initialize($object).
Class methods
Class::Monadic->initialize($object)
Makes $object monadic, and returns Class::Monadic instance, $meta.
Instance methods
$meta->name
Returns the name of the monadic class.
$meta->add_method(%name_code_pairs)
Adds methods into the monadic class.
$meta->add_field(@field_names)
Adds fields and accessors named get_$name/set_$name into the monadic class.
Fields are not stored in the object. Rather, stored in the monadic class.
$meta->add_modifier($type, @method_names, $code)
Adds method modifiers to specific methods, Using Class::Method::Modifiers::Fast.
$type is must be before, around or after.
Example:
monadic($obj)->add_modifier(before => foo => sub{ ... });
monadic($obj)->add_modifier(around => qw(foo bar baz),
sub{
my $next = shift;
my(@args) = @_;
# ...
return &{$next};
}
);
monadic($obj)->add_modifier(after => xyzzy => sub{ ... });
$meta->inject_base(@component_classes)
Adds @component_classes into the is-a hierarchy of the monadic class.
DEPENDENCIES
Perl 5.8.1 or later.
Data::Util.
Hash::FieldHash.
BUGS
No bugs have been reported.
Please report any bugs or feature requests to the author.
SEE ALSO
AUTHOR
Goro Fuji (gfx) <gfuji(at)cpan.org>.
LICENSE AND COPYRIGHT
Copyright (c) 2009, Goro Fuji (gfx). Some rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.