Mercurial > pub > Impl
comparison Lib/IMPL/AppException.pm @ 278:4ddb27ff4a0b
core refactoring
author | cin |
---|---|
date | Mon, 04 Feb 2013 02:10:37 +0400 |
parents | 89179bb8c388 |
children |
comparison
equal
deleted
inserted
replaced
277:6585464c4664 | 278:4ddb27ff4a0b |
---|---|
9 use Carp qw(longmess shortmess); | 9 use Carp qw(longmess shortmess); |
10 use Scalar::Util qw(refaddr); | 10 use Scalar::Util qw(refaddr); |
11 | 11 |
12 use IMPL::Const qw(:prop); | 12 use IMPL::Const qw(:prop); |
13 use IMPL::Resources::Strings { | 13 use IMPL::Resources::Strings { |
14 messageFormat => "Application exception" | 14 message => "Application exception" |
15 }; | 15 }; |
16 | 16 |
17 use IMPL::declare { | 17 use IMPL::declare { |
18 base => [ | 18 base => [ |
19 'IMPL::Object' => undef | 19 'IMPL::Object' => undef |
20 ], | 20 ], |
21 props => [ | 21 props => [ |
22 source => PROP_RO, | 22 source => PROP_RO, |
23 callStack => PROP_RO, | 23 callStack => PROP_RO, |
24 _cachedMessage => PROP_RW | |
25 ] | 24 ] |
26 }; | 25 }; |
27 | 26 |
28 sub new { | 27 sub new { |
29 my $self = shift; | 28 my $self = shift; |
32 | 31 |
33 $instance->source(shortmess); | 32 $instance->source(shortmess); |
34 $instance->callStack(longmess); | 33 $instance->callStack(longmess); |
35 | 34 |
36 return $instance; | 35 return $instance; |
37 } | |
38 | |
39 | |
40 sub message { | |
41 my ($this) = @_; | |
42 | |
43 if (my $msg = $this->_cachedMessage) { | |
44 return $msg; | |
45 } else { | |
46 my $formatter = $this->can('messageFormat'); | |
47 return $this->_cachedMessage($formatter->($this)); | |
48 } | |
49 } | 36 } |
50 | 37 |
51 sub ToString { | 38 sub ToString { |
52 my ($this) = @_; | 39 my ($this) = @_; |
53 | 40 |
59 | 46 |
60 die $self->new(@_); | 47 die $self->new(@_); |
61 } | 48 } |
62 | 49 |
63 1; | 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 |