our
$AUTHORITY
=
'cpan:GETTY'
;
$Digital::Driver::VERSION
=
'0.003'
;
sub
import
{
my
(
$class
,
@args
) =
@_
;
my
$driver_role
;
for
(
@args
) {
if
(
$_
=~ m/^-(.+)/) {
croak
$class
.
' already has a driver role'
if
$driver_role
;
$driver_role
=
'Digital::Role::'
.$1;
}
}
$driver_role
=
'Digital::Role'
unless
$driver_role
;
my
(
$caller
) =
caller
;
MooX->
import
::into(
$caller
);
$caller
->can(
'with'
)->(
$driver_role
);
$class
->install_helper(
$caller
);
Digital->register_input(
$caller
);
}
sub
install_helper {
my
(
$class
,
$target
) =
@_
;
my
$stash
= Package::Stash->new(
$target
);
$stash
->add_symbol(
'&to'
,
sub
{
my
(
$to
,
$coderef
,
$via
) =
@_
;
$target
->can(
'has'
)->(
$to
,
is
=>
'lazy'
,
init_arg
=>
undef
,
);
$stash
->add_symbol(
'&_build_'
.
$to
,
sub
{
my
(
$self
) =
@_
;
my
$value
=
defined
$via
?
$self
->
$via
:
$self
->in;
return
$coderef
->(
$self
,
$value
)
for
(
$value
);
});
});
$stash
->add_symbol(
'&overload_to'
,
sub
{
my
(
$to
,
@args
) =
@_
;
overload->
import
::into(
$target
,
'0+'
,
sub
{
shift
->
$to
},
fallback
=> 1,
);
return
$target
->can(
'to'
)->(
$to
,
@args
);
});
}
1;