package TrackDirty;
use 5.006;
use strict;
use warnings;
use Moose ();
use Moose::Exporter;
=head1 NAME
TrackDirty
=head1 VERSION
Version 0.05
=cut
our $VERSION = '0.05';
Moose::Exporter->setup_import_methods(
with_meta => [ ],
as_is => [ ],
also => 'Moose',
);
=head1 SYNOPSIS
A module for allowing objects to track their attributes changes.
This is a very cut down version of an old module MooseX::TrackDirty::Attributes
(probably).
This code has now been relegated to the tests because the attributes have
been internalised into the module since it's so cut down and specific
to our purpose now, it's not really worth having it seperate. If you want
this functionality, simply use the MooseX::TrackDirty::Attributes module.
In order to use this module you can use this module like you would include
Moose or if you are doing something fancy you can hook the roles in manually
yourself.
use TrackDirty;
has property => (is => 'ro', isa => 'Str');
sub save {
my $self = shift;
if($self->is_dirty) {
foreach my $key ($self->dirty_attributes) {
...
}
$self->mark_all_clean;
}
...
=head1 METHODS
=head2 mark_all_clean
This will mark all the attributes clean.
=head2 has_dirty_attributes
Returns true if any of the attributes have been set.
=head2 all_attributes_clean
Returns true if no attributes have been touched.
=head2 dirty_attributes
Return an array of the attributes touched.
=head2 _set_dirty
Set a field as dirty.
$self->_set_dirty('property');
=head2 init_meta
This is a function used to setup the Moose::Exporter and load in all these functions.
If you are creating your own Moose::Exporter you should simply do thse bits yourself,
Moose::Util::MetaRole::apply_metaroles(
for => $args{for_class},
class_metaroles => {
attribute => ['OpenERP::OOM::Roles::Attribute'],
},
);
Moose::Util::MetaRole::apply_base_class_roles(
for_class => $args{for_class},
roles => ['OpenERP::OOM::Roles::Class'],
);
=head1 LICENSE AND COPYRIGHT
Copyright (C) 2011 OpusVL
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
=cut
sub init_meta {
shift;
my %args = @_;
Moose->init_meta( %args );
Moose::Util::MetaRole::apply_metaroles(
for => $args{for_class},
class_metaroles => {
attribute => ['OpenERP::OOM::Roles::Attribute'],
},
);
Moose::Util::MetaRole::apply_base_class_roles(
for_class => $args{for_class},
roles => ['OpenERP::OOM::Roles::Class'],
);
}
1; # End of OpusVL::MooseX::TrackDirty