ec20df66321f3c4845ad0f977dfbe6a6c06165b5
[gitmo/MooseX-Types-Structured.git] / lib / MooseX / Types / Structured / MessageStack.pm
1 package MooseX::Types::Structured::MessageStack;
2 use Moose;
3
4 has 'level' => (
5     traits => ['Counter'],
6     is => 'ro',
7     isa => 'Num',
8     required => 0,
9     default => 0,
10     handles => {
11         inc_level => 'inc',
12         dec_level => 'dec',
13     },
14 );
15
16 has 'messages' => (
17     traits => ['Array'],
18     is => 'ro',
19     isa => 'ArrayRef[HashRef]',
20     required => 1,
21     default => sub { [] },
22     handles => {
23         has_messages => 'count',
24         add_message => 'push',
25         all_messages => 'elements',
26     },
27 );
28
29 sub as_string {
30     my @messages = (shift)->all_messages;
31     my @flattened_msgs =  map {
32         "\n". (" " x $_->{level}) ."[+] " . $_->{message};
33     } reverse @messages;
34
35     return join("", @flattened_msgs);
36 }
37
38 no Moose;
39 __PACKAGE__->meta->make_immutable;
40
41 1;