hide-Kさんとこのこれ→ http://blog.hide-k.net/archives/2008/02/catalystmodelad_1.php を読んでCatalyst::Model::AdaptorをつかってTheSchwartzをいじろうとしたんだけど、
Model::TheSchwartz:
databases:
-
dsn: dbi:mysql:theschwartz
user: root
pass:
こういうyamlをConfig::Generalでは表現できなくて困った。
#!/usr/bin/perl
use strict;
use warnings;
use Config::General;
use Data::Dumper;
my $save = Config::General->new;
my $str = $save->save_string({
databases => [
{
dsn => 'dbi:mysql:theschwartz',
user => 'root',
pass => '',
},
]
});
warn $str;
my $load = Config::General->new(
-String => $str,
);
warn Dumper { $load->getall };
こうすると、出力は
[danjou@sylvia] $ perl config_general.pl
<databases>
pass
dsn dbi:mysql:theschwartz
user root
</databases>
$VAR1 = {
'databases' => {
'pass' => '',
'dsn' => 'dbi:mysql:theschwartz',
'user' => 'root'
}
};
こうなってしまい、myapp_server.plを立ち上げると
[danjou@sylvia] $ perl ./script/myapp_server.pl
Couldn't instantiate component "MyApp::Model::TheSchwartz", "databases must be an arrayref if specified at /Library/Perl/5.8.8/Catalyst/Model/Adaptor/Base.pm line 27" at ./script/myapp_server.pl line 55
Compilation failed in require at ./script/myapp_server.pl line 55.
と言われる。ので、prepare_argumentsで帳尻を合わせた。
sub prepare_arguments {
my ( $self, $app ) = @_;
my $args = $app->config->{"Model::TheSchwartz"};
if (ref $args->{databases} eq 'HASH') {
$args->{databases} = [ $args->{databases} ];
}
return $args;
}
こんな感じでいいんだろうか。とりあえず動いた。