Changeset 4716
- Timestamp:
- 01/16/08 23:28:25 (5 years ago)
- Location:
- lang/perl/Class-Accessor-Lvalue-Trigger/trunk
- Files:
-
- 4 added
- 3 modified
-
Makefile.PL (modified) (1 diff)
-
lib/Class/Accessor/Lvalue/Trigger.pm (modified) (5 diffs)
-
t/01_simple.t (modified) (2 diffs)
-
t/01_trigger_method_overwrite.t (added)
-
t/02_simple_ro.t (added)
-
t/03_simple_wo.t (added)
-
t/04_mix.t (added)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Class-Accessor-Lvalue-Trigger/trunk/Makefile.PL
r4414 r4716 4 4 5 5 requires $_ for (qw/ 6 Class::Accessor ::Fast6 Class::Accessor 7 7 Want 8 8 /); -
lang/perl/Class-Accessor-Lvalue-Trigger/trunk/lib/Class/Accessor/Lvalue/Trigger.pm
r4414 r4716 3 3 use strict; 4 4 use warnings; 5 use base 'Class::Accessor'; 6 5 7 our $VERSION = '0.01'; 6 use base 'Class::Accessor::Fast';7 8 8 our $TRIGGER_METHOD = 'lvalue_accessor_trigger'; 9 our $TRIGGER_METHOD = sub { 10 my $self = shift; 11 my $name = shift; 12 13 my $last_name = $self->{__class_accessor_lvalue_trigger_lastname}; 14 my $last_value = $self->{__class_accessor_lvalue_trigger_lastvalue}; 15 16 $self->set($last_name, $self->{$last_name}, $last_value, @_) if $last_name; 17 $self->{$name} = $self->get($name, @_); 18 19 $self->{__class_accessor_lvalue_trigger_lastname} = $name; 20 $self->{__class_accessor_lvalue_trigger_lastvalue} = $self->{$name}; 21 22 $self->{$name}; 23 }; 24 25 sub set { shift->SUPER::set(@_[1..2]) } 26 sub get { shift->SUPER::get($_[0]) } 9 27 10 28 sub make_accessor { 11 29 my($class, $name) = @_; 12 30 13 my $method = $TRIGGER_METHOD;14 31 return sub :lvalue { 15 32 my $self = shift; 16 if (ref $ method eq 'CODE') {17 $ method->($self, $name, 'rw', @_);18 } elsif ( $self->can($method)) {19 $self->$ method($name, 'rw', @_);33 if (ref $TRIGGER_METHOD) { 34 $TRIGGER_METHOD->($self, $name, 'rw', @_) if ref $TRIGGER_METHOD eq 'CODE' 35 } elsif (defined $TRIGGER_METHOD) { 36 $self->$TRIGGER_METHOD($name, 'rw', @_); 20 37 } 21 38 $self->{$name}; … … 27 44 require Want; 28 45 29 my $method = $TRIGGER_METHOD;30 46 return sub :lvalue { 31 47 my $self = shift; … … 33 49 my $caller = caller; 34 50 require Carp; 35 Carp::croak("'$caller' cannot alter the value of '$name' on ".51 Carp::croak("'$caller' cannot alter the value of '$name' on ". 36 52 "objects of class '$class'"); 37 53 } 38 if (ref $ method eq 'CODE') {39 $ method->($self, $name, 'ro', @_);40 } elsif ( $self->can($method)) {41 $self->$ method($name, 'ro', @_);54 if (ref $TRIGGER_METHOD) { 55 $TRIGGER_METHOD->($self, $name, 'ro', @_) if ref $TRIGGER_METHOD eq 'CODE' 56 } elsif (defined $TRIGGER_METHOD) { 57 $self->$TRIGGER_METHOD($name, 'ro', @_); 42 58 } 43 59 return $self->{$name}; … … 49 65 require Want; 50 66 51 my $method = $TRIGGER_METHOD;52 67 return sub :lvalue { 53 68 my $self = shift; … … 55 70 my $caller = caller; 56 71 require Carp; 57 Carp::croak("'$caller' cannot access the value of '$name' on ".72 Carp::croak("'$caller' cannot access the value of '$name' on ". 58 73 "objects of class '$class'"); 59 74 } 60 if (ref $ method eq 'CODE') {61 $ method->($self, $name, 'wo', @_);62 } elsif ( $self->can($method)) {63 $self->$ method($name, 'ro', @_);75 if (ref $TRIGGER_METHOD) { 76 $TRIGGER_METHOD->($self, $name, 'wo', @_) if ref $TRIGGER_METHOD eq 'CODE' 77 } elsif (defined $TRIGGER_METHOD) { 78 $self->$TRIGGER_METHOD($name, 'wo', @_); 64 79 } 65 80 $self->{$name}; -
lang/perl/Class-Accessor-Lvalue-Trigger/trunk/t/01_simple.t
r4414 r4716 2 2 use strict; 3 3 use warnings; 4 use base ' t::MyClassBase';5 __PACKAGE__->mk_accessors(qw/ a /);4 use base 'Class::Accessor::Lvalue::Trigger'; 5 __PACKAGE__->mk_accessors(qw/ a b c /); 6 6 7 7 package main; … … 14 14 isa_ok $obj, 'Class::Accessor::Lvalue::Trigger'; 15 15 16 $obj->c = 0; 17 16 18 $obj->a = 'foo'; 17 19 is $obj->a, 'foo'; 18 is $obj->{last}, 'a'; 19 is $obj->{arg0}, undef; 20 is $obj->c, 0; 20 21 21 $obj->a('baz') = 'bar'; 22 is $obj->{last}, 'a'; 23 is $obj->{arg0}, 'baz'; 24 is $obj->a, 'bar'; 25 is $obj->{arg0}, undef; 22 $obj->c++; 23 is $obj->a, 'foo'; 24 is $obj->c, 1; 25 26 $obj->b = 'bar'; 27 is $obj->a, 'foo'; 28 is $obj->b, 'bar'; 29 is $obj->c, 1; 30 31 $obj->c++; 32 is $obj->a, 'foo'; 33 is $obj->b, 'bar'; 34 is $obj->c, 2; 35 36 $obj->a = 'baz'; 37 is $obj->a, 'baz'; 38 is $obj->b, 'bar'; 39 is $obj->c, 2; 40 41 $obj->c++; 42 is $obj->a, 'baz'; 43 is $obj->b, 'bar'; 44 is $obj->c, 3;
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)