X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=moose-class%2Fslides%2Findex.html;h=72e8bbedbfcb85a3b5b06ff61c5b9996dc1caa43;hb=88ba73cb2747fd9eb409a0ce9e22188d4ecec76b;hp=e1e33504393d994cac32ed05128268abcc81166c;hpb=6b24100035035acc3bb86df2c45a2463d09bf3cf;p=gitmo%2Fmoose-presentations.git diff --git a/moose-class/slides/index.html b/moose-class/slides/index.html index e1e3350..72e8bbe 100644 --- a/moose-class/slides/index.html +++ b/moose-class/slides/index.html @@ -52,7 +52,7 @@ img#me05 {top: 43px;left: 36px;}

Introduction to Moose

-

Dave Rolsky +

Dave Rolsky

@@ -71,7 +71,8 @@ img#me05 {top: 43px;left: 36px;}
@@ -154,7 +155,7 @@ img#me05 {top: 43px;left: 36px;}
package Person;
 use Moose;
 
-has first_name => ( is => 'rw' );
+has first_name => ( is => 'ro' ); @@ -892,8 +893,8 @@ use Moose;

BUILDARGS

@@ -967,6 +968,7 @@ sub BUILD { @@ -976,6 +978,7 @@ sub BUILD { @@ -1039,6 +1042,7 @@ extends 'LWP'; @@ -1050,13 +1054,13 @@ use Moose; extends 'Person'; -override work => sub { +override work => sub { my $self = shift; die "Pay me first" unless $self->got_paid; - super(); -}; + super(); +};
@@ -1065,7 +1069,7 @@ use Moose;
@@ -1107,8 +1111,7 @@ has first_name => ( is => 'ro' ); my $person = Person->new( first_name => 'Dave' ); -$person->first_name('Stevan'); -print $person->first_name; # Dave +$person->first_name('Stevan'); # dies @@ -1233,6 +1236,8 @@ use Moose; # perl install-moose (if needed) +## Read the instructions in t/01-classes.t + # perl bin/prove -lv t/01-classes.t # edit lib/Person.pm and lib/Employee.pm @@ -1304,23 +1309,25 @@ sub print {
package Person;
 use Moose;
 
-with 'HasPermissions';
+with 'Printable';

Classes Consume Roles

-
my $person = Person->new(
+
package Person;
+
+sub as_string { $_[0]->first_name() }
+
+...
+
+my $person = Person->new(
     first_name   => 'Kenichi',
     last_name    => 'Asai',
     access_level => 42,
 );
 
-print $person->full_name
-    . ' has '
-    . $person->can_access(42)
-        ? 'great power'
-        : 'little power';
+$person->print();
@@ -1337,7 +1344,9 @@ print $person->full_name
package Person;
 use Moose;
 
-with 'Printable';
+with 'Printable'; + +sub as_string { $_[0]->first_name() }
@@ -1348,6 +1357,8 @@ use Moose; with 'Printable'; +sub as_string { $_[0]->first_name() } + has has_been_printed => ( is => 'rw' ); sub print { @@ -1428,64 +1439,12 @@ use Moose;
-

Method Aliasing

- -
package FragileDancer;
-use Moose;
-
-with 'IsFragile' =>
-         { -alias =>
-               { break => 'break_bone' } },
-     'CanBreakdance' =>
-         { -alias =>
-               { break => 'break_it_down' } };
- - -
- -
-

Method Exclusion

- -
package FragileDancer;
-use Moose;
-
-with 'IsFragile' =>
-         { -alias =>
-               { break => 'break_bone' },
-           -excludes => 'break' },
-     'CanBreakdance' =>
-         { -alias =>
-               { break => 'break_it_down' },
-           -excludes => 'break' };
-
- -
-

And then ...

- -
package FragileDancer;
-use Moose;
-
-sub break {
-    my $self = shift;
-
-    $self->break_it_down;
-    if ( rand(1) < 0.5 ) {
-        $self->break_bone;
-    }
-}
-
- -
-

Still Full of Fail

+

Conflicts Are a Smell

@@ -1578,7 +1537,7 @@ use Moose; with 'HasSize'; -has size => ( is => 'ro' ); +has size => ( is => 'ro' );
@@ -1592,7 +1551,7 @@ requires 'size'; package Shirt; use Moose; -has size => ( is => 'ro' ); +has size => ( is => 'ro' ); with 'HasSize';
@@ -1614,9 +1573,9 @@ with 'HasSize';
package Comparison;
 use Moose;
 
-has [ 'left', 'right' ] => (
-    is   => 'ro',
-    does => 'Comparable',
+has [ 'left', 'right' ] => (
+    is   => 'ro',
+    does => 'Comparable',
 );
 
@@ -1705,8 +1664,6 @@ requires 'compare';

Real Examples

@@ -2456,60 +2390,6 @@ around run => sub {
-

Augment and Inner

- - -
- -
-

Augment and Inner

- -
package Document;
-
-sub xml { '<doc>' . inner() . '</doc>' }
-
-package Report;
-extends 'Document';
-augment xml =>
-    sub { title() . inner() . summary() };
-
-package TPSReport;
-extends 'Report';
-augment xml =>
-    sub { tps_xml() . inner() };
-
- -
-

Augment and Inner

- - -
- -
-

Augment and Inner Usage

- - -
- -

Method Modifiers Summary

-

Method Modifiers Summary

- - -
- -

Questions?

@@ -2635,15 +2501,12 @@ Item

Bool

True

-
1
-924.1
-'true'
-{}
+
1

False

0
-0.0
 '0'
+''
 undef
-

Questions?

-
- -

Exercises

# cd exercises
@@ -3594,12 +3458,20 @@ print Person->meta
 Iterate til this passes all its tests
-
-

Part 7: Introspection

+
+

CYOA

+ +

+ If there is time, keep going ... +

+ +

+ Otherwise, jump to slide 269 ... +

-

Part 8: A Brief Tour of MooseX

+

Bonus: A Brief Tour of MooseX

@@ -3607,7 +3479,7 @@ Iterate til this passes all its tests
@@ -3628,7 +3500,7 @@ Iterate til this passes all its tests

MooseX::Declare

use MooseX::Declare;
-use 5.10.0; # for say
+use 5.12.0; # for say
 
 class Person {
     has greeting =>
@@ -3647,7 +3519,7 @@ class Person {
     
  • Still experimental-ish, but seeing more and more use
  • Not a source filter!
  • Hooks into the Perl parser rather than filtering all your code
  • -
  • But not supported by PPI, perltidy, etc.
  • (yet?) +
  • But not supported by PPI, perltidy, etc. (yet?)
  • @@ -3793,12 +3665,21 @@ with HasCollection => { type => 'Int' };

    Questions?

    -
    -

    Part 9: Writing Moose Extensions

    -
    +
    +

    Moose-using Modules

    -
    -

    The End

    +

    + For further reading, a few modules which use Moose ... +

    + +
    @@ -3815,6 +3696,10 @@ with HasCollection => { type => 'Int' };
    +
    +

    The End

    +
    +