From a0ef78618940cd5bde6b912d010123507a9368c3 Mon Sep 17 00:00:00 2001 From: "Zane C. Bowers-Hadley" Date: Tue, 23 Jul 2019 01:30:43 -0500 Subject: [PATCH] begin work on host_f and Sort mostly done --- Net-Connection-Sort/MANIFEST | 3 + Net-Connection-Sort/Makefile.PL | 43 +++-- .../lib/Net/Connection/Sort.pm | 116 +++++++++++-- .../lib/Net/Connection/Sort/host_f.pm | 154 ++++++++++++++++++ Net-Connection-Sort/t/01-load.t | 13 ++ Net-Connection-Sort/t/host_f.t | 13 ++ 6 files changed, 303 insertions(+), 39 deletions(-) create mode 100644 Net-Connection-Sort/lib/Net/Connection/Sort/host_f.pm create mode 100644 Net-Connection-Sort/t/01-load.t create mode 100644 Net-Connection-Sort/t/host_f.t diff --git a/Net-Connection-Sort/MANIFEST b/Net-Connection-Sort/MANIFEST index 54efd9b..c7a13d5 100644 --- a/Net-Connection-Sort/MANIFEST +++ b/Net-Connection-Sort/MANIFEST @@ -1,9 +1,12 @@ Changes lib/Net/Connection/Sort.pm +lib/Net/Connection/Sort/host_f.pm Makefile.PL MANIFEST This list of files README t/00-load.t +t/01-load.t t/manifest.t t/pod-coverage.t t/pod.t +t/host_f.t diff --git a/Net-Connection-Sort/Makefile.PL b/Net-Connection-Sort/Makefile.PL index 25bc46c..ce17a18 100644 --- a/Net-Connection-Sort/Makefile.PL +++ b/Net-Connection-Sort/Makefile.PL @@ -4,25 +4,24 @@ use warnings; use ExtUtils::MakeMaker; my %WriteMakefileArgs = ( - NAME => 'Net::Connection::Sort', - AUTHOR => q{Zane C. Bowers-Hadley }, - VERSION_FROM => 'lib/Net/Connection/Sort.pm', - ABSTRACT_FROM => 'lib/Net/Connection/Sort.pm', - LICENSE => 'artistic_2', - MIN_PERL_VERSION => '5.006', - CONFIGURE_REQUIRES => { - 'ExtUtils::MakeMaker' => '0', - }, - TEST_REQUIRES => { - 'Test::More' => '0', - }, - PREREQ_PM => { - #'ABC' => '1.6', - #'Foo::Bar::Module' => '5.0401', - }, - dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, - clean => { FILES => 'Net-Connection-Sort-*' }, -); + NAME => 'Net::Connection::Sort', + AUTHOR => q{Zane C. Bowers-Hadley }, + VERSION_FROM => 'lib/Net/Connection/Sort.pm', + ABSTRACT_FROM => 'lib/Net/Connection/Sort.pm', + LICENSE => 'artistic_2', + MIN_PERL_VERSION => '5.006', + CONFIGURE_REQUIRES => { + 'ExtUtils::MakeMaker' => '0', + }, + TEST_REQUIRES => { + 'Test::More' => '0', + }, + PREREQ_PM => { + 'Net::Connection'=>'0.0.0', + }, + dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, + clean => { FILES => 'Net-Connection-Sort-*' }, + ); # Compatibility with old versions of ExtUtils::MakeMaker unless (eval { ExtUtils::MakeMaker->VERSION('6.64'); 1 }) { @@ -36,10 +35,10 @@ unless (eval { ExtUtils::MakeMaker->VERSION('6.55_03'); 1 }) { } delete $WriteMakefileArgs{CONFIGURE_REQUIRES} - unless eval { ExtUtils::MakeMaker->VERSION('6.52'); 1 }; +unless eval { ExtUtils::MakeMaker->VERSION('6.52'); 1 }; delete $WriteMakefileArgs{MIN_PERL_VERSION} - unless eval { ExtUtils::MakeMaker->VERSION('6.48'); 1 }; +unless eval { ExtUtils::MakeMaker->VERSION('6.48'); 1 }; delete $WriteMakefileArgs{LICENSE} - unless eval { ExtUtils::MakeMaker->VERSION('6.31'); 1 }; +unless eval { ExtUtils::MakeMaker->VERSION('6.31'); 1 }; WriteMakefile(%WriteMakefileArgs); diff --git a/Net-Connection-Sort/lib/Net/Connection/Sort.pm b/Net-Connection-Sort/lib/Net/Connection/Sort.pm index e85e9ad..273f330 100644 --- a/Net-Connection-Sort/lib/Net/Connection/Sort.pm +++ b/Net-Connection-Sort/lib/Net/Connection/Sort.pm @@ -3,50 +3,132 @@ package Net::Connection::Sort; use 5.006; use strict; use warnings; +use base 'Error::Helper'; =head1 NAME -Net::Connection::Sort - The great new Net::Connection::Sort! +Net::Connection::Sort - Sorts array of Net::Connection objects. =head1 VERSION -Version 0.01 +Version 0.0.0 =cut -our $VERSION = '0.01'; +our $VERSION = '0.0.0'; =head1 SYNOPSIS -Quick summary of what the module does. - -Perhaps a little code snippet. - use Net::Connection::Sort; + use Net::Connection; + + my $sort_args={ + type=>'host_f', + invert=>0, + }; + + my $mcs; + eval{ + $ncs=Net::Connection::Sort->new( $sort_args ); + }; + + if ( ! defined( $mcs ) ){ + print "Failed to init the sorter... ".$@; + } - my $foo = Net::Connection::Sort->new(); - ... +=head1 METHODS -=head1 EXPORT +=head2 new -A list of functions that can be exported. You can delete this section -if you don't export anything, such as for a purely object-oriented module. +This initiates the module. -=head1 SUBROUTINES/METHODS +One argument is taken and that is a hash ref with two possible keys, +'type' and 'invert'. If not passed or any of the keys are undef, then +the defaults will be used. -=head2 function1 +'type' is the module to use. It is relative to 'Net::Connection::Sort', +so 'host_f' becomes 'Net::Connection::Sort::host_f'. + + my $sort_args={ + type=>'host_f', + invert=>0, + }; + + my $mcs; + eval{ + $ncs=Net::Connection::Sort->new( $sort_args ); + }; + + if ( ! defined( $mcs ) ){ + print "Failed to init the sorter... ".$@; + } =cut -sub function1 { +sub new{ + my %args; + if(defined($_[1])){ + %args= %{$_[1]}; + }; + + + my $self = { + perror=>undef, + error=>undef, + errorString=>"", + testing=>0, + errorExtra=>{ + flags=>{ + } + }, + type=>'host_f', + invert=>0, + sorter=>undef,, + }; + bless $self; + + # real in the args if needed + if (defined( $args{type} )){ + $self->{type}=$args{type}; + } + if (defined( $args{invert} )){ + $self->{invert}=$args{invert}; + } + + # see of we amd reel in the module + my $to_eval='use Net::Connection::Sort::'.$self->{type} + .'; $self->{sorter}=Net::Connection::Sort::'.$self->{type}.'->new;'; + eval( $to_eval ) or die('Failed to use or invoke Net::Connection::Sort::'.$self->{type}.'->new... '.$@); + + # make sure we did get it + if (!defined( $self->{sorter} )){ + die( 'Net::Connection::Sort::'.$self->{type}.'->new returned undef'); + } + + return $self; } -=head2 function2 +=head2 sort + +This sorts the array of Net::Connection objects. + +One object is taken and that is a array of objects. =cut -sub function2 { +sub sorter{ + my $self=$_[0]; + my @objects; + if(defined($_[1])){ + @objects= @{$_[1]}; + }; + + if( ! $self->errorblank ){ + return undef; + } + + return $self->{sorter}->sorter( \@objects ); } =head1 AUTHOR diff --git a/Net-Connection-Sort/lib/Net/Connection/Sort/host_f.pm b/Net-Connection-Sort/lib/Net/Connection/Sort/host_f.pm new file mode 100644 index 0000000..2395df6 --- /dev/null +++ b/Net-Connection-Sort/lib/Net/Connection/Sort/host_f.pm @@ -0,0 +1,154 @@ +package Net::Connection::Sort::host_f; + +use 5.006; +use strict; +use warnings; + +=head1 NAME + +Net::Connection::Sort - Sorts array of Net::Connection objects. + +=head1 VERSION + +Version 0.0.0 + +=cut + +our $VERSION = '0.0.0'; + + +=head1 SYNOPSIS + + use Net::Connection::Sort::host_f; + use Net::Connection; + + my $ncs=Net::Connection::Sort::host_f->new; + +=head1 METHODS + +=head2 new + +This initiates the module. + +No arguments are taken and this will always succeed. + +=cut + +sub new{ + my %args; + if(defined($_[1])){ + %args= %{$_[1]}; + }; + + + my $self = { + }; + bless $self; + + return $self; +} + +=head2 sort + +This sorts the array of Net::Connection objects. + +One object is taken and that is a array of objects. + +=cut + +sub sorter{ + my $self=$_[0]; + my @objects; + if ( + defined( $_[1] ) && + ( ref($_[1]) eq 'ARRAY' ) + ){ + @objects=@{ $_[1] }; + }else{ + die 'The passed item is either not a array or undefined'; + } + + @objects=sort { + &helper( $a->foreign_host ) <=> &helper( $b->foreign_host ) + } @objects; + + return @objects; +} + +=head2 helper + +=cut + +sub helper{ + if ( + ( !defined($_[0]) ) || + ( $_[0] eq '*' ) || + ( $_[0] =~ /[g-zG-Z]/ ) + ){ + return 0; + } + my $host=eval { Net::IP->new( $_[0] )->intip} ; + if (!defined( $host )){ + return 0; + } + return $host; +} + +=head1 AUTHOR + +Zane C. Bowers-Hadley, C<< >> + +=head1 BUGS + +Please report any bugs or feature requests to C, or through +the web interface at L. I will be notified, and then you'll +automatically be notified of progress on your bug as I make changes. + + + + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc Net::Connection::Sort + + +You can also look for information at: + +=over 4 + +=item * RT: CPAN's request tracker (report bugs here) + +L + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * Search CPAN + +L + +=back + + +=head1 ACKNOWLEDGEMENTS + + +=head1 LICENSE AND COPYRIGHT + +This software is Copyright (c) 2019 by Zane C. Bowers-Hadley. + +This is free software, licensed under: + + The Artistic License 2.0 (GPL Compatible) + + +=cut + +1; # End of Net::Connection::Sort diff --git a/Net-Connection-Sort/t/01-load.t b/Net-Connection-Sort/t/01-load.t new file mode 100644 index 0000000..b2f322a --- /dev/null +++ b/Net-Connection-Sort/t/01-load.t @@ -0,0 +1,13 @@ +#!perl -T +use 5.006; +use strict; +use warnings; +use Test::More; + +plan tests => 1; + +BEGIN { + use_ok( 'Net::Connection::Sort::host_f' ) || print "Bail out!\n"; +} + +diag( "Testing Net::Connection::Sort::host_f $Net::Connection::Sort::host_f::VERSION, Perl $], $^X" ); diff --git a/Net-Connection-Sort/t/host_f.t b/Net-Connection-Sort/t/host_f.t new file mode 100644 index 0000000..b2f322a --- /dev/null +++ b/Net-Connection-Sort/t/host_f.t @@ -0,0 +1,13 @@ +#!perl -T +use 5.006; +use strict; +use warnings; +use Test::More; + +plan tests => 1; + +BEGIN { + use_ok( 'Net::Connection::Sort::host_f' ) || print "Bail out!\n"; +} + +diag( "Testing Net::Connection::Sort::host_f $Net::Connection::Sort::host_f::VERSION, Perl $], $^X" );