From: John Napiorkowski Date: Fri, 4 Apr 2008 03:25:20 +0000 (+0000) Subject: initial checkin X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=eda1e151e223aab77505f117568724973363338a;p=gitmo%2FMooseX-Patterns-GOF.git initial checkin --- eda1e151e223aab77505f117568724973363338a diff --git a/Changes b/Changes new file mode 100644 index 0000000..07006f6 --- /dev/null +++ b/Changes @@ -0,0 +1,5 @@ +Revision history for MooseX-Patterns-GOF + +0.01 Date/time + First version, released on an unsuspecting world. + diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..ec5e558 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,8 @@ +Changes +MANIFEST +Makefile.PL +README +lib/MooseX/Patterns/GOF.pm +t/00-load.t +t/pod-coverage.t +t/pod.t diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP new file mode 100644 index 0000000..3009aa8 --- /dev/null +++ b/MANIFEST.SKIP @@ -0,0 +1,17 @@ +# version control +\bCVS +(^|/)\. + +# CPAN chain files +^MANIFEST +^Makefile +^META.yml$ +^blib/ +^inc/ + +# packages +\.zip$ +\.tar\.gz$

i + +# temporarily kept old files +^archive/ \ No newline at end of file diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..566cbd2 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,18 @@ +use inc::Module::Install; + +perl_version '5.008006'; + +name 'MooseX-Patterns-GOF'; +all_from 'lib/MooseX/Patterns/GOF.pm'; +author 'John Napiorkowski '; + +requires 'Moose' => '0.40'; + +build_requires 'Test::More' => '0.70'; +build_requires 'Test::Pod' => '1.14'; +build_requires 'Test::Pod::Coverage' => '1.08'; + +auto_install; +tests "t/*.t t/*/*.t"; +WriteAll; + diff --git a/README b/README new file mode 100644 index 0000000..81bae1a --- /dev/null +++ b/README @@ -0,0 +1,52 @@ +MooseX-Patterns-GOF + +The README is used to introduce the module and provide instructions on +how to install the module, any machine dependencies it may have (for +example C compilers and installed libraries) and any other information +that should be provided before the module is installed. + +A README file is required for CPAN modules since CPAN extracts the README +file from a module distribution so that people browsing the archive +can use it to get an idea of the module's uses. It is usually a good idea +to provide version information here so that people can decide whether +fixes for the module are worth downloading. + + +INSTALLATION + +To install this module, run the following commands: + + perl Makefile.PL + make + make test + make install + +SUPPORT AND DOCUMENTATION + +After installing, you can find documentation for this module with the +perldoc command. + + perldoc MooseX::Patterns::GOF + +You can also look for information at: + + RT, CPAN's request tracker + http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-Patterns-GOF + + AnnoCPAN, Annotated CPAN documentation + http://annocpan.org/dist/MooseX-Patterns-GOF + + CPAN Ratings + http://cpanratings.perl.org/d/MooseX-Patterns-GOF + + Search CPAN + http://search.cpan.org/dist/MooseX-Patterns-GOF + + +COPYRIGHT AND LICENCE + +Copyright (C) 2008 John Napiorkowski + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + diff --git a/lib/MooseX/Patterns/GOF.pm b/lib/MooseX/Patterns/GOF.pm new file mode 100644 index 0000000..6737c99 --- /dev/null +++ b/lib/MooseX/Patterns/GOF.pm @@ -0,0 +1,113 @@ +package MooseX::Patterns::GOF; + +use warnings; +use strict; + +=head1 NAME + +MooseX::Patterns::GOF - Moose Versions of the 'Gang of Four' Design Patterns. + +=head1 VERSION + +Version 0.01 + +=cut + +our $VERSION = '0.01'; + +=head1 SYNOPSIS + +Please see the SYNOPSIS section of each individual Pattern Class. + +=head1 DESCRIPTION + +Design Patterns are best practices solutions to common problems faced by +software engineers. Orginally popularized by the book of the same name +L these patterns, and how to +implement them in a programming language, continue to have an impact on +software design. + +L is a set of classes which are both examples of the +classic patterns with a Moosified spin, as well as useful bases for your +practical projects. Thus the purpose of these classes are both educational +(for learning L and for increasing awareness of good software design) +and practical. + +Design patterns are always evolving; additionally the classic patterns we will +explore here were originally created to help solve problems that arise with +statically compiled and strongly typed languages (such as Java). So we hope to +find more Perlish (and Moose-ish) solutions when we can. Contributions, +suggestions and constructive criticism welcomed! + +=head1 PATTERNS + +The classic Design Patterns books described many patterns organized into the +following three types: + +=head2 Creational + +Patterns having to do with the creation of new objects. + +=head2 Structural + +Patterns for class composition and inheritance. + +=head2 Behavioral + +Patterns for object communication. + +=head1 AUTHOR + +John Napiorkowski, 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 MooseX::Patterns::GOF + + +You can also look for information at: + +=over 4 + +=item * RT: CPAN's request tracker + +L + +=item * AnnoCPAN: Annotated CPAN documentation + +L + +=item * CPAN Ratings + +L + +=item * Search CPAN + +L + +=back + + +=head1 ACKNOWLEDGEMENTS + + +=head1 COPYRIGHT & LICENSE + +Copyright 2008 John Napiorkowski, all rights reserved. + +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + + +=cut + +1; # End of MooseX::Patterns::GOF diff --git a/t/00-load.t b/t/00-load.t new file mode 100644 index 0000000..d700c16 --- /dev/null +++ b/t/00-load.t @@ -0,0 +1,9 @@ +#!perl -T + +use Test::More tests => 1; + +BEGIN { + use_ok( 'MooseX::Patterns::GOF' ); +} + +diag( "Testing MooseX::Patterns::GOF $MooseX::Patterns::GOF::VERSION, Perl $], $^X" ); diff --git a/t/boilerplate.t b/t/boilerplate.t new file mode 100644 index 0000000..c2722bf --- /dev/null +++ b/t/boilerplate.t @@ -0,0 +1,55 @@ +#!perl -T + +use strict; +use warnings; +use Test::More tests => 3; + +sub not_in_file_ok { + my ($filename, %regex) = @_; + open( my $fh, '<', $filename ) + or die "couldn't open $filename for reading: $!"; + + my %violated; + + while (my $line = <$fh>) { + while (my ($desc, $regex) = each %regex) { + if ($line =~ $regex) { + push @{$violated{$desc}||=[]}, $.; + } + } + } + + if (%violated) { + fail("$filename contains boilerplate text"); + diag "$_ appears on lines @{$violated{$_}}" for keys %violated; + } else { + pass("$filename contains no boilerplate text"); + } +} + +sub module_boilerplate_ok { + my ($module) = @_; + not_in_file_ok($module => + 'the great new $MODULENAME' => qr/ - The great new /, + 'boilerplate description' => qr/Quick summary of what the module/, + 'stub function definition' => qr/function[12]/, + ); +} + +TODO: { + local $TODO = "Need to replace the boilerplate text"; + + not_in_file_ok(README => + "The README is used..." => qr/The README is used/, + "'version information here'" => qr/to provide version information/, + ); + + not_in_file_ok(Changes => + "placeholder date/time" => qr(Date/time) + ); + + module_boilerplate_ok('lib/MooseX/Patterns/GOF.pm'); + + +} + diff --git a/t/pod-coverage.t b/t/pod-coverage.t new file mode 100644 index 0000000..fc40a57 --- /dev/null +++ b/t/pod-coverage.t @@ -0,0 +1,18 @@ +use strict; +use warnings; +use Test::More; + +# Ensure a recent version of Test::Pod::Coverage +my $min_tpc = 1.08; +eval "use Test::Pod::Coverage $min_tpc"; +plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" + if $@; + +# Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, +# but older versions don't recognize some common documentation styles +my $min_pc = 0.18; +eval "use Pod::Coverage $min_pc"; +plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" + if $@; + +all_pod_coverage_ok(); diff --git a/t/pod.t b/t/pod.t new file mode 100644 index 0000000..ee8b18a --- /dev/null +++ b/t/pod.t @@ -0,0 +1,12 @@ +#!perl -T + +use strict; +use warnings; +use Test::More; + +# Ensure a recent version of Test::Pod +my $min_tp = 1.22; +eval "use Test::Pod $min_tp"; +plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; + +all_pod_files_ok();