Commit | Line | Data |
f20e0e9e |
1 | use MooseX::Declare; |
2 | |
3 | class IronMunger::Monger { |
4 | |
f00c97c5 |
5 | use MooseX::Types::Moose qw(ArrayRef Str); |
f20e0e9e |
6 | use IronMunger::Calculate qw(:all); |
7 | use aliased 'IronMunger::Post'; |
8 | use signatures; |
9 | |
f00c97c5 |
10 | has name => (is => 'ro', isa => Str, required => 0, predicate => 'has_name'); |
11 | has nick => (is => 'ro', isa => Str, required => 0, predicate => 'has_nick'); |
12 | |
4142f6a9 |
13 | method full_name () { |
14 | join(' aka ',$self->name||'nameless',$self->nick||'anoncow'); |
15 | } |
16 | |
f20e0e9e |
17 | has posts => ( |
18 | is => 'ro', isa => ArrayRef[Post], required => 1, |
19 | default => sub { [] }, |
20 | ); |
21 | |
22 | has post_count => ( |
23 | is => 'ro', lazy => 1, |
24 | default => sub ($self) { successful_sequential_posts(@{$self->posts}) }, |
25 | ); |
26 | |
27 | has days_left => ( |
28 | is => 'ro', lazy => 1, |
29 | default => sub ($self) { days_remaining_to_post(@{$self->posts}) }, |
30 | ); |
79810d7d |
31 | |
32 | has level => ( |
33 | is => 'ro', lazy => 1, |
34 | default => sub ($self) { level_for_post_count($self->post_count) } |
35 | ); |
c5a24bc1 |
36 | |
37 | method debug_dump () { |
38 | join("\n", |
39 | (map join(': ', $_, $self->$_), |
40 | qw(full_name post_count days_left level)), |
41 | 'Posts:', |
42 | join('', |
43 | map { my $x = $_->debug_dump; $x =~ s/^/ /m; $x; } @{$self->posts} |
44 | ), |
45 | '' |
46 | ); |
47 | } |
f20e0e9e |
48 | } |
49 | |
50 | 1; |