Commit | Line | Data |
ed301616 |
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; |