Catalyst

adventures in webdev with perl

YAML, YAML, YAML!

When you start a new Catalyst app you configure it directly with __PACKAGE__->config, thats ok for development but admins will hate you when they have to deploy this.

__PACKAGE__->config( name => 'MyApp', 'View::TT' => { EVAL_PERL => 1 } );

You didn't know you could configure your view from the application class, eh? :) Thats possible for every component that inherits from Catalyst::Component or it's subclasses (Catalyst::Base, Catalyst::Controller, Catalyst::View, Catalyst::Model).

__PACKAGE__->config(
    name => 'MyApp',
    'View::TT' => {
        EVAL_PERL => 1
    },
    'Controller::Foo' => {
        fool => 'sri'
    }
);


package MyApp::Controller::Foo;
use base 'Catalyst::Controller';

__PACKAGE__->config( lalala => " can't sing!" );

sub default : Private {
    my ( $self, $c ) = @_;
    $c->res->body( $self->{fool} . $self->{lalala} );
}

But back to the topic, lets make our admins happy with this little idiom.

use YAML ();

__PACKAGE__->config( YAML::LoadFile( __PACKAGE__->path_to('myapp.yml') ) );

The path_to() method is a nice little helper that returns paths relative to the current application home.

Thats it, now just create a file myapp.yml.

---
name: MyApp
View::TT:
  EVAL_PERL: 1
Controller::Foo:
  fool: sri

Have fun!

-- sri

cookbook : original article