Class::Business::DK::Phonenumber - class to model, validate and format Danish telephonenumbers


Business-DK-Phonenumber documentation Contained in the Business-DK-Phonenumber distribution.

Index


Code Index:

NAME

Top

Class::Business::DK::Phonenumber - class to model, validate and format Danish telephonenumbers

VERSION

Top

This documentation describes version 0.01

SYNOPSIS

Top

    use Class::Business::DK::Phonenumber;

    #Constructor
    my $phonenumber = Class::Business::DK::Phonenumber->new('+45 12345678');

    #Brief human readable Danish phonenumber format with international prefix
    print $phonenumber->render('%02d %02d %02d %02d');

    #a brief form validating a stripping everything
    my $phonenum =
        Class::Business::DK::Phonenumber->new('+45 12 34 56 78')->render('%d8');
    # 12345678

    #for MSISDN like representation with protocol prefix
    my $phonenum =
        Class::Business::DK::Phonenumber->new('+45 12 34 56 78')->render('GSM%d10');
    # GSM4512345678

    #for dialing Denmark with international country prefix and international
    #calling code for calling outside Denmark 00
    my $phonenum =
        Class::Business::DK::Phonenumber->new('12 34 56 78')->render('00%d10');
    # 004512345678

DESCRIPTION

Top

This module offers functionality to validate, format and generate Danish phonenumbers using object-oriented programming.

Please see:

* Business::DK::Phonenumber for a procedural interface
* Data::FormValidator::Constraints::Business::DK::Phonenumber for an integration with Data::FormValidator

The contructor can recognise telephone numbers is the following formats as Danish phonenumbers.

* 12345678
* 4512345678
* +4512345678

White space characters are ignored. See also phonenumber.

SUBROUTINES AND METHODS

Top

new({ phonenumber => $phonenumber, template => $template })

For valid phone number formatting please refer to phonenumber.

phonenumber($phonenumber, $template)

This is accessor to the phonenumber attribute.

Provided with a valid phone number parameter the object's phone number attribute is set.

If the accessor is not provided with a phonenumber parameter, the one defined is in the object is returned.

See also: validate in Business::DK::Phonenumber, which is used internally to validate the phonenumber parameter.

Valid phone numbers have to abide to the following formatting:

* +<international prefix><8 digit phonenumber>
* <international prefix><8 digit phonenumber>
* <8 digit phonenumber>

The prefixed plus sign and space used as separator are optional as are the international dialing code.

The phone number can be formatted in anyway separated using whitespace characters.

template($template)

This is accessor to the template attribute.

Provided with a valid template parameter the object's template attribute is set.

If the accessor is not provided with a template parameter, the one defined is in the object is returned.

See also: validate_template in Business::DK::Phonenumber, which is used internally to validate the template parameter.

DIAGNOSTICS

Top

* phone number not in recognisable format, the phone number provided to the constructor is not parsable. Please evaluate what you are attempting to feed to the constructor.
* phone number parameter is mandatory for the constructor, please specify the phone number parameter to the constructor in order to continue.
* template not in recognisable format, the template provided to the constructor is not in a parsable format, please evaluate what you attempting to feed to the constructor.

CONFIGURATION AND ENVIRONMENT

Top

No special configuration or environment is necessary.

DEPENDENCIES

Top

* Carp
* Exporter
* Business::DK::Phonenumber

INCOMPATIBILITIES

Top

No known incompatibilities at this time.

BUGS AND LIMITATIONS

Top

No known bugs or limitations at this time.

TEST AND QUALITY

Top

* The Perl::Critic::Policy::ValuesAndExpressions::RequireNumberSeparators policy has been disabled. We are working with phonenumbers, strings consisting primarily of number, so not special interpretation or calculative behaviour is needed.
* Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma policy has been disabled. I like constants.
* Perl::Critic::Policy::InputOutput::RequireBracedFileHandleWithPrint policy has been disabled for now should be revisited at some point.

TODO

Top

* Please refer to the distribution TODO file

SEE ALSO

Top

sprintf

Business::DK::Phonenumber utilizes sprintf to as templating system for formatting telephonenumbers. This is a well specified and tested interface which is easy to use.

BUG REPORTING

Top

Please report issues via CPAN RT:

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Business-DK-Phonenumber

or by sending mail to

bug-Business-DK-Phonenumber@rt.cpan.org

MOTIVATION

Top

I have been working in Telco for a long time. So validation and formatting of telephone numbers is something I have seen at lot of. This module is an attempt to sort of consolidate the numerous different regular expression solutions I have seen scathered over large code bases.

AUTHOR

Top

Jonas B. Nielsen, (jonasbn) - <jonasbn@cpan.org>

COPYRIGHT

Top

LICENSE

Top

Class-Business-DK-Phonenumber is released under the artistic license

The distribution is licensed under the Artistic License, as specified by the Artistic file in the standard perl distribution (http://www.perl.com/language/misc/Artistic.html).


Business-DK-Phonenumber documentation Contained in the Business-DK-Phonenumber distribution.

package Class::Business::DK::Phonenumber;

# $Id: Phonenumber.pm 6249 2009-06-19 20:37:05Z jonasbn $

use strict;
use warnings;
use vars qw($VERSION);
use Carp qw(croak);
use Business::DK::Phonenumber
    qw(validate render validate_template DEFAULT_TEMPLATE DK_PREFIX TRUE FALSE);

$VERSION = '0.01';

## no critic (ValuesAndExpressions::ProhibitEmptyQuotes, ValuesAndExpressions::ProhibitInterpolationOfLiterals)
use overload "" => \&render;

sub new {
    my ( $class, $params ) = @_;

    my $self = bless {
        phonenumber => 0,
        template    => DEFAULT_TEMPLATE,
        prefix      => DK_PREFIX,
        },
        $class || ref $class;

    if ( $params->{phonenumber} ) {
        $self->phonenumber( $params->{phonenumber} )
            or croak
            "phonenumber >$params->{phonenumber}< not in recognisable format";
    } else {
        croak 'phonenumber parameter is mandatory';
    }

    if ( $params->{template} ) {
        $self->template( $params->{template} )
            or croak
            "template >$params->{template}< not in recognisable format";
    }

    $self->{prefix} = $params->{prefix};

    return $self;
}

sub phonenumber {
    my ( $self, $phonenumber, $template ) = @_;

    if ($phonenumber) {

        my $tmp_phonenumber = $self->{phonenumber};

        if ( validate($phonenumber) ) {
            $self->{phonenumber} = $phonenumber;

            if ( $self->template($template) ) {
                return TRUE;
            } else {
                $self->{phonenumber} = $tmp_phonenumber;

                croak "template >$template< not in recognisable format";
            }

            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        if ($template) {
            if ( $self->validate_template($template) ) {
                return $self->render( undef, $template );
            } else {
                croak "template >$template< not in recognisable format";
            }
        } else {
            return $self->render();
        }
    }
}

sub template {
    my ( $self, $template ) = @_;

    if ($template) {
        if ( $self->validate_template($template) ) {
            $self->{template} = $template;
            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        return $self->{template};
    }
}

1;

__END__