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