Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Lazy attributes on DBIx::Class collums?

by chrestomanci (Priest)
on Oct 05, 2011 at 10:51 UTC ( #929755=perlquestion: print w/ replies, xml ) Need Help??
chrestomanci has asked for the wisdom of the Perl Monks concerning the following question:

Greetings wise brothers.

Comparing Moose and DBIx::Class, moose has a standard method for lazy attribute constructors. For example see: Moose::Cookbook::Recipe9.

Is there a standard way of doing lazy constructors in DBIx::Class?

Currently I am writing code like this: (For a read only attribute)

__PACKAGE__->add_columns( 'description' => { data_type=>'varchar', is_nullable=>1, accessor => '_description' }, ... # Other fields ); sub description { my $self = shift; unless( defined $self->_description() ) { ... # Code to calculate the correct value. $self->_description( $calculated_value ); } return $self->_description(); }

Is there a neater or more standard way of doing this? Something like an attribute passed to add_columns() to say that the field is lazy, so that a default named builder gets called when anything attempts to read it, and there is no need to explicitly declare the field as nullable (unless the builder is allowed to return undef), or name the builder, similar to Moose::Cookbook::Recipe9#The_lazy_build_shortcut.

Comment on Lazy attributes on DBIx::Class collums?
Download Code
Reaped: Re: Lazy attributes on DBIx::Class collums?
by NodeReaper (Curate) on Oct 09, 2011 at 12:35 UTC
Reaped: Re: Lazy attributes on DBIx::Class collums?
by NodeReaper (Curate) on Oct 10, 2011 at 12:46 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://929755]
Approved by Corion
Front-paged by keszler
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2015-02-01 08:55 GMT
Find Nodes?
    Voting Booth?

    My top resolution in 2015 is:

    Results (263 votes), past polls