2013-06-17 12:34:21 -04:00
|
|
|
use utf8;
|
|
|
|
package Hydra::Component::ToJSON;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use base 'DBIx::Class';
|
|
|
|
|
|
|
|
sub TO_JSON {
|
|
|
|
my $self = shift;
|
2013-10-16 16:48:03 -04:00
|
|
|
|
2013-10-24 16:17:29 -04:00
|
|
|
my $hint = $self->json_hint;
|
2013-10-16 16:48:03 -04:00
|
|
|
|
2013-10-24 16:17:29 -04:00
|
|
|
my %json = ();
|
2013-10-16 16:48:03 -04:00
|
|
|
|
2013-10-24 16:17:29 -04:00
|
|
|
foreach my $column (@{$hint->{columns}}) {
|
|
|
|
$json{$column} = $self->get_column($column);
|
|
|
|
}
|
2013-10-16 16:48:03 -04:00
|
|
|
|
2013-10-24 16:17:29 -04:00
|
|
|
foreach my $relname (keys %{$hint->{relations}}) {
|
|
|
|
my $key = $hint->{relations}->{$relname};
|
|
|
|
$json{$relname} = [ map { $_->$key } $self->$relname ];
|
|
|
|
}
|
2013-10-24 13:18:36 -04:00
|
|
|
|
2013-10-24 16:17:29 -04:00
|
|
|
foreach my $relname (keys %{$hint->{eager_relations}}) {
|
|
|
|
my $key = $hint->{eager_relations}->{$relname};
|
|
|
|
$json{$relname} = { map { $_->$key => $_ } $self->$relname };
|
2013-06-17 12:34:21 -04:00
|
|
|
}
|
2013-10-24 16:17:29 -04:00
|
|
|
|
|
|
|
return \%json;
|
2013-06-17 12:34:21 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
1;
|