X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FException.pm;h=6956f0e15b9ff77ba6c8a47598a06e470a9a2cfb;hb=44b74e6a6e88f3a3e2d320100edf4b84980b7c60;hp=fc43cd843ba6e0070a2fba4937b5960833cc6ee2;hpb=b5ecfcf07b8ffe7e9984f0279c8781ce51c6ac6a;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Exception.pm b/lib/Catalyst/Exception.pm index fc43cd8..6956f0e 100644 --- a/lib/Catalyst/Exception.pm +++ b/lib/Catalyst/Exception.pm @@ -1,17 +1,12 @@ package Catalyst::Exception; -use strict; -use vars qw[@ISA $CATALYST_EXCEPTION_CLASS]; -use UNIVERSAL::require; - -BEGIN { - push( @ISA, $CATALYST_EXCEPTION_CLASS || 'Catalyst::Exception::Base' ); -} +# XXX: See bottom of file for Exception implementation package Catalyst::Exception::Base; -use strict; -use Carp (); +use Moose; +use Carp; +use namespace::clean -except => 'meta'; =head1 NAME @@ -39,27 +34,65 @@ Throws a fatal exception. =cut +has message => ( + is => 'ro', + isa => 'Str', +); + +use overload + q{""} => \&as_string, + fallback => 1; + +sub as_string { + my ($self) = @_; + return $self->message; +} + sub throw { my $class = shift; my %params = @_ == 1 ? ( error => $_[0] ) : @_; - my $message = $params{message} || $params{error} || $! || ''; + $params{message} = $params{message} || $params{error} || $! || ''; + my $error = $class->new(%params); local $Carp::CarpLevel = 1; - Carp::croak($message); + croak $error; } -=head1 AUTHOR +sub rethrow { + my ($self) = @_; + croak $self; +} + +=head2 meta + +Provided by Moose -Sebastian Riedel, C -Christian Hansen, C +=head1 AUTHORS + +Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT -This program is free software, you can redistribute it and/or modify +This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut +Catalyst::Exception::Base->meta->make_immutable; + +package Catalyst::Exception; + +use Moose; +use namespace::clean -except => 'meta'; + +use vars qw[$CATALYST_EXCEPTION_CLASS]; + +BEGIN { + extends($CATALYST_EXCEPTION_CLASS || 'Catalyst::Exception::Base'); +} + +__PACKAGE__->meta->make_immutable; + 1;