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