NAME
MooX::Role::Reconstruct - Reconstruct Moo Objects
SYNOPSIS
# in a module
package MyModule;
use Moo;
with qw( MooX::Role::Reconstruct );
has row_id => (
is => 'ro',
init_arg => undef,
);
has foo => (
is => 'rw',
);
1;
# and in a script
my $row_ref = $sth->fetchrow_hashref();
# create a new object bypassing any init_arg restrictions
my $obj = MyModule->reconstruct( $row_ref );
DESCRIPTION
It is often desirable to create an object from a database row or a decoded JSON object. However, it is quite likely that you might have declared some attributes with init_arg => undef so simply calling class->new( %hash ) will fail.
This module makes it possible by providing a constructor that will ignore all init_arg directives. This behavior can be disabled on a case-by-case basis by specifying keep_init => 1 in the has structure for a given attribute as shown below:
has foo => (
is => 'ro',
default => 'bar',
init_arg => 'baz',
keep_init => 1,
);
In this case, the noraml behavior of taking the initializer value from baz if it is present will be retained.
BUILDARGS and BUILD will be called as they would be if class->new had been used, as will any coerce and/or isa specifiers. (This presumes that one has written sensible coerce and isa conditions.)
METHODS
reconstruct
The module installs a method named reconstruct by default.
Note: Any naming conflicts will show up as a Subroutine redefined error.
ERROR CONDITIONS
This Role requires that Moo be loaded prior to use. The module will die otherwise.
SUPPORT
Please report any bugs or feature requests through the issue tracker at https://github.com/boftx/MooX-Role-Reconstruct/issues. You will be notified automatically of any progress on your issue.
GitHub: https://github.com/boftx/MooX-Role-Reconstruct
DEPENDENCIES
Sub::Quote, Sub::Defer, Role::Tiny
SEE ALSO
This module is based on ideas in MooseX::UnsafeConstructable.
AUTHOR
Jim Bacon <jim@nortx.com>
COPYRIGHT AND LICENSE
Copyright (C) 2014, Jim Bacon
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.16 or, at your option, any later version of Perl 5 you may have available.