diff --git a/lib/Gideon.pm b/lib/Gideon.pm index 5184516..a5a5437 100644 --- a/lib/Gideon.pm +++ b/lib/Gideon.pm @@ -16,52 +16,18 @@ my $__meta = undef; my $__store = {}; our %stores = (); -after 'new' => sub { - - my $self = shift; - my $meta = $self->meta; - - for my $attribute ( - map { $meta->get_attribute($_) } - sort $meta->get_attribute_list - ) { - - my $name = $attribute->name; - - $meta->add_before_method_modifier( - $name, - sub { - my $self = shift; - my $new_value = shift; - if ( defined $new_value ) { - my $meta = $self->meta; - my $attribute = $meta->get_attribute($name); - my $reader = $attribute->get_read_method; - my $value = $self->$reader; - if ( defined $value and $value ne $new_value ) { - $self->is_modified(1); - } - } - } - ); - } - $meta->add_attribute( - 'is_modified' => ( - is => 'rw', - isa => 'Bool', - default => 0, - ) - ); - $meta->add_attribute( - 'is_stored' => ( - is => 'rw', - isa => 'Bool', - default => 0, - lazy => 1, - ) - ); - -}; +has 'is_modified' => ( + is => 'rw', + isa => 'Bool', + default => 0, +); + +has 'is_stored' => ( + is => 'rw', + isa => 'Bool', + default => 0, + lazy => 1, +); sub register_store { my $class = shift; diff --git a/lib/Gideon/Meta/Attribute/DBI.pm b/lib/Gideon/Meta/Attribute/DBI.pm index 2a6a510..039f016 100644 --- a/lib/Gideon/Meta/Attribute/DBI.pm +++ b/lib/Gideon/Meta/Attribute/DBI.pm @@ -24,7 +24,13 @@ has 'primary_key' => ( predicate => 'has_key', ); +sub new { + my $class = shift; + push @_, trigger => sub { $_[0]->is_modified(1) }; + $class->SUPER::new(@_); +} + package Mouse::Meta::Attribute::Custom::Gideon; sub register_implementation {'Gideon::Meta::Attribute::DBI'} -1; \ No newline at end of file +1;