reduced version for test-fatal
[gitmo/MooseX-Types-Structured.git] / lib / MooseX / Types / Structured / MessageStack.pm
1 package MooseX::Types::Structured::MessageStack;
2 use Moose;
3
4 =attr level
5
6 =cut
7
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
20 =attr messages
21
22 =cut
23
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
37 =method as_string
38
39 =cut
40
41 sub as_string {
42     my @messages = (shift)->all_messages;
43     my @flattened_msgs =  map {
44         "\n". (" " x $_->{level}) ."[+] " . $_->{message};
45     } reverse @messages;
46
47     return join("", @flattened_msgs);
48 }
49
50 no Moose;
51 __PACKAGE__->meta->make_immutable;
52
53 1;