Magrathea-API
view release on metacpan or search on metacpan
lib/Magrathea/API/Emergency.pm view on Meta::CPAN
The above methods will get or set a field in the 999 record.
Abbreviations are substituted and they are then checked for
maximum length. These routines will croak if an invalid length
(or invalid postcode) is passed
To get the data, simply call the method, to change the data, pass
it as a parameter.
Nothing is sent to Magrathea until L</update> is called.
=cut
sub postcode
{
my $self = shift;
my $postcode = shift;
if ($postcode) {
if ($postcode ne "") {
croak "Invalid postcode" unless $postcode =~ POSTCODE_RE;
}
$self->{info}{postcode} = $postcode;
$self->POSTCODE($postcode);
}
return $self->{info}{postcode};
}
=head3 ported
This is a boolean value showing whether or not the number has been
ported in from another provider. It will always evaluate to C<false>
though unless set by this method as there is no way to store the
information on the Magrathea database.
$emerge->ported(true); # Assuming true is set to 1
my $ported = $emerg->ported;
=cut
sub ported
{
my $self = shift;
my $val = shift;
my $value : Boolean = $val;
$self->{ported} = $value if defined $val;
$value = $self->{ported};
return $value;
}
=head3 update
This will take the current data and send it to Magrathea. The possible
valid responses are C<Information Valid> (0 in numeric context) or
C<Parsed OK. Check later for status.> (1 in numeric context).
If Magrathea's validation fails, the update will croak.
=cut
sub update
{
my $self = shift;
my $info = $self->info;
unless ($self->postcode and $self->name) {
croak "Name and postcode are mandatory";
}
my $response = $self->VALIDATE;
croak "Update failed: $response" if $response >= 2;
return $response;
}
sub AUTOLOAD
{
my $self = shift;
my $commands = qr{^(?:
CREATE|VALIDATE|STATUS|DATA|
TITLE|FORENAME|NAME|HONOURS|BUSSUFFIX|
PREMISES|THOROUGHFARE|LOCALITY|POSTCODE
)$}x;
my %fields = (
title => 20,
forename => 20,
name => 50,
honours => 30,
bussuffix => 50,
premises => 60,
thoroughfare => 55,
locality => 30
);
(my $name = our $AUTOLOAD) =~ s/.*://;
if ($name =~ /^[A-Z]+$/) {
croak "Unknown Command: $name" unless $name =~ $commands;
my $number = $self->number->packed;
$number =~ s/^0/P/ if $self->ported;
my @cmd = ('INFO', $number, 999, $name, @_);
return $self->sendline("@cmd");
}
else {
my $value = shift;
croak "Unknown method: $name" unless exists $fields{$name};
if (defined $value) {
my $abbr = abbreviate $value;
my $len = length $abbr;
my $max = $fields{$name};
croak "$abbr ($len charancters abbreviated)\n" .
"is longer than the max. length of $max" .
"for field $name" if $len > $max;
$self->{info}{$name} = $abbr;
my $cmd = uc $name;
$self->$cmd($abbr);
}
return $self->{info}{$name};
}
}
sub DESTROY {
# Avoid AUTOLOAD
}
=head2 AUTHOR
( run in 0.575 second using v1.01-cache-2.11-cpan-39bf76dae61 )