diff options
author | Jesse Luehrs <doy@tozt.net> | 2018-06-23 19:59:49 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2018-06-23 19:59:49 -0400 |
commit | 695895e26618cbfaa89183848cbeadd7ab9a0d5b (patch) | |
tree | d6ea2d037365c212b61581ff3734673f9e6a488f /lib/WWW/YNAB/ModelHelpers.pm | |
parent | 84b1fc5ec0a38eef8c82e7e403da2378b37095a6 (diff) | |
download | www-ynab-695895e26618cbfaa89183848cbeadd7ab9a0d5b.tar.gz www-ynab-695895e26618cbfaa89183848cbeadd7ab9a0d5b.zip |
initial implementation
Diffstat (limited to 'lib/WWW/YNAB/ModelHelpers.pm')
-rw-r--r-- | lib/WWW/YNAB/ModelHelpers.pm | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/WWW/YNAB/ModelHelpers.pm b/lib/WWW/YNAB/ModelHelpers.pm new file mode 100644 index 0000000..e61aa12 --- /dev/null +++ b/lib/WWW/YNAB/ModelHelpers.pm @@ -0,0 +1,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; |