summaryrefslogtreecommitdiff
path: root/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm
diff options
context:
space:
mode:
authorGianni Ceccarelli <dakkar@thenautilus.net>2011-11-09 17:55:00 +0000
committerGianni Ceccarelli <dakkar@thenautilus.net>2011-11-09 17:55:00 +0000
commit74e916bd19238540aced69a35659ba110bf190e8 (patch)
tree3b20ae1943c0582efb012523462e04a070aaccb7 /Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm
parentmake dzil happier (diff)
downloaddata-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.pm109
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;