CSV name mangling utilities
[engit/Iron-Munger.git] / lib / IronMunger / CSVUtils.pm
CommitLineData
ed301616 1package IronMunger::CSVUtils;
2
3use strict;
4use warnings;
5use Carp qw(confess);
6use namespace::clean;
7use Sub::Exporter -setup => {
8 exports => [ qw(filename_to_name_and_nick name_and_nick_to_filename) ],
9};
10
11use 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
24sub 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
35sub 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
481;