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