Mercurial > pub > Impl
view Lib/IMPL/AppException.pm @ 262:4ac39b9e2ca4
sync
author | sergey |
---|---|
date | Sat, 29 Dec 2012 03:22:15 +0400 |
parents | 93963ec449c5 |
children | 89179bb8c388 |
line wrap: on
line source
package IMPL::AppException; use strict; use mro 'c3'; use overload '""' => 'ToString', 'bool' => sub { return 1; }, 'fallback' => 1; use Carp qw(longmess shortmess); use Scalar::Util qw(refaddr); use IMPL::Const qw(:prop); use IMPL::Resources::Strings { messageFormat => "Application exception" }; use IMPL::declare { base => [ 'IMPL::Object' => '@_' ], props => [ source => PROP_RO, callStack => PROP_RO, _cachedMessage => PROP_RW ] }; sub new { my $self = shift; my $instance = $self->next::method(@_); $instance->callStack(longmess); $instance->source(shortmess); return $instance; } sub message { my ($this) = @_; if (my $msg = $this->_cachedMessage) { return $msg; } else { my $formatter = $this->can('messageFormat'); return $this->_cachedMessage($formatter->($this)); } } sub ToString { my ($this) = @_; return join("\n", $this->message, $this->callStack); } sub throw { my $self = shift; die $self->new(@_); } 1;