3 class IronMunger::StatsSaver {
5 use MooseX::Types::Path::Class qw(Dir);
6 use aliased 'IronMunger::Monger';
8 use File::Path qw(mkpath);
10 use namespace::autoclean;
12 has dir => (is => 'ro', isa => Dir, required => 1, coerce => 1);
14 my @types = qw(male female);
16 method _image_symlink_target (Str $type, Str $level) {
17 $self->dir->subdir('badges')->subdir($type)->file("${level}.png");
20 method _image_symlink_from (Str $user, Str $type) {
21 $self->dir->subdir('mybadge')->subdir($type)->file("${user}.png");
24 method _write_image_symlink (Str $user, Str $type, Str $level) {
25 my ($from, $target) = (
26 $self->_image_symlink_from($user, $type),
27 $self->_image_symlink_target($type, $level),
29 my $dir = File::Spec->catpath((File::Spec->splitpath($from))[0,1]);
31 symlink($target, $from)
32 or confess "Couldn't symlink ${from} to ${target}: $!";
36 method _write_symlinks_for (IronMunger::Monger $monger) {
37 foreach my $type (@types) {
40 grep $monger->${\"has_$_"},
43 $self->_write_image_symlink($name, $type, $monger->level);
48 method _write_summary_csv (ArrayRef[IronMunger::Monger] $mongers) {
51 method mongers (ArrayRef[IronMunger::Monger] $mongers) {
52 $self->_write_summary_csv($mongers);
53 $self->_write_symlinks_for($_) for @$mongers;