1 package IronMunger::Calculate;
5 use autobox::DateTime::Duration;
8 use Sub::Exporter -setup => {
10 qw(successful_sequential_posts time_remaining_to_post)
14 sub check_post_gap ($aperture, $days, @posts) {
15 return @posts if @posts <= $aperture;
16 my @next_post = splice(@posts, 0, $aperture);
17 return 0 if DateTime->now - $next_post[-1]->at > $days->days;
18 my $success = $aperture;
19 foreach my $post (@posts) {
20 return $success if $next_post[0]->at - $post->at > $days->days;
23 push(@next_post, $post);
28 sub check_time_remaining ($aperture, $days, @posts) {
29 my $cand = (@posts > $aperture ? $posts[$aperture - 1] : $posts[-1]);
30 return $days->days - (DateTime->now - $cand->at)->in_units('days');
33 sub check_both ($check, @posts) {
35 $check->(1, 10, @posts), # 10 days between posts
36 $check->(4, 32, @posts), # 4 posts within any given 32 days
40 sub successful_sequential_posts (@posts) {
41 return check_both(\&check_post_gap, @posts);
44 sub time_remaining_to_post (@posts) {
45 return check_both(\&check_time_remaining, @posts);