diff options
author | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-09 17:55:00 +0000 |
---|---|---|
committer | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-09 17:55:00 +0000 |
commit | 74e916bd19238540aced69a35659ba110bf190e8 (patch) | |
tree | 3b20ae1943c0582efb012523462e04a070aaccb7 /Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm | |
parent | make dzil happier (diff) | |
download | data-multivalued-74e916bd19238540aced69a35659ba110bf190e8.tar.gz data-multivalued-74e916bd19238540aced69a35659ba110bf190e8.tar.bz2 data-multivalued-74e916bd19238540aced69a35659ba110bf190e8.zip |
moose traits for tags
Diffstat (limited to 'Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm')
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm new file mode 100644 index 0000000..e6fec67 --- /dev/null +++ b/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm @@ -0,0 +1,109 @@ +package Data::MultiValued::AttributeAccessors; +use strict; +use warnings; +use base 'Moose::Meta::Method::Accessor'; +use Carp 'confess'; + +sub _instance_is_inlinable { 0 } + +sub _generate_accessor_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + if (@_ >= 2) { + $attr->set_tagged_value($_[0], {}, $_[1]); + } + $attr->get_tagged_value($_[0], {}); + } +} + +sub _generate_reader_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + confess "Cannot assign a value to a read-only accessor" + if @_ > 1; + $attr->get_tagged_value($_[0], {}); + }; +} + +sub _generate_writer_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->set_tagged_value($_[0], {}, $_[1]); + }; +} + +sub _generate_predicate_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->has_tagged_value($_[0], {}) + }; +} + +sub _generate_clearer_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->clear_tagged_value($_[0], {}) + }; +} + +sub _generate_tagged_accessor_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + if (@_ >= 3) { + $attr->set_tagged_value($_[0], $_[1], $_[2]); + } + $attr->get_tagged_value($_[0],$_[1]); + } +} + +sub _generate_tagged_reader_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + confess "Cannot assign a value to a read-only accessor" + if @_ > 2; + $attr->get_tagged_value($_[0],$_[1]); + }; +} + +sub _generate_tagged_writer_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->set_tagged_value($_[0], $_[1], $_[2]); + }; +} + +sub _generate_tagged_predicate_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->has_tagged_value($_[0],$_[1]) + }; +} + +sub _generate_tagged_clearer_method { + my $self = shift; + my $attr = $self->associated_attribute; + + return sub { + $attr->clear_tagged_value($_[0],$_[1]) + }; +} + +1; |