new message stack code file and bust out test
[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 $message = join("", map { "\n". (" " x $_->{level}) ."[+] " . $_->{message} } reverse @messages);
33     return $message;
34 }
35
36
37 no Moose;
38 __PACKAGE__->meta->make_immutable;
39
40 1;