=head1 Data::Downloader::DB::Object
Base class for Data::Downloader objects.
Inherits from Rose::DB::Object
=head1 METHODS
=over
=cut
package Data::Downloader::DB::Object;
use base qw/Rose::DB::Object/;
use Log::Log4perl qw/:easy/;
use YAML::XS qw/Dump/;
=item init_db
Gets the database handle.
=cut
sub init_db { Data::Downloader::DB->new_or_cached("main") }
=item as_hash
Dump it as a hash of column name -> value pairs
Arguments: skip_re : a regex of column names to skip
=cut
sub as_hash {
my $self = shift;
my %args = @_;
my $skip_re = $args{skip_re};
return {
map {
my $accessor = $_->accessor_method_name;
my $value = scalar($self->$accessor);
$value = $value->iso8601 if ref $value eq 'DateTime';
$skip_re && $accessor =~ /$skip_re/ ? () : (scalar($_) => $value)
} $self->meta->columns
}
};
=item dump
Dump a bunch of info about this object.
The info is printed as YAML to STDOUT.
Arguments: skip_re : a regex of column names to skip
=cut
sub dump {
my $self = shift;
my %args = @_;
my $skip_re = $args{skip_re};
my $h = $self->as_hash(@_);
for my $r ($self->meta->relationships) {
next unless $r->type eq 'one to many';
# TODO other types too, but avoid infinite recursion
my $method = $r->name;
next if $skip_re && $method =~ qr/$skip_re/;
$h->{$r->name} = [ map $_->as_hash(@_), @{ $self->$method } ];
}
print Dump($h);
}
=back
=head1 SEE ALSO
L<Rose::DB::Object>
=cut
1;