X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=67fcb8e6b3fadea9b8573f8b39f92f7d58624414;hb=1847dd9ee8e1f995b293d12f2dc700b6f43092dc;hp=399d0af7fd1c394ebbdcf4d246b1ac00caf4b417;hpb=68af922fc6de3cf1ed39e68b0f8b36986cd6fe10;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index 399d0af..67fcb8e 100644 --- a/moose-class/slides/index.html +++ b/moose-class/slides/index.html @@ -40,7 +40,7 @@ img#me05 {top: 43px;left: 36px;} @@ -888,7 +891,6 @@ sub BUILDARGS { if ( @_ == 1 && ! ref $_[0] ) { return { ssn => $_[0] }; } - return $class->SUPER::BUILDARGS(@_); } @@ -940,7 +942,7 @@ sub BUILD {
-

The Object is Oqaque

+

The Object is Opaque

@@ -1127,6 +1132,7 @@ Person->can('extends'); @@ -1187,12 +1193,15 @@ use Moose;

Exercises

# cd exercises
-$ perl bin/prove -lv t/00-prereq.t
 
-Missing anything? Install it. (see tarballs/)
+# perl bin/prove -lv t/00-prereq.t
+
+# perl install-moose (if needed)
 
 # perl bin/prove -lv t/01-classes.t
 
+# edit lib/Person.pm and lib/Employee.pm
+
 Iterate til this passes all its tests
@@ -1210,11 +1219,10 @@ Iterate til this passes all its tests
-

Roles Can Have State and Behavior

+

Roles - State and Behavior

package HasPermissions;
 use Moose::Role;
-
 # state
 has access_level => ( is => 'rw' );
 
@@ -1223,7 +1231,8 @@ sub can_access {
     my $self     = shift;
     my $required = shift;
 
-    return $self->access_level >= $required;
+    return $self->access_level
+             >= $required;
 }
@@ -1267,8 +1276,8 @@ with 'HasPermissions';

Classes Consume Roles

my $person = Person->new(
-    first_name => 'Kenichi',
-    last_name => 'Asai',
+    first_name   => 'Kenichi',
+    last_name    => 'Asai',
     access_level => 42,
 );
 
@@ -1324,7 +1333,7 @@ sub print {
 
 # or ...
 
-if ( Person->meta->does('Printable') ) { ... }
+Person->meta->does('Printable') @@ -1390,10 +1399,10 @@ use Moose; use Moose; with 'IsFragile' => - { alias => + { -alias => { break => 'break_bone' } }, 'CanBreakdance' => - { alias => + { -alias => { break => 'break_it_down' } }; -

Using Types with Attributes

package Person;
 
-use Moose::Util::TypeConstraints;
-
 has height => (
     is  => 'rw',
     isa => 'Num',
@@ -2839,6 +2852,24 @@ has favorite_numbers => (
 
+

More Droppings

+ +
    +
  • Moose::Util::TypeConstraints also needs cleanup
  • +
+ +
package Person;
+
+use Moose;
+use Moose::Util::TypeConstraints;
+
+subtype ...;
+
+no Moose;
+no Moose::Util::TypeConstraints;
+
+ +

Typed Methods (Low-tech)

package Person;
@@ -2856,7 +2887,6 @@ sub work {
                 { isa     => 'Bool',
                   default => 0 },
         );
-
     ...
 }
@@ -2880,7 +2910,7 @@ sub work {

Digression: The Type Registry

@@ -2909,7 +2939,6 @@ sub work {

Namespace Fix

use Moose::Util::TypeConstraints;
-
 subtype 'MyApp::Type::DateTime',
     as 'DateTime';
 
@@ -3089,7 +3118,8 @@ $alice->friend($bob);
use Moose; has name => ( is => 'ro' ); -has friend => ( is => 'rw', weak_ref => 1 ); +has friend => ( is => 'rw', + weak_ref => 1 ); my $alice = Person->new( name => 'Alice' ); my $bob = Person->new( name => 'Bob' ); @@ -3208,7 +3238,6 @@ has lungs => (
package Person;
 use Moose;
-
 has account => (
     is      => 'ro',
     isa     => 'BankAccount',
@@ -3256,7 +3285,6 @@ has name => (
 
   
package Auditor;
 use Moose::Role;
-
 sub record_change  { ... }
 sub change_history { ... }
 
@@ -3284,6 +3312,52 @@ has history => (
 
 
 
+

Native Delegation

+ +
    +
  • Delegate to unblessed Perl types
  • +
  • Scalar, array or hash ref, etc
  • +
+
+ +
+

Native Delegation - Array

+ +
package Person;
+use Moose;
+has _favorite_numbers => (
+    traits   => [ 'Array' ],
+    is       => 'ro',
+    isa      => 'ArrayRef[Int]',
+    default  => sub { [] },
+    init_arg => undef,
+    handles  =>
+      { favorite_numbers    => 'elements',
+        add_favorite_number => 'push',
+      },
+);
+
+ +
+

Native Delegation - Counter

+ +
package Stack;
+use Moose;
+has depth => (
+    traits   => [ 'Counter' ],
+    is       => 'ro',
+    isa      => 'Int',
+    default  => 0,
+    init_arg => undef,
+    handles  =>
+      { _inc_depth => 'inc',
+        _dec_depth => 'dec',
+      },
+);
+
+ + +

Traits and Metaclasses

    @@ -3326,7 +3400,6 @@ has ssn => ( isa => 'Str', label => 'Social Security Number', ); - print Person->meta ->get_attribute('ssn')->label;
@@ -3345,7 +3418,6 @@ has ssn => ( isa => 'Str', label => 'Social Security Number', ); - print Person->meta ->get_attribute('ssn')->label;
@@ -3380,7 +3452,8 @@ print Person->meta

Exercises

# cd exercises
-# perl bin/prove -lv t/06-advanced-attributes.t
+# perl bin/prove -lv \
+      t/06-advanced-attributes.t
 
 Iterate til this passes all its tests