foo
[gitmo/Moose-Autobox.git] / examples / units / time.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Moose::Autobox;
7
8 {
9     package Units::Time;
10     use Moose::Role;
11     use Moose::Autobox;
12     
13     sub seconds   { $_[0]               }    
14     sub minutes   { $_[0] * 60          }
15     sub hours     { $_[0] * 60->minutes }
16     sub days      { $_[0] * 24->hours   }
17     sub weeks     { $_[0] * 7->days     }
18     sub years     { $_[0] * 365->days   }
19     sub centuries { $_[0] * 10->years   } 
20     
21     sub ago {
22         my ($self, $time) = @_;
23         $time ||= time();
24         $time - $self;
25     }   
26     
27     sub since {
28         my ($self, $time) = @_;
29         $time ||= time();        
30         $time + $self;
31     }   
32     
33     {
34         no warnings 'once';
35         
36         # singular versions 
37         *second  = \&seconds;
38         *minute  = \&minutes;
39         *hour    = \&hours;
40         *day     = \&days;
41         *week    = \&weeks;
42         *year    = \&years;
43         *century = \&centuries;
44         
45         *til      = \&ago;    
46         *from_now = \&since; 
47     }
48     
49     sub as_string { scalar localtime $_[0] }
50
51 }
52
53 Moose::Autobox->mixin_additional_role(SCALAR => 'Units::Time');
54
55 $\ = "\n";
56
57 print "2 days ago was           : " . 2->days->ago->as_string;
58 print "3 weeks from now will be : " . 3->weeks->from_now->as_string;
59 my $one_week_ago = 1->week->ago;
60 print "1 day until 1 week ago   : " . 1->day->til($one_week_ago)->as_string;
61 print "2 years since 1 week ago : " . 2->years->since($one_week_ago)->as_string;
62
63