diff options
author | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-10 11:33:52 +0000 |
---|---|---|
committer | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-10 11:33:52 +0000 |
commit | fbad620423ae33a33b12a0276b4da41bd40f59d7 (patch) | |
tree | d80454569a430efad469c8ec1d7805a325274cc3 /Data-MultiValued/lib | |
parent | "fast" hash/bless for serialization (diff) | |
download | data-multivalued-fbad620423ae33a33b12a0276b4da41bd40f59d7.tar.gz data-multivalued-fbad620423ae33a33b12a0276b4da41bd40f59d7.tar.bz2 data-multivalued-fbad620423ae33a33b12a0276b4da41bd40f59d7.zip |
refactoring the traits
Diffstat (limited to 'Data-MultiValued/lib')
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm | 34 | ||||
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm (renamed from Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tagged.pm) | 47 | ||||
-rw-r--r-- | Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm | 12 |
3 files changed, 51 insertions, 42 deletions
diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm index e6fec67..cac3538 100644 --- a/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm +++ b/Data-MultiValued/lib/Data/MultiValued/AttributeAccessors.pm @@ -12,9 +12,9 @@ sub _generate_accessor_method { return sub { if (@_ >= 2) { - $attr->set_tagged_value($_[0], {}, $_[1]); + $attr->set_multi_value($_[0], {}, $_[1]); } - $attr->get_tagged_value($_[0], {}); + $attr->get_multi_value($_[0], {}); } } @@ -25,7 +25,7 @@ sub _generate_reader_method { return sub { confess "Cannot assign a value to a read-only accessor" if @_ > 1; - $attr->get_tagged_value($_[0], {}); + $attr->get_multi_value($_[0], {}); }; } @@ -34,7 +34,7 @@ sub _generate_writer_method { my $attr = $self->associated_attribute; return sub { - $attr->set_tagged_value($_[0], {}, $_[1]); + $attr->set_multi_value($_[0], {}, $_[1]); }; } @@ -43,7 +43,7 @@ sub _generate_predicate_method { my $attr = $self->associated_attribute; return sub { - $attr->has_tagged_value($_[0], {}) + $attr->has_multi_value($_[0], {}) }; } @@ -52,57 +52,57 @@ sub _generate_clearer_method { my $attr = $self->associated_attribute; return sub { - $attr->clear_tagged_value($_[0], {}) + $attr->clear_multi_value($_[0], {}) }; } -sub _generate_tagged_accessor_method { +sub _generate_multi_accessor_method { my $self = shift; my $attr = $self->associated_attribute; return sub { if (@_ >= 3) { - $attr->set_tagged_value($_[0], $_[1], $_[2]); + $attr->set_multi_value($_[0], $_[1], $_[2]); } - $attr->get_tagged_value($_[0],$_[1]); + $attr->get_multi_value($_[0],$_[1]); } } -sub _generate_tagged_reader_method { +sub _generate_multi_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]); + $attr->get_multi_value($_[0],$_[1]); }; } -sub _generate_tagged_writer_method { +sub _generate_multi_writer_method { my $self = shift; my $attr = $self->associated_attribute; return sub { - $attr->set_tagged_value($_[0], $_[1], $_[2]); + $attr->set_multi_value($_[0], $_[1], $_[2]); }; } -sub _generate_tagged_predicate_method { +sub _generate_multi_predicate_method { my $self = shift; my $attr = $self->associated_attribute; return sub { - $attr->has_tagged_value($_[0],$_[1]) + $attr->has_multi_value($_[0],$_[1]) }; } -sub _generate_tagged_clearer_method { +sub _generate_multi_clearer_method { my $self = shift; my $attr = $self->associated_attribute; return sub { - $attr->clear_tagged_value($_[0],$_[1]) + $attr->clear_multi_value($_[0],$_[1]) }; } diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tagged.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm index 2a45506..263ce55 100644 --- a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tagged.pm +++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait.pm @@ -1,8 +1,7 @@ -package Data::MultiValued::AttributeTrait::Tagged; +package Data::MultiValued::AttributeTrait; use Moose::Role; -use Data::MultiValued::Tags; use Data::MultiValued::AttributeAccessors; -use MooseX::Types::Moose qw(Str HashRef); +use MooseX::Types::Moose qw(Str); use Try::Tiny; use namespace::autoclean; @@ -14,6 +13,8 @@ has 'full_storage_slot' => ( ); sub _build_full_storage_slot { shift->name . '__MULTIVALUED_STORAGE__' } +requires 'multivalue_storage_class'; + around slots => sub { my ($orig, $self) = @_; return ($self->$orig(), $self->full_storage_slot); @@ -22,7 +23,7 @@ around slots => sub { sub set_full_storage { my ($self,$instance) = @_; - my $ret = Data::MultiValued::Tags->new(); + my $ret = $self->multivalue_storage_class->new(); $self->associated_class->get_meta_instance->set_slot_value( $instance, $self->full_storage_slot, @@ -59,13 +60,13 @@ after install_accessors => sub { my $check = "has_$meth"; next unless $self->$check; - my $type = "tagged_$meth"; + my $type = "multi_$meth"; my $basename = $self->$meth; die 'MultiValued attribute trait is not compatible with subref accessors' if ref($basename); - my $name = "${basename}_tagged"; + my $name = "${basename}_multi"; $class->add_method( $self->_process_accessors($type => $name,0) @@ -73,7 +74,7 @@ after install_accessors => sub { } }; -sub load_tagged_value { +sub load_multi_value { my ($self,$instance,$opts) = @_; my $value;my $found=1; @@ -105,7 +106,7 @@ sub raw_clear_value { ); } -sub store_tagged_value { +sub store_multi_value { my ($self,$instance,$opts) = @_; my $value = $self->get_raw_value($instance); @@ -117,10 +118,10 @@ our $dyn_opts = {}; before get_value => sub { my ($self,$instance) = @_; - $self->load_tagged_value($instance,$dyn_opts); + $self->load_multi_value($instance,$dyn_opts); }; -sub get_tagged_value { +sub get_multi_value { my ($self,$instance,$opts,$value) = @_; local $dyn_opts = $opts; @@ -131,16 +132,16 @@ sub get_tagged_value { after set_initial_value => sub { my ($self,$instance,$value) = @_; - $self->store_tagged_value($instance,$dyn_opts); + $self->store_multi_value($instance,$dyn_opts); }; after set_value => sub { my ($self,$instance,$value) = @_; - $self->store_tagged_value($instance,$dyn_opts); + $self->store_multi_value($instance,$dyn_opts); }; -sub set_tagged_value { +sub set_multi_value { my ($self,$instance,$opts,$value) = @_; local $dyn_opts = $opts; @@ -151,10 +152,10 @@ sub set_tagged_value { before has_value => sub { my ($self,$instance) = @_; - $self->load_tagged_value($instance,$dyn_opts); + $self->load_multi_value($instance,$dyn_opts); }; -sub has_tagged_value { +sub has_multi_value { my ($self,$instance,$opts) = @_; local $dyn_opts = $opts; @@ -169,7 +170,7 @@ after clear_value => sub { $self->full_storage($instance)->clear($dyn_opts); }; -sub clear_tagged_value { +sub clear_multi_value { my ($self,$instance,$opts) = @_; local $dyn_opts = $opts; @@ -177,14 +178,14 @@ sub clear_tagged_value { return $self->clear_value($instance); } -sub get_tagged_read_method { +sub get_multi_read_method { my $self = shift; - return $self->get_read_method . '_tagged'; + return $self->get_read_method . '_multi'; } -sub get_tagged_write_method { +sub get_multi_write_method { my $self = shift; - return $self->get_write_method . '_tagged'; + return $self->get_write_method . '_multi'; } sub _rebless_slot { @@ -193,7 +194,7 @@ sub _rebless_slot { my $st = $self->get_full_storage($instance); return unless $st; - bless $st, 'Data::MultiValued::Tags'; + bless $st, $self->multivalue_storage_class; $st->_rebless_storage; } @@ -206,8 +207,4 @@ sub _as_hash { return $st->_as_hash; } -package Moose::Meta::Attribute::Custom::Trait::MultiValued::Tagged;{ -sub register_implementation { 'Data::MultiValued::AttributeTrait::Tagged' } -} - 1; diff --git a/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm new file mode 100644 index 0000000..fff5776 --- /dev/null +++ b/Data-MultiValued/lib/Data/MultiValued/AttributeTrait/Tags.pm @@ -0,0 +1,12 @@ +package Data::MultiValued::AttributeTrait::Tags; +use Moose::Role; +use Data::MultiValued::Tags; +with 'Data::MultiValued::AttributeTrait'; + +sub multivalue_storage_class { 'Data::MultiValued::Tags' }; + +package Moose::Meta::Attribute::Custom::Trait::MultiValued::Tags;{ +sub register_implementation { 'Data::MultiValued::AttributeTrait::Tags' } +} + +1; |