Web-MREST
view release on metacpan or search on metacpan
lib/Web/MREST/Resource.pm view on Meta::CPAN
my $declared_status;
if ( @ARGS and ref( $ARGS[0] ) eq 'App::CELL::Status' ) {
#
# App::CELL::Status object was given; bend it to our needs
#
$declared_status = $ARGS[0];
# make sure there is a payload and it is a hashref
if ( ! $declared_status->payload ) {
$declared_status->payload( {} );
}
# if 'http_code' property given, move it to the payload
if ( my $hc = delete( $declared_status->{'http_code'} ) ) {
$log->debug( "mrest_declare_status: HTTP code is $hc" );
$declared_status->payload->{'http_code'} = $hc;
}
# handle 'permanent' property
if ( my $pt = delete( $declared_status->{'permanent'} ) ) {
$declared_status->payload->{'permanent'} = $pt ? JSON::true : JSON::false;
} else {
$declared_status->payload->{'permanent'} = JSON::true;
}
} else {
#
# PARAMHASH was given
#
my %ARGS = validate( @ARGS, {
'level' => { type => SCALAR, default => 'ERR' },
'code' => { type => SCALAR|UNDEF, default => undef },
'explanation' => { type => SCALAR, default => '<NONE>' },
'permanent' => { type => SCALAR, default => 1 },
'args' => { type => ARRAYREF, optional => 1 },
} );
$ARGS{'args'} = [] unless $ARGS{'args'};
$declared_status = App::CELL::Status->new(
level => $ARGS{'level'},
code => $ARGS{'explanation'},
args => $ARGS{'args'},
payload => {
http_code => $ARGS{'code'}, # might be undef
permanent => ( $ARGS{'permanent'} )
? JSON::true
: JSON::false,
},
);
}
# add standard properties to the payload
$declared_status->payload->{'uri_path'} = $self->context->{'uri_path'};
$declared_status->payload->{'resource_name'} = $self->context->{'resource_name'};
$declared_status->payload->{'http_method'} = $self->context->{'method'};
$declared_status->payload->{'found_in'} = {
package => (caller)[0],
file => (caller)[1],
line => (caller)[2]+0,
};
# the object is "done": push it onto the context
$self->push_onto_context( {
'declared_status' => $declared_status,
} );
}
=head3 mrest_declared_status_code
Accessor method, gets just the HTTP status code (might be undef);
and allows setting the HTTP status code, as well, by providing an argument.
=cut
sub mrest_declared_status_code {
my ( $self, $arg ) = @_;
return unless ref( $self->context->{'declared_status'} ) eq 'App::CELL::Status';
my $dsc = $self->context->{'declared_status'}->payload->{'http_code'};
if ( $arg ) {
$log->warn( "Overriding previous declared status code ->" .
( $dsc || 'undefined' ) .
"<- with new value -> " .
( $arg || 'undefined' ) .
"<->" );
$self->context->{'declared_status'}->payload->{'http_code'} = $arg;
$dsc = $arg;
}
return $dsc;
}
=head3 mrest_declared_status_explanation
Accessor method, gets just the explanation (might be undef).
Does not allow changing the explanation - for this, nullify the
declared status and declare a new one.
=cut
sub mrest_declared_status_explanation {
my ( $self, $arg ) = @_;
return unless ref( $self->context->{'declared_status'} ) eq 'App::CELL::Status';
return $self->context->{'declared_status'}->text;
}
=head2 status_declared
Boolean method - checks context for presence of 'declared_status' property. If
it is present, the value of that property is returned, just as if we had done
C<< $self->context->{'declared_status'} >>. Otherwise, undef (false) is returned.
=cut
sub status_declared {
( run in 0.513 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )