Net-CIDR-MobileJP

 view release on metacpan or  search on metacpan

lib/Net/CIDR/MobileJP.pm  view on Meta::CPAN

package Net::CIDR::MobileJP;
use strict;
use warnings;
use 5.00800;
use Carp;
use Net::CIDR::Lite;
use File::ShareDir ();
our $VERSION = '0.24';

our $yaml_loader;
BEGIN {
    $yaml_loader = sub {
        ## no critic
        if (eval "use YAML::Syck; 1;") {
            \&YAML::Syck::LoadFile;
        } else {
            require YAML;
            \&YAML::LoadFile;
        }
    }->();
};

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

    return bless {spanner => $class->_create_spanner($class->_load_config($stuff))}, $class;
}

sub _create_spanner {
    my ($class, $conf) = @_;

    my $spanner = Net::CIDR::Lite::Span->new;
    while (my ($carrier, $ip_ranges) = each %$conf) {
        $spanner->add(do {
            my $cidr = Net::CIDR::Lite->new;
            for my $ip_range (@$ip_ranges) {
                $cidr->add($ip_range);
            }
            $cidr;
        }, $carrier);
    }
    return $spanner;
}

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

    my $data;
    if (defined $stuff && -f $stuff && -r _) {
        # load yaml from file
        $data = $yaml_loader->($stuff);
    } elsif ($stuff) {
        # raw data
        $data = $stuff;
    } else {
        # generated file
        my $file = eval {
            # use module_file first, this is needed by backward-compatibility
            File::ShareDir::module_file( 'Net::CIDR::MobileJP', 'cidr.yaml' )
        } || eval {
            File::ShareDir::dist_file( 'Net-CIDR-MobileJP', 'cidr.yaml' )
        };
        die $@ unless $file;
        $data = $yaml_loader->($file);
    }
    return $data;
}

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

    my ($carrier,) =  map { keys %$_ } values %{$self->{spanner}->find($ip)};
    return $carrier || 'N';
}


1;
__END__

=head1 NAME

Net::CIDR::MobileJP - mobile ip address in Japan

=head1 SYNOPSIS

    use Net::CIDR::MobileJP;

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.012 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )