Basic test for recipe 22
Shawn M Moore [Sat, 24 May 2008 19:13:11 +0000 (19:13 +0000)]
MANIFEST
t/000_recipes/022_recipe.t [new file with mode: 0644]

index 9054e9c..008a175 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -78,6 +78,7 @@ t/000_recipes/005_recipe.t
 t/000_recipes/006_recipe.t
 t/000_recipes/007_recipe.t
 t/000_recipes/011_recipe.t
+t/000_recipes/022_recipe.t
 t/010_basics/001_basic_class_setup.t
 t/010_basics/002_require_superclasses.t
 t/010_basics/003_super_and_override.t
diff --git a/t/000_recipes/022_recipe.t b/t/000_recipes/022_recipe.t
new file mode 100644 (file)
index 0000000..5986ca0
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+use Test::Exception;
+
+BEGIN {
+    use_ok('Moose');           
+}
+
+## attribute trait example
+{
+
+    package MyApp::Meta::Attribute::Trait::Labeled;
+    use Moose::Role;
+
+    has label => (
+        is        => 'rw',
+        isa       => 'Str',
+        predicate => 'has_label',
+    );
+
+    package Moose::Meta::Attribute::Custom::Trait::Labeled;
+    sub register_implementation { 'MyApp::Meta::Attribute::Trait::Labeled' }
+
+    package MyApp::Website;
+    use Moose;
+
+    has url => (
+        traits => [qw/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->does('MyApp::Meta::Attribute::Trait::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 $app = MyApp::Website->new(url => "http://google.com", name => "Google");
+is($app->dump, q{name: Google
+The site's URL: http://google.com
+}, '... got the expected dump value');
+
+
+