1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
# $Id$
package Recipe;
use strict;
use base qw( Data::ObjectDriver::BaseObject );
use DodTestUtil;
use Cache::Memory;
use Data::ObjectDriver::Driver::Cache::Cache;
use Data::ObjectDriver::Driver::DBI;
__PACKAGE__->install_properties({
columns => [ 'recipe_id', 'partition_id', 'title' ],
datasource => 'recipes',
primary_key => 'recipe_id',
driver => Data::ObjectDriver::Driver::Cache::Cache->new(
cache => Cache::Memory->new,
fallback => Data::ObjectDriver::Driver::DBI->new(
dsn => DodTestUtil::dsn('global'),
reuse_dbh => 1,
),
),
});
my %drivers;
__PACKAGE__->has_partitions(
number => 2,
get_driver => sub {
my $cluster = shift;
my $driver = $drivers{$cluster} ||=
Data::ObjectDriver::Driver::DBI->new(
dsn => DodTestUtil::dsn('cluster' . $cluster),
reuse_dbh => 1,
@_,
);
return $driver;
},
);
sub ingredients {
my $recipe = shift;
unless (exists $recipe->{__ingredients}) {
$recipe->{__ingredients} = [
Ingredient->search({ recipe_id => $recipe->recipe_id })
];
}
$recipe->{__ingredients};
}
sub deflate {
my $recipe = shift;
my $deflated = $recipe->SUPER::deflate;
$deflated->{ingredients} = [
map $_->deflate, @{ $recipe->ingredients }
];
$deflated;
}
sub inflate {
my $class = shift;
my($deflated) = @_;
my $recipe = $class->SUPER::inflate($deflated);
$recipe->{__ingredients} = [
map Ingredient->inflate($_), @{ $deflated->{ingredients} }
];
$recipe;
}
1;
|