[Catalyst-commits] r12283 - in trunk/examples/CatalystAdvent/root/2009: . pen

zamolxes at dev.catalyst.perl.org zamolxes at dev.catalyst.perl.org
Wed Dec 9 22:34:55 GMT 2009


Author: zamolxes
Date: 2009-12-09 22:34:54 +0000 (Wed, 09 Dec 2009)
New Revision: 12283

Added:
   trunk/examples/CatalystAdvent/root/2009/10.pod
Removed:
   trunk/examples/CatalystAdvent/root/2009/pen/component_traits.pod
Log:
day 10 


Copied: trunk/examples/CatalystAdvent/root/2009/10.pod (from rev 12282, trunk/examples/CatalystAdvent/root/2009/pen/component_traits.pod)
===================================================================
--- trunk/examples/CatalystAdvent/root/2009/10.pod	                        (rev 0)
+++ trunk/examples/CatalystAdvent/root/2009/10.pod	2009-12-09 22:34:54 UTC (rev 12283)
@@ -0,0 +1,176 @@
+=head1 Loadable Traits for Catalyst Components
+
+Over the past few months we've developed a loadable traits system for
+L<Catalyst> components. Components are Models, Views, and Controllers.
+
+Traits are L<Moose::Role>s, that are applied to classes dynamically.
+
+Roles for Controllers, with actual actions, are possible thanks to Tomas
+Doran's (t0m) and Florian Ragwitz's (rafl) work on L<MooseX::MethodAttributes>.
+
+Loadable traits support is provided by L<CatalystX::Component::Traits>, based
+on Jonathan Rockway's (jrockway) work on L<MooseX::Traits>.
+
+=head2 An Example
+
+Let's make a simple Model and some traits for it, so you can see how you might
+make use of this feature in your own projects.
+
+    package SampleApp::Model::Fortune;
+
+    use Moose;
+    use namespace::autoclean;
+    extends 'Catalyst::Model';
+    with 'CatalystX::Component::Traits';
+
+    has '+_trait_merge' => (default => 1);
+
+    __PACKAGE__->config->{traits} = [ 'OffensiveToo' ];
+
+    has fortune_command      => (is => 'rw', lazy_build => 1);
+    has fortune_command_opts => (is => 'rw', lazy_build => 1);
+
+    sub get_fortune {
+        my $self = shift;
+
+        my $command =
+            $self->fortune_command . ' ' . $self->fortune_command_opts;
+
+        my $output = qx{$command};
+        chomp $output;
+
+        return $output;
+    }
+
+    sub _build_fortune_command { 'fortune' }
+    sub _build_fortune_command_opts { '' }
+
+    __PACKAGE__->meta->make_immutable;
+
+    package SampleApp::TraitFor::Model::Fortune::Russian;
+
+    use Moose::Role;
+    use namespace::autoclean;
+
+    has percent_russian => (is => 'rw', default => 100);
+
+    around fortune_command_opts => sub {
+        my ($next, $self) = (shift, shift);
+
+        my $dbs =
+            $self->percent_russian . '% ru'
+            . ' ' .
+            (100 - $self->percent_russian) . '% /usr/share/games/fortunes';
+
+        return $self->$next(@_) . ' ' . $dbs;
+    };
+
+    package SampleApp::TraitFor::Model::Fortune::Offensive;
+
+    use Moose::Role;
+    use namespace::autoclean;
+
+    around fortune_command_opts => sub {
+        my ($next, $self) = (shift, shift);
+
+        return '-o ' . $self->$next(@_);
+    };
+
+    package SampleApp::TraitFor::Model::Fortune::OffensiveToo;
+
+    use Moose::Role;
+    use namespace::autoclean;
+
+    around fortune_command_opts => sub {
+        my ($next, $self) = (shift, shift);
+
+        my $opts = $self->$next(@_);
+        $opts =~ s/-o //; # if Offensive trait is enabled, edit it out
+
+        return "-a $opts";
+    };
+
+    1;
+
+Notice we turned on the L<CatalystX::Component::Traits/"TRAIT MERGING">
+feature, and we set a default list of traits to include (C<OffensiveToo>.)
+
+An action to make use of our new Model:
+
+    sub index :Path :Args(0) {
+        my ($self, $c) = @_; 
+
+        $c->res->content_type('text/plain; charset=utf-8');
+        $c->res->body($c->model('Fortune')->get_fortune);
+    }
+
+Now, suppose in production you don't want your customers to see offensive
+fortunes, and you want 50% of the fortunes to be in Russian.
+
+Just put the following into the C<.conf>:
+
+    <Model::Fortune>
+        traits -OffensiveToo
+        traits Russian
+        percent_russian 50
+    </Model::Fortune>
+
+We turned off the C<OffensiveToo> trait, added the C<Russian> trait and set an
+attribute that was defined in a trait directly from the config file.
+
+Hopefully this demonstrates some of the power of using L<Moose::Role>s
+in your L<Catalyst> applications.
+
+See also the C<Catalyst::ActionRole::> namespace for other awesome applications
+of L<Moose::Role>s.
+
+=head2 Components that use Loadable Traits
+
+=head3 L<Catalyst::Model::DBIC::Schema>
+
+The model for using L<DBIx::Class> in L<Catalyst> has the following traits
+available on CPAN:
+
+=over 4
+
+=item L<Catalyst::TraitFor::Model::DBIC::Schema::Caching>
+
+For caching the results of queries.
+
+=item L<Catalyst::TraitFor::Model::DBIC::Schema::Replicated>
+
+For quering replicated MySQL databases.
+
+=item L<Catalyst::TraitFor::Model::DBIC::Schema::QueryLog>
+
+L<DBIx::Class::QueryLog> support, for analyzing query performance.
+
+=back
+
+=head3 L<CatalystX::SimpleLogin>
+
+A reusable login/logout component for L<Catalyst> that is injected through the
+Plugin list. It has the following traits available on CPAN:
+
+=over 4
+
+=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::Logout>
+
+Adds logout support.
+
+=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::WithRedirect>
+
+Combines with L<Catalyst::ActionRole::NeedsLogin> to mark actions as requiring
+a login and redirecting back to the originally requested page.
+
+=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::RenderAsTTTemplate>
+
+Provides a L<Template> template for rendering the login form, for use with
+L<Catalyst::View::TT>.
+
+=back
+
+=head1 AUTHOR
+
+Caelum: Rafael Kitover <rkitover at cpan.org>
+

