Catalyst-Plugin-Authentication-Basic-Remote
view release on metacpan or search on metacpan
inc/Spiffy.pm view on Meta::CPAN
179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
sub_start
=>
"sub {\n"
,
set_default
=>
" \$_[0]->{%s} = %s\n unless exists \$_[0]->{%s};\n"
,
init
=>
" return \$_[0]->{%s} = do { my \$self = \$_[0]; %s }\n"
.
" unless \$#_ > 0 or defined \$_[0]->{%s};\n"
,
weak_init
=>
" return do {\n"
.
" \$_[0]->{%s} = do { my \$self = \$_[0]; %s };\n"
.
" Scalar::Util::weaken(\$_[0]->{%s}) if ref \$_[0]->{%s};\n"
.
" \$_[0]->{%s};\n"
.
" } unless \$#_ > 0 or defined \$_[0]->{%s};\n"
,
return_if_get
=>
" return \$_[0]->{%s} unless \$#_ > 0;\n"
,
set
=>
" \$_[0]->{%s} = \$_[1];\n"
,
weaken
=>
" Scalar::Util::weaken(\$_[0]->{%s}) if ref \$_[0]->{%s};\n"
,
sub_end
=>
" return \$_[0]->{%s};\n}\n"
,
);
sub
field {
my
$package
=
caller
;
my
(
$args
,
@values
) =
do
{
no
warnings;
local
*boolean_arguments
=
sub
{ (
qw(-weak)
) };
local
*paired_arguments
=
sub
{ (
qw(-package -init)
) };
Spiffy->parse_arguments(
@_
);
};
my
(
$field
,
$default
) =
@values
;
$package
=
$args
->{-
package
}
if
defined
$args
->{-
package
};
die
"Cannot have a default for a weakened field ($field)"
if
defined
$default
&&
$args
->{-weak};
return
if
defined
&{
"${package}::$field"
};
my
$default_string
=
(
ref
(
$default
) eq
'ARRAY'
and not
@$default
)
?
'[]'
: (
ref
(
$default
) eq
'HASH'
and not
keys
%$default
)
?
'{}'
: default_as_code(
$default
);
my
$code
=
$code
{sub_start};
if
(
$args
->{-init}) {
my
$fragment
=
$args
->{-weak} ?
$code
{weak_init} :
$code
{init};
$code
.=
sprintf
$fragment
,
$field
,
$args
->{-init}, (
$field
) x 4;
}
$code
.=
sprintf
$code
{set_default},
$field
,
$default_string
,
$field
if
defined
$default
;
$code
.=
sprintf
$code
{return_if_get},
$field
;
$code
.=
sprintf
$code
{set},
$field
;
$code
.=
sprintf
$code
{weaken},
$field
,
$field
if
$args
->{-weak};
$code
.=
sprintf
$code
{sub_end},
$field
;
my
$sub
=
eval
$code
;
die
$@
if
$@;
no
strict
'refs'
;
*{
"${package}::$field"
} =
$sub
;
return
$code
if
defined
wantarray
;
}
( run in 0.238 second using v1.01-cache-2.11-cpan-95122f20152 )