make array references coerce to something useful
[gitmo/MooseX-Types-Log-Dispatch.git] / lib / MooseX / Types / Log / Dispatch.pm
CommitLineData
57aaab30 1package MooseX::Types::Log::Dispatch;
2
3use MooseX::Types -declare => [ 'LogLevel', 'Logger' ];
4
5use MooseX::Types::Moose qw/Str HashRef ArrayRef/;
6use Log::Dispatch;
7
fd81f0ef 8our $VERSION = '0.002000';
c3a00eee 9
57aaab30 10subtype LogLevel,
11 as Str,
12 where { Log::Dispatch->level_is_valid( $_ ) },
13 message { "'$_' is not a valid Log::Dispatch log level." };
14
15class_type Logger, { class => 'Log::Dispatch' };
16
17coerce Logger,
18 from HashRef,
19 via { Log::Dispatch->new( %$_ ) };
20
21coerce Logger,
22 from ArrayRef,
fd81f0ef 23 via { Log::Dispatch->new( outputs => $_ ) };
57aaab30 24
251;
26
27__END__;
28
57aaab30 29=head1 NAME
30
31MooseX::Types::Log::Dispatch - L<Log::Dispatch> related constraints and coercions for
32Moose
33
34=head1 SYNOPSIS
35
36 package MyFoo;
37 use MooseX::Types::Log::Dispatch qw(Logger LogLevel);
38
39 has logger => (
40 isa => Logger,
41 is => 'ro',
42 coerce => 1,
43 );
44
45 has event_log_level => (
46 isa => LogLevel,
47 is => 'ro',
48 );
49
50 sub some_event_happened {
51 my ($self, $event) = @_;
52 $self->logger->log( level => $self->event_log_level, message => "$event happened");
53 }
54
55 my $obj1 = MyFoos->new(
56 event_log_level => 'debug',
fd81f0ef 57 logger => [ ['Screen', min_level => 'notice' ] ]
57aaab30 58 );
59
60 ## or
61
62 my $obj2 = MyFoos->new(
63 event_log_level => 'warning',
64 logger => { outputs => [ ['Screen', min_level => 'debug' ] ] }
65 );
66
67 $obj1->some_event_happened('zoom'); #nothing prints
68 $obj2->some_event_happened('zoom'); # 'zoom happened' prints
69
70=head1 DESCRIPTION
71
72This module provides Moose TypeConstraints that are believed to be useful when
73working with Log::Dispatch;
74
75=head1 AVAILABLE CONSTRAINTS
76
77=head2 Logger
78
fd81f0ef 79Class type for 'Log::Dispatch' optional coercion will turn dereference a
80hash reference and pass it to 'new' or treat an array reference as a list
81of C<outputs>.
57aaab30 82
83=head2 LogLevel
84
85A subtype of 'Str', this should be a string that is a valid L<Log::Dispatch>
86log level like: 0, 1, 2 ,3 ,4 ,5 ,6 ,7, info, debug, notice, warn, warning,
87err, error, crit, critical, alert, emerg, and emergency
88
89=head1 AUTHOR
90
91Guillermo Roditi (groditi) E<lt>groditi@cpan.orgE<gt>
92
93=head1 COPYRIGHT AND LICENSE
94
95Copyright (c) 2010 Guillermo Roditi. This program is free software; you can
96redistribute it and/or modify it under the same terms as Perl itself.
97
98=cut
99