comparison lib/IMPL/AppException.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children b0481c071bea
comparison
equal deleted inserted replaced
406:f23fcb19d3c1 407:c6e90e02dd17
1 package IMPL::AppException;
2 use strict;
3 use mro 'c3';
4 use overload
5 '""' => 'ToString',
6 'bool' => sub { return 1; },
7 'fallback' => 1;
8
9 use Carp qw(longmess shortmess);
10 use Scalar::Util qw(refaddr);
11
12 use IMPL::Const qw(:prop);
13 use IMPL::Resources::Strings {
14 message => "Application exception"
15 };
16
17 use IMPL::declare {
18 base => [
19 'IMPL::Object' => undef
20 ],
21 props => [
22 source => PROP_RO,
23 callStack => PROP_RO,
24 ]
25 };
26
27 sub new {
28 my $self = shift;
29
30 my $instance = $self->next::method(@_);
31
32 $instance->source(shortmess);
33 $instance->callStack(longmess);
34
35 return $instance;
36 }
37
38 sub ToString {
39 my ($this) = @_;
40
41 return join("\n", $this->message, $this->callStack);
42 }
43
44 sub throw {
45 my $self = shift;
46
47 die $self->new(@_);
48 }
49
50 1;
51
52 __END__
53
54 =pod
55
56 =head1 NAME
57
58 C<IMPL::AppException> - исключение приложения.
59
60 =head1 SYNOPSIS
61
62 =begin code
63
64 package MyException;
65 use strict;
66
67 use IMPL::Const qw(:prop);
68 use IMPL::declare {
69 base => [
70 'IMPL::AppException' => undef
71 ],
72 props => [
73 level => PROP_RO
74 ]
75 };
76
77 use IMPL::Resources::Strings {
78 message => "Something wrong at level %level%"
79 };
80
81 sub CTOR {
82 my ($this,$level) = @_;
83
84 $this->level($level);
85 }
86
87 =end code
88
89 =head1 DESCRIPTION
90
91 Для описания собственных исключений в качестве базового класса должен
92 использоваться C<IMPL::AppException> поскольку он позволяет использовать
93 C<IMPL::declare> и объявлять свойства.
94
95 C<IMPL::Exception> также является классом для исключений, однако поскольку
96 он используется в базовых механизмах библиотеки, то в нем не реализованы
97 механизмы для описания свойсвт.
98
99 Исключение имеет свойство C<message> которое возвращает текст с описанием
100 проблемы, данное свойство можно реализовать с использованием
101 C<IMPL::Resources::Strings> для реализации поддержки нескольких языков.
102
103 Особенностью тсключений также является то, что при их создании автоматически
104 фиксируется место, где оно было создано и свойства C<source> и C<callStack>
105 заполняются автоматически.
106
107 Для исключений переопределены операторы приведения к строке и к булевому
108 значению.
109
110 =head1 MEMBERS
111
112 =head2 C<[op]new(@args)>
113
114 Оператор создающий новый экземпляр исключения, сначала создает экземпляр
115 исключения, затем заполняет свойства C<source>, C<callStack>.
116
117 =head2 C<[op]throw(@args)>
118
119 Создает объект исключения и бросает его.
120
121 =begin code
122
123 throw MyException(10);
124 MyException->throw(10); # ditto
125
126 =end code
127
128 =head2 C<[get]source>
129
130 Строка с описанием в каком файле и где произошло исключение. см. C<Carp>
131
132 =head2 C<[get]callStack>
133
134 Строка со стеком вызовов в момент возникновения исключения. см. C<Carp>
135
136 =head2 C<[get]message>
137
138 Возвращает описание исключения.
139
140 =head2 C<ToString()>
141
142 Возвращает текстовое представление, как правило это C<message> и C<callStack>.
143
144 =cut