Mercurial > pub > Impl
diff Lib/IMPL/AppException.pm @ 278:4ddb27ff4a0b
core refactoring
author | cin |
---|---|
date | Mon, 04 Feb 2013 02:10:37 +0400 |
parents | 89179bb8c388 |
children |
line wrap: on
line diff
--- a/Lib/IMPL/AppException.pm Fri Feb 01 16:37:59 2013 +0400 +++ b/Lib/IMPL/AppException.pm Mon Feb 04 02:10:37 2013 +0400 @@ -11,7 +11,7 @@ use IMPL::Const qw(:prop); use IMPL::Resources::Strings { - messageFormat => "Application exception" + message => "Application exception" }; use IMPL::declare { @@ -21,7 +21,6 @@ props => [ source => PROP_RO, callStack => PROP_RO, - _cachedMessage => PROP_RW ] }; @@ -36,18 +35,6 @@ 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) = @_; @@ -60,4 +47,98 @@ die $self->new(@_); } -1; \ No newline at end of file +1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::AppException> - исключение приложения. + +=head1 SYNOPSIS + +=begin code + +package MyException; +use strict; + +use IMPL::Const qw(:prop); +use IMPL::declare { + base => [ + 'IMPL::AppException' => undef + ], + props => [ + level => PROP_RO + ] +}; + +use IMPL::Resources::Strings { + message => "Something wrong at level %level%" +}; + +sub CTOR { + my ($this,$level) = @_; + + $this->level($level); +} + +=end code + +=head1 DESCRIPTION + +Для описания собственных исключений в качестве базового класса должен +использоваться C<IMPL::AppException> поскольку он позволяет использовать +C<IMPL::declare> и объявлять свойства. + +C<IMPL::Exception> также является классом для исключений, однако поскольку +он используется в базовых механизмах библиотеки, то в нем не реализованы +механизмы для описания свойсвт. + +Исключение имеет свойство C<message> которое возвращает текст с описанием +проблемы, данное свойство можно реализовать с использованием +C<IMPL::Resources::Strings> для реализации поддержки нескольких языков. + +Особенностью тсключений также является то, что при их создании автоматически +фиксируется место, где оно было создано и свойства C<source> и C<callStack> +заполняются автоматически. + +Для исключений переопределены операторы приведения к строке и к булевому +значению. + +=head1 MEMBERS + +=head2 C<[op]new(@args)> + +Оператор создающий новый экземпляр исключения, сначала создает экземпляр +исключения, затем заполняет свойства C<source>, C<callStack>. + +=head2 C<[op]throw(@args)> + +Создает объект исключения и бросает его. + +=begin code + +throw MyException(10); +MyException->throw(10); # ditto + +=end code + +=head2 C<[get]source> + +Строка с описанием в каком файле и где произошло исключение. см. C<Carp> + +=head2 C<[get]callStack> + +Строка со стеком вызовов в момент возникновения исключения. см. C<Carp> + +=head2 C<[get]message> + +Возвращает описание исключения. + +=head2 C<ToString()> + +Возвращает текстовое представление, как правило это C<message> и C<callStack>. + +=cut \ No newline at end of file