Deleted: trunk/examples/CatalystAdvent/root/2009/pen/component_traits.pod
===================================================================
--- trunk/examples/CatalystAdvent/root/2009/pen/component_traits.pod	2009-12-09 21:38:54 UTC (rev 12282)
+++ trunk/examples/CatalystAdvent/root/2009/pen/component_traits.pod	2009-12-09 22:34:54 UTC (rev 12283)
@@ -1,176 +0,0 @@
-=head1 Loadable Traits for Catalyst Components
-
-Over the past few months we've developed a loadable traits system for
-L<Catalyst> components. Components are Models, Views, and Controllers.
-
-Traits are L<Moose::Role>s, that are applied to classes dynamically.
-
-Roles for Controllers, with actual actions, are possible thanks to Tomas
-Doran's (t0m) and Florian Ragwitz's (rafl) work on L<MooseX::MethodAttributes>.
-
-Loadable traits support is provided by L<CatalystX::Component::Traits>, based
-on Jonathan Rockway's (jrockway) work on L<MooseX::Traits>.
-
-=head2 An Example
-
-Let's make a simple Model and some traits for it, so you can see how you might
-make use of this feature in your own projects.
-
-    package SampleApp::Model::Fortune;
-
-    use Moose;
-    use namespace::autoclean;
-    extends 'Catalyst::Model';
-    with 'CatalystX::Component::Traits';
-
-    has '+_trait_merge' => (default => 1);
-
-    __PACKAGE__->config->{traits} = [ 'OffensiveToo' ];
-
-    has fortune_command      => (is => 'rw', lazy_build => 1);
-    has fortune_command_opts => (is => 'rw', lazy_build => 1);
-
-    sub get_fortune {
-        my $self = shift;
-
-        my $command =
-            $self->fortune_command . ' ' . $self->fortune_command_opts;
-
-        my $output = qx{$command};
-        chomp $output;
-
-        return $output;
-    }
-
-    sub _build_fortune_command { 'fortune' }
-    sub _build_fortune_command_opts { '' }
-
-    __PACKAGE__->meta->make_immutable;
-
-    package SampleApp::TraitFor::Model::Fortune::Russian;
-
-    use Moose::Role;
-    use namespace::autoclean;
-
-    has percent_russian => (is => 'rw', default => 100);
-
-    around fortune_command_opts => sub {
-        my ($next, $self) = (shift, shift);
-
-        my $dbs =
-            $self->percent_russian . '% ru'
-            . ' ' .
-            (100 - $self->percent_russian) . '% /usr/share/games/fortunes';
-
-        return $self->$next(@_) . ' ' . $dbs;
-    };
-
-    package SampleApp::TraitFor::Model::Fortune::Offensive;
-
-    use Moose::Role;
-    use namespace::autoclean;
-
-    around fortune_command_opts => sub {
-        my ($next, $self) = (shift, shift);
-
-        return '-o ' . $self->$next(@_);
-    };
-
-    package SampleApp::TraitFor::Model::Fortune::OffensiveToo;
-
-    use Moose::Role;
-    use namespace::autoclean;
-
-    around fortune_command_opts => sub {
-        my ($next, $self) = (shift, shift);
-
-        my $opts = $self->$next(@_);
-        $opts =~ s/-o //; # if Offensive trait is enabled, edit it out
-
-        return "-a $opts";
-    };
-
-    1;
-
-Notice we turned on the L<CatalystX::Component::Traits/"TRAIT MERGING">
-feature, and we set a default list of traits to include (C<OffensiveToo>.)
-
-An action to make use of our new Model:
-
-    sub index :Path :Args(0) {
-        my ($self, $c) = @_; 
-
-        $c->res->content_type('text/plain; charset=utf-8');
-        $c->res->body($c->model('Fortune')->get_fortune);
-    }
-
-Now, suppose in production you don't want your customers to see offensive
-fortunes, and you want 50% of the fortunes to be in Russian.
-
-Just put the following into the C<.conf>:
-
-    <Model::Fortune>
-        traits -OffensiveToo
-        traits Russian
-        percent_russian 50
-    </Model::Fortune>
-
-We turned off the C<OffensiveToo> trait, added the C<Russian> trait and set an
-attribute that was defined in a trait directly from the config file.
-
-Hopefully this demonstrates some of the power of using L<Moose::Role>s
-in your L<Catalyst> applications.
-
-See also the C<Catalyst::ActionRole::> namespace for other awesome applications
-of L<Moose::Role>s.
-
-=head2 Components that use Loadable Traits
-
-=head3 L<Catalyst::Model::DBIC::Schema>
-
-The model for using L<DBIx::Class> in L<Catalyst> has the following traits
-available on CPAN:
-
-=over 4
-
-=item L<Catalyst::TraitFor::Model::DBIC::Schema::Caching>
-
-For caching the results of queries.
-
-=item L<Catalyst::TraitFor::Model::DBIC::Schema::Replicated>
-
-For quering replicated MySQL databases.
-
-=item L<Catalyst::TraitFor::Model::DBIC::Schema::QueryLog>
-
-L<DBIx::Class::QueryLog> support, for analyzing query performance.
-
-=back
-
-=head3 L<CatalystX::SimpleLogin>
-
-A reusable login/logout component for L<Catalyst> that is injected through the
-Plugin list. It has the following traits available on CPAN:
-
-=over 4
-
-=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::Logout>
-
-Adds logout support.
-
-=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::WithRedirect>
-
-Combines with L<Catalyst::ActionRole::NeedsLogin> to mark actions as requiring
-a login and redirecting back to the originally requested page.
-
-=item L<CatalystX::SimpleLogin::TraitFor::Controller::Login::RenderAsTTTemplate>
-
-Provides a L<Template> template for rendering the login form, for use with
-L<Catalyst::View::TT>.
-
-=back
-
-=head1 AUTHOR
-
-Caelum: Rafael Kitover <rkitover at cpan.org>
-




More information about the Catalyst-commits mailing list