clean up and get the integration code to make a first run
[engit/Iron-Munger.git] / lib / IronMunger / CSVUtils.pm
1 package IronMunger::CSVUtils;
2
3 use strict;
4 use warnings;
5 use Carp qw(confess);
6 use namespace::clean;
7 use Sub::Exporter -setup => {
8   exports => [ qw(filename_to_name_and_nick name_and_nick_to_filename) ],
9 };
10
11 use signatures;
12
13 # So our plagger setup is weird. The filenames are of the form -
14 #
15 # my_${name}__${nick}_.csv
16 # my_${name}.csv
17 # my_${nick}.csv
18 #
19 # This corresponds to either 'My Name (mynick)', 'My Name' or 'mynick'
20 # in the plagger config.
21 # Rather than annoy people, I thought I'd just live with it by assuming
22 # any name has two or more sections.
23
24 sub filename_to_name_and_nick ($filename) {
25   my ($body) = ($filename =~ m/^my_(.*?)_?\.csv$/);
26   confess "Couldn't unpick ${filename} - see comments" unless $body;
27   my ($name, $nick) = split(/__/, $body);
28   if (!defined $nick && $name !~ /_/) {
29     ($name, $nick) = (undef, $name);
30   }
31   $name = join(' ', split('_', $name)) if defined $name;
32   return ($name, $nick);
33 }
34
35 sub name_and_nick_to_filename ($name, $nick) {
36   $name = join('_', split(' ', $name)) if defined $name;
37   my $body = do {
38     my @def = (grep defined, $name, $nick);
39     if (@def == 2) {
40       "${name}__${nick}_";
41     } else {
42       $def[0];
43     }
44   };
45   return "my_${body}.csv";
46 }
47
48 1;