X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F000_recipes%2F022_attribute_trait.t;h=223fb65b29062e9f7edf9e56f79f917f351b658c;hb=d9a8643f96b5e0e86d29da44b0169c71f0373a91;hp=5986ca0c8e14db942e2cd99c0a1f0c0f935e005e;hpb=433b592840545b7c0e240181609b9e16bf3fcd17;p=gitmo%2FMoose.git diff --git a/t/000_recipes/022_attribute_trait.t b/t/000_recipes/022_attribute_trait.t index 5986ca0..223fb65 100644 --- a/t/000_recipes/022_attribute_trait.t +++ b/t/000_recipes/022_attribute_trait.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 2; +use Test::More tests => 3; use Test::Exception; BEGIN { @@ -76,5 +76,64 @@ is($app->dump, q{name: Google The site's URL: http://google.com }, '... got the expected dump value'); +# using the trait directly in a regular metaclass +{ + package MyApp::Meta::Attribute::Labeled; + use Moose; + extends 'Moose::Meta::Attribute'; + with 'MyApp::Meta::Attribute::Trait::Labeled'; + + package Moose::Meta::Attribute::Custom::Labeled; + sub register_implementation { 'MyApp::Meta::Attribute::Labeled' } + + package MyApp::Website2; + use Moose; + + has url => ( + metaclass => 'Labeled', + isa => 'Str', + is => 'rw', + label => "The site's URL", + ); + + has name => ( + is => 'rw', + isa => 'Str', + ); + + sub dump { + my $self = shift; + my $dump_value = ''; + + # iterate over all the attributes in $self + my %attributes = %{ $self->meta->get_attribute_map }; + foreach my $name (sort keys %attributes) { + + my $attribute = $attributes{$name}; + + # print the label if available + if ($attribute->isa('MyApp::Meta::Attribute::Labeled') + && $attribute->has_label) { + $dump_value .= $attribute->label; + } + # otherwise print the name + else { + $dump_value .= $name; + } + + # print the attribute's value + my $reader = $attribute->get_read_method; + $dump_value .= ": " . $self->$reader . "\n"; + } + + return $dump_value; + } + +} + +my $app2 = MyApp::Website2->new(url => "http://google.com", name => "Google"); +is($app2->dump, q{name: Google +The site's URL: http://google.com +}, '... got the expected dump value');