Commit | Line | Data |
14375407 |
1 | package MooseX::Types::Structured::MessageStack; |
2 | use Moose; |
3 | |
fc5995b6 |
4 | =attr level |
5 | |
6 | =cut |
7 | |
14375407 |
8 | has 'level' => ( |
9 | traits => ['Counter'], |
10 | is => 'ro', |
11 | isa => 'Num', |
12 | required => 0, |
13 | default => 0, |
14 | handles => { |
15 | inc_level => 'inc', |
16 | dec_level => 'dec', |
17 | }, |
18 | ); |
19 | |
fc5995b6 |
20 | =attr messages |
21 | |
22 | =cut |
23 | |
14375407 |
24 | has 'messages' => ( |
25 | traits => ['Array'], |
26 | is => 'ro', |
27 | isa => 'ArrayRef[HashRef]', |
28 | required => 1, |
29 | default => sub { [] }, |
30 | handles => { |
31 | has_messages => 'count', |
32 | add_message => 'push', |
33 | all_messages => 'elements', |
34 | }, |
35 | ); |
36 | |
fc5995b6 |
37 | =method as_string |
38 | |
39 | =cut |
40 | |
14375407 |
41 | sub as_string { |
42 | my @messages = (shift)->all_messages; |
ad36c8f5 |
43 | my @flattened_msgs = map { |
44 | "\n". (" " x $_->{level}) ."[+] " . $_->{message}; |
45 | } reverse @messages; |
14375407 |
46 | |
ad36c8f5 |
47 | return join("", @flattened_msgs); |
48 | } |
14375407 |
49 | |
50 | no Moose; |
51 | __PACKAGE__->meta->make_immutable; |
52 | |
53 | 1; |