56aa94889f1a879de6bb1516510a23c0fa74df1e
[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 # :level, :message, :tc
17 has 'messages' => (
18     traits => ['Array'],
19     is => 'ro',
20     isa => 'ArrayRef[HashRef]',
21     required => 1,
22     default => sub { [] },
23     handles => {
24         has_messages => 'count',
25         add_message => 'push',
26         all_messages => 'elements',
27     },
28 );
29
30 sub as_string {
31     my @messages = (shift)->all_messages;
32     my @flattened_msgs =  map {
33         "\n". (" " x $_->{level}) ."[+] " . $_->{message};
34     } reverse @messages;
35
36     return join("", @flattened_msgs);
37 }
38
39 no Moose;
40 __PACKAGE__->meta->make_immutable;
41
42 1;