revbank/RevBank/Users.pm
2013-02-26 04:11:13 +01:00

70 lines
1.6 KiB
Perl

package RevBank::Users;
use strict;
use RevBank::Global;
use RevBank::Plugins;
my $filename = "revbank.accounts";
sub _read {
my @users;
open my $fh, $filename or die $!;
/\S/ and push @users, [split " "] while readline $fh;
close $fh;
return { map { lc($_->[0]) => $_ } @users };
}
sub names {
return map $_->[0], values %{ _read() };
}
sub balance {
my ($name) = @_;
return _read()->{ lc $name }->[1];
}
sub create {
my ($username) = @_;
open my $fh, '>>', $filename or die $!;
my $now = now();
print {$fh} "$username 0.00 $now\n" or die $!;
close $fh or die $!;
RevBank::Plugins::call_hooks("user_created", $username);
}
sub update {
my ($username, $delta, $transaction_id) = @_;
open my $in, 'revbank.accounts' or die $!;
open my $out, ">.revbank.$$" or die $!;
my $old;
my $new;
while (defined (my $line = readline $in)) {
my @a = split " ", $line;
if (lc $a[0] eq lc $username) {
$old = $a[1];
$new = $old + $delta;
printf {$out} "%-16s %+9.2f %s",
$username, $new, now() or die $!;
print {$out} "\n" or die $!;
} else {
print {$out} $line or die $!;
}
}
close $out or die $!;
close $in;
rename ".revbank.$$", "revbank.accounts" or die $!;
RevBank::Plugins::call_hooks(
"user_balance", $username, $old, $delta, $new, $transaction_id
);
}
sub parse_user {
my ($username) = @_;
my $users = _read();
return undef if not exists $users->{ lc $username };
return $users->{ lc $username }->[0];
}
1;