summaryrefslogtreecommitdiffstats
path: root/lib/WWW/YNAB/ModelHelpers.pm
blob: e61aa12eabe0c2c2c24c13ddb2c223414d97a12c (plain) (blame)
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
package WWW::YNAB::ModelHelpers;
use Moose::Role;

sub model_from_data {
    my $self = shift;
    my ($class, $data, $server_knowledge) = @_;

    my @init_args = grep {
        $_ !~ /^_/
    } map {
        $_->init_arg
    } $class->meta->get_all_attributes;

    my %args = map {
        $_ => $data->{$_}
    } grep {
        exists $data->{$_}
    } @init_args;

    if (defined $server_knowledge) {
        $args{server_knowledge} = $server_knowledge;
    }

    $class->new(%args, _ua => $self->_ua);
}

no Moose::Role;

1;