Hello community,

here is the log from the commit of package perl-Class-Method-Modifiers for 
openSUSE:Factory checked in at 2013-06-05 17:48:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Class-Method-Modifiers (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Class-Method-Modifiers.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Class-Method-Modifiers"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Class-Method-Modifiers/perl-Class-Method-Modifiers.changes
  2012-05-03 10:59:36.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Class-Method-Modifiers.new/perl-Class-Method-Modifiers.changes
     2013-06-05 17:48:50.000000000 +0200
@@ -1,0 +2,9 @@
+Mon Jun  3 15:36:16 UTC 2013 - [email protected]
+
+- updated to 2.04
+      Test for and fix $_ corruption (Vladimir Timofeev)
+      New 'fresh' modifier (Aaron Crane)
+      Avoid "Variable "$..." will not stay shared" warnings under 5.8.x
+        (from changes in 1.09) [#80194] (Karen Etheridge)
+
+-------------------------------------------------------------------

Old:
----
  Class-Method-Modifiers-1.09.tar.gz

New:
----
  Class-Method-Modifiers-2.04.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Class-Method-Modifiers.spec ++++++
--- /var/tmp/diff_new_pack.AwQXty/_old  2013-06-05 17:48:50.000000000 +0200
+++ /var/tmp/diff_new_pack.AwQXty/_new  2013-06-05 17:48:50.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Class-Method-Modifiers
 #
-# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,27 +17,30 @@
 
 
 Name:           perl-Class-Method-Modifiers
-Version:        1.09
+Version:        2.04
 Release:        0
 %define cpan_name Class-Method-Modifiers
 Summary:        Provides Moose-like method modifiers
-License:        GPL-1.0+ or Artistic-1.0
+License:        Artistic-1.0 or GPL-1.0+
 Group:          Development/Libraries/Perl
 Url:            http://search.cpan.org/dist/Class-Method-Modifiers/
-Source:         
http://www.cpan.org/authors/id/S/SA/SARTAK/%{cpan_name}-%{version}.tar.gz
+Source:         
http://www.cpan.org/authors/id/E/ET/ETHER/%{cpan_name}-%{version}.tar.gz
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
-BuildRequires:  perl(ExtUtils::MakeMaker) >= 6.36
 BuildRequires:  perl(Test::Fatal)
-BuildRequires:  perl(Test::More)
+#BuildRequires: perl(App::pod2pdf)
 #BuildRequires: perl(Class::Method::Modifiers)
 #BuildRequires: perl(inc::Module::Install)
 #BuildRequires: perl(JSON)
 #BuildRequires: perl(LWP::Simple)
 #BuildRequires: perl(Module::Build)
+#BuildRequires: perl(Module::Install::AuthorRequires)
+#BuildRequires: perl(Module::Install::AutoLicense)
 #BuildRequires: perl(Module::Install::Base)
+#BuildRequires: perl(Module::Install::GithubMeta)
+#BuildRequires: perl(Module::Install::ReadmeFromPod)
 #BuildRequires: perl(Parse::CPAN::Meta)
 #BuildRequires: perl(YAML::Tiny)
 %{perl_requires}
@@ -75,6 +78,9 @@
 the Moose manpage. See 'benchmark/method_modifiers.pl' in the the Moose
 manpage distribution.
 
+'Class::Method::Modifiers' also provides an additional "modifier" type,
+'fresh'; see below.
+
 %prep
 %setup -q -n %{cpan_name}-%{version}
 find . -type f -print0 | xargs -0 chmod 644
@@ -93,6 +99,6 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc Changes
+%doc Changes LICENSE README
 
 %changelog

++++++ Class-Method-Modifiers-1.09.tar.gz -> Class-Method-Modifiers-2.04.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/Changes 
new/Class-Method-Modifiers-2.04/Changes
--- old/Class-Method-Modifiers-1.09/Changes     2012-04-03 02:09:22.000000000 
+0200
+++ new/Class-Method-Modifiers-2.04/Changes     2013-03-31 05:16:35.000000000 
+0200
@@ -1,5 +1,30 @@
 Revision history for Class-Method-Modifiers
 
+2.04    2013-03-30
+        Remove erroneous perl 5.8 requirement
+
+2.03    2013-02-02
+        New build to fix missing files in inc/
+
+2.02    2013-02-01
+        Dist improvements (Karen Etheridge)
+
+2.01    2013-01-27
+        Test for and fix $_ corruption (Vladimir Timofeev)
+
+2.00    2012-12-29
+        New 'fresh' modifier (Aaron Crane)
+
+1.12    2012-10-28
+        Another MANIFEST fix
+
+1.11    2012-10-28
+        Re-release with proper distribution contents and MANIFEST
+
+1.10    2012-10-23
+        Avoid "Variable "$..." will not stay shared" warnings under 5.8.x
+        (from changes in 1.09) [#80194] (Karen Etheridge)
+
 1.09    2012-04-02
         Install modified subs in the proper namespace [#74569]
         (Karen Etheridge)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/LICENSE 
new/Class-Method-Modifiers-2.04/LICENSE
--- old/Class-Method-Modifiers-1.09/LICENSE     1970-01-01 01:00:00.000000000 
+0100
+++ new/Class-Method-Modifiers-2.04/LICENSE     2013-03-31 05:19:17.000000000 
+0200
@@ -0,0 +1,379 @@
+This software is copyright (c) 2013 by Shawn M Moore, C<[email protected]>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+   Software Foundation; either version 1, or (at your option) any
+   later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2013 by Shawn M Moore, C<[email protected]>.
+
+This is free software, licensed under:
+
+  The GNU General Public License, Version 1, February 1989
+
+                    GNU GENERAL PUBLIC LICENSE
+                     Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 51 Franklin St, Suite 500, Boston, MA  02110-1335  USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The license agreements of most software companies try to keep users
+at the mercy of those companies.  By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must tell them their rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License.  The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications.  Each
+licensee is addressed as "you".
+
+  1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program.  You may charge a fee for the physical act of
+transferring a copy.
+
+  2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+    a) cause the modified files to carry prominent notices stating that
+    you changed the files and the date of any change; and
+
+    b) cause the whole of any work that you distribute or publish, that
+    in whole or in part contains the Program or any part thereof, either
+    with or without modifications, to be licensed at no charge to all
+    third parties under the terms of this General Public License (except
+    that you may choose to grant warranty protection to some or all
+    third parties, at your option).
+
+    c) If the modified program normally reads commands interactively when
+    run, you must cause it, when started running for such interactive use
+    in the simplest and most usual way, to print or display an
+    announcement including an appropriate copyright notice and a notice
+    that there is no warranty (or else, saying that you provide a
+    warranty) and that users may redistribute the program under these
+    conditions, and telling the user how to view a copy of this General
+    Public License.
+
+    d) You may charge a fee for the physical act of transferring a
+    copy, and you may at your option offer warranty protection in
+    exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+  3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+    a) accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    b) accompany it with a written offer, valid for at least three
+    years, to give any third party free (except for a nominal charge
+    for the cost of distribution) a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    c) accompany it with the information you received as to where the
+    corresponding source code may be obtained.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it.  For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+  4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License.  However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+  5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions.  You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+  7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+  8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+        Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+  To do so, attach the following notices to the program.  It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 1, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 
USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19xx name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  program `Gnomovision' (a program to direct compilers to make passes
+  at assemblers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2013 by Shawn M Moore, C<[email protected]>.
+
+This is free software, licensed under:
+
+  The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+  - "Package" refers to the collection of files distributed by the Copyright
+    Holder, and derivatives of that collection of files created through
+    textual modification. 
+  - "Standard Version" refers to such a Package if it has not been modified,
+    or has been modified in accordance with the wishes of the Copyright
+    Holder. 
+  - "Copyright Holder" is whoever is named in the copyright or copyrights for
+    the package. 
+  - "You" is you, if you're thinking about copying or distributing this 
Package.
+  - "Reasonable copying fee" is whatever you can justify on the basis of media
+    cost, duplication charges, time of people involved, and so on. (You will
+    not be required to justify it to the Copyright Holder, but only to the
+    computing community at large as a market that must bear the fee.) 
+  - "Freely Available" means that no fee is charged for the item itself, though
+    there may be fees involved in handling the item. It also means that
+    recipients of the item may redistribute it under the same conditions they
+    received it. 
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+  a) place your modifications in the Public Domain or otherwise make them
+     Freely Available, such as by posting said modifications to Usenet or an
+     equivalent medium, or placing the modifications on a major archive site
+     such as ftp.uu.net, or by allowing the Copyright Holder to include your
+     modifications in the Standard Version of the Package.
+
+  b) use the modified Package only within your corporation or organization.
+
+  c) rename any non-standard executables so the names do not conflict with
+     standard executables, which must also be provided, and provide a separate
+     manual page for each non-standard executable that clearly documents how it
+     differs from the Standard Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+  a) distribute a Standard Version of the executables and library files,
+     together with instructions (in the manual page or equivalent) on where to
+     get the Standard Version.
+
+  b) accompany the distribution with the machine-readable source of the Package
+     with your modifications.
+
+  c) accompany any non-standard executables with their corresponding Standard
+     Version executables, giving the non-standard executables non-standard
+     names, and clearly documenting the differences in manual pages (or
+     equivalent), together with instructions on where to get the Standard
+     Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/MANIFEST 
new/Class-Method-Modifiers-2.04/MANIFEST
--- old/Class-Method-Modifiers-1.09/MANIFEST    2012-04-03 02:11:41.000000000 
+0200
+++ new/Class-Method-Modifiers-2.04/MANIFEST    2013-03-31 05:19:20.000000000 
+0200
@@ -1,18 +1,23 @@
 Changes
 inc/Module/Install.pm
 inc/Module/Install/AuthorRequires.pm
+inc/Module/Install/AutoLicense.pm
 inc/Module/Install/Base.pm
 inc/Module/Install/Can.pm
 inc/Module/Install/Fetch.pm
 inc/Module/Install/GithubMeta.pm
 inc/Module/Install/Makefile.pm
 inc/Module/Install/Metadata.pm
+inc/Module/Install/ReadmeFromPod.pm
 inc/Module/Install/Win32.pm
 inc/Module/Install/WriteAll.pm
 lib/Class/Method/Modifiers.pm
+LICENSE
 Makefile.PL
 MANIFEST                       This list of files
+MANIFEST.SKIP
 META.yml
+README
 t/000-load.t
 t/001-error.t
 t/002-cache.t
@@ -38,3 +43,7 @@
 t/090-diamond.t
 t/100-class-mop-method-modifiers.t
 t/110-namespace-clean.t
+t/120-fresh.t
+t/130-clean-underscore.t
+t/release-pod-coverage.t
+t/release-pod-syntax.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/MANIFEST.SKIP 
new/Class-Method-Modifiers-2.04/MANIFEST.SKIP
--- old/Class-Method-Modifiers-1.09/MANIFEST.SKIP       1970-01-01 
01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/MANIFEST.SKIP       2012-10-28 
02:27:01.000000000 +0200
@@ -0,0 +1,59 @@
+### from: !perldoc -m ExtUtils::MANIFEST.SKIP (6.62)
+# Avoid version control files.
+\bRCS\b
+\bCVS\b
+\bSCCS\b
+,v$
+\B\.svn\b
+\B\.git\b
+\B\.gitignore\b
+\b_darcs\b
+\B\.cvsignore$
+
+# Avoid VMS specific MakeMaker generated files
+\bDescrip.MMS$
+\bDESCRIP.MMS$
+\bdescrip.mms$
+
+# Avoid Makemaker generated and utility files.
+\bMANIFEST\.bak
+\bMakefile$
+\bblib/
+\bMakeMaker-\d
+\bpm_to_blib\.ts$
+\bpm_to_blib$
+\bblibdirs\.ts$         # 6.18 through 6.25 generated this
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\b_build/
+\bBuild.bat$
+\bBuild.COM$
+\bBUILD.COM$
+\bbuild.com$
+
+# Avoid temp and backup files.
+~$
+\.old$
+\#$
+\b\.#
+\.bak$
+\.tmp$
+\.#
+\.rej$
+\..*\.sw.?$
+
+# Avoid OS-specific files/dirs
+# Mac OSX metadata
+\B\.DS_Store
+# Mac OSX SMB mount metadata files
+\B\._
+
+# Avoid Devel::Cover and Devel::CoverX::Covered files.
+\bcover_db\b
+\bcovered\b
+
+# Avoid MYMETA files
+^MYMETA\.
+
+/Class-Method-Modifiers-*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/META.yml 
new/Class-Method-Modifiers-2.04/META.yml
--- old/Class-Method-Modifiers-1.09/META.yml    2012-04-03 02:09:58.000000000 
+0200
+++ new/Class-Method-Modifiers-2.04/META.yml    2013-03-31 05:19:18.000000000 
+0200
@@ -3,11 +3,11 @@
 author:
   - 'Shawn M Moore, C<[email protected]>'
 build_requires:
-  ExtUtils::MakeMaker: 6.36
+  ExtUtils::MakeMaker: 6.59
   Test::Fatal: 0
   Test::More: 0
 configure_requires:
-  ExtUtils::MakeMaker: 6.36
+  ExtUtils::MakeMaker: 6.59
 distribution_type: module
 dynamic_config: 1
 generated_by: 'Module::Install version 1.06'
@@ -20,11 +20,10 @@
   directory:
     - inc
     - t
+requires:
+  perl: 5.6.0
 resources:
-  homepage: https://github.com/sartak/Class-Method-Modifiers/tree
+  homepage: https://github.com/karenetheridge/Class-Method-Modifiers/tree
   license: http://dev.perl.org/licenses/
-  repository:
-    type: git
-    url: git://github.com/sartak/Class-Method-Modifiers.git
-    web: https://github.com/sartak/Class-Method-Modifiers/tree
-version: 1.09
+  repository: git://github.com/karenetheridge/Class-Method-Modifiers.git
+version: 2.04
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/Makefile.PL 
new/Class-Method-Modifiers-2.04/Makefile.PL
--- old/Class-Method-Modifiers-1.09/Makefile.PL 2012-04-03 02:08:40.000000000 
+0200
+++ new/Class-Method-Modifiers-2.04/Makefile.PL 2013-03-31 05:15:02.000000000 
+0200
@@ -1,11 +1,19 @@
 # Load the Module::Install bundled in ./inc/
 use inc::Module::Install;
+use Module::Install::AuthorRequires;
+use Module::Install::ReadmeFromPod;
+use Module::Install::GithubMeta;
+use Module::Install::AutoLicense;
 
 # Define metadata
 name           'Class-Method-Modifiers';
+perl_version   '5.006';
+readme_from    'lib/Class/Method/Modifiers.pm';
 all_from       'lib/Class/Method/Modifiers.pm';
+auto_license;
 githubmeta;
 
+
 test_requires 'Test::Fatal';
 test_requires 'Test::More';
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/README 
new/Class-Method-Modifiers-2.04/README
--- old/Class-Method-Modifiers-1.09/README      1970-01-01 01:00:00.000000000 
+0100
+++ new/Class-Method-Modifiers-2.04/README      2013-03-31 05:19:17.000000000 
+0200
@@ -0,0 +1,211 @@
+NAME
+    Class::Method::Modifiers - provides Moose-like method modifiers
+
+SYNOPSIS
+        package Child;
+        use parent 'Parent';
+        use Class::Method::Modifiers;
+
+        sub new_method { }
+
+        before 'old_method' => sub {
+            carp "old_method is deprecated, use new_method";
+        };
+
+        around 'other_method' => sub {
+            my $orig = shift;
+            my $ret = $orig->(@_);
+            return $ret =~ /\d/ ? $ret : lc $ret;
+        };
+
+        after 'private', 'protected' => sub {
+            debug "finished calling a dangerous method";
+        };
+
+        use Class::Method::Modifiers qw(fresh);
+
+        fresh 'not_in_hierarchy' => sub {
+            warn "freshly added method\n";
+        };
+
+DESCRIPTION
+    Method modifiers are a convenient feature from the CLOS (Common Lisp
+    Object System) world.
+
+    In its most basic form, a method modifier is just a method that calls
+    "$self->SUPER::foo(@_)". I for one have trouble remembering that exact
+    invocation, so my classes seldom re-dispatch to their base classes. Very
+    bad!
+
+    "Class::Method::Modifiers" provides three modifiers: "before", "around",
+    and "after". "before" and "after" are run just before and after the
+    method they modify, but can not really affect that original method.
+    "around" is run in place of the original method, with a hook to easily
+    call that original method. See the "MODIFIERS" section for more details
+    on how the particular modifiers work.
+
+    One clear benefit of using "Class::Method::Modifiers" is that you can
+    define multiple modifiers in a single namespace. These separate
+    modifiers don't need to know about each other. This makes top-down
+    design easy. Have a base class that provides the skeleton methods of
+    each operation, and have plugins modify those methods to flesh out the
+    specifics.
+
+    Parent classes need not know about "Class::Method::Modifiers". This
+    means you should be able to modify methods in *any* subclass. See
+    Term::VT102::ZeroBased for an example of subclassing with CMM.
+
+    In short, "Class::Method::Modifiers" solves the problem of making sure
+    you call "$self->SUPER::foo(@_)", and provides a cleaner interface for
+    it.
+
+    As of version 1.00, "Class::Method::Modifiers" is faster in some cases
+    than Moose. See "benchmark/method_modifiers.pl" in the Moose
+    distribution.
+
+    "Class::Method::Modifiers" also provides an additional "modifier" type,
+    "fresh"; see below.
+
+MODIFIERS
+  before method(s) => sub { ... }
+    "before" is called before the method it is modifying. Its return value
+    is totally ignored. It receives the same @_ as the the method it is
+    modifying would have received. You can modify the @_ the original method
+    will receive by changing $_[0] and friends (or by changing anything
+    inside a reference). This is a feature!
+
+  after method(s) => sub { ... }
+    "after" is called after the method it is modifying. Its return value is
+    totally ignored. It receives the same @_ as the the method it is
+    modifying received, mostly. The original method can modify @_ (such as
+    by changing $_[0] or references) and "after" will see the modified
+    version. If you don't like this behavior, specify both a "before" and
+    "after", and copy the @_ during "before" for "after" to use.
+
+  around method(s) => sub { ... }
+    "around" is called instead of the method it is modifying. The method
+    you're overriding is passed in as the first argument (called $orig by
+    convention). Watch out for contextual return values of $orig.
+
+    You can use "around" to:
+
+    Pass $orig a different @_
+            around 'method' => sub {
+                my $orig = shift;
+                my $self = shift;
+                $orig->($self, reverse @_);
+            };
+
+    Munge the return value of $orig
+            around 'method' => sub {
+                my $orig = shift;
+                ucfirst $orig->(@_);
+            };
+
+    Avoid calling $orig -- conditionally
+            around 'method' => sub {
+                my $orig = shift;
+                return $orig->(@_) if time() % 2;
+                return "no dice, captain";
+            };
+
+  fresh method(s) => sub { ... };
+    Unlike the other modifiers, this does not modify an existing method.
+    Ordinarily, "fresh" merely installs the coderef as a method in the
+    appropriate class; but if the class hierarchy already contains a method
+    of the same name, an exception is thrown. The idea of this "modifier" is
+    to increase safety when subclassing. Suppose you're writing a subclass
+    of a class Some::Base, and adding a new method:
+
+        package My::SubclassOf::C;
+        use base 'Some::Base';
+
+        sub foo { ... }
+
+    If a later version of Some::Base also adds a new method named "foo",
+    your method will shadow that method. Alternatively, you can use "fresh"
+    to install the additional method into your subclass:
+
+        package My::SubclassOf::C;
+        use base 'Some::Base';
+
+        use Class::Method::Modifiers 'fresh';
+
+        fresh 'foo' => sub { ... };
+
+    Now upgrading Some::Base to a version with a conflicting "foo" method
+    will cause an exception to be thrown; seeing that error will give you
+    the opportunity to fix the problem (perhaps by picking a different
+    method name in your subclass, or similar).
+
+    Creating fresh methods with "install_modifier" (see below) provides a
+    way to get similar safety benefits when adding local monkeypatches to
+    existing classes; see
+    <http://aaroncrane.co.uk/talks/monkey_patching_subclassing/>.
+
+    For API compatibility reasons, this function is exported only when you
+    ask for it specifically, or for ":all".
+
+  install_modifier $package, $type, @names, sub { ... }
+    "install_modifier" is like "before", "after", "around", and "fresh" but
+    it also lets you dynamically select the modifier type ('before',
+    'after', 'around', 'fresh') and package that the method modifiers are
+    installed into. This expert-level function is exported only when you ask
+    for it specifically, or for ":all".
+
+NOTES
+    All three normal modifiers; "before", "after", and "around"; are
+    exported into your namespace by default. You may "use
+    Class::Method::Modifiers ()" to avoid thrashing your namespace. I may
+    steal more features from Moose, namely "super", "override", "inner",
+    "augment", and whatever the Moose folks come up with next.
+
+    Note that the syntax and semantics for these modifiers is directly
+    borrowed from Moose (the implementations, however, are not).
+
+    Class::Trigger shares a few similarities with
+    "Class::Method::Modifiers", and they even have some overlap in purpose
+    -- both can be used to implement highly pluggable applications. The
+    difference is that Class::Trigger provides a mechanism for easily
+    letting parent classes to invoke hooks defined by other code.
+    "Class::Method::Modifiers" provides a way of overriding/augmenting
+    methods safely, and the parent class need not know about it.
+
+CAVEATS
+    It is erroneous to modify a method that doesn't exist in your class's
+    inheritance hierarchy. If this occurs, an exception will be thrown when
+    the modifier is defined.
+
+    It doesn't yet play well with "caller". There are some todo tests for
+    this. Don't get your hopes up though!
+
+VERSION
+    This module was bumped to 1.00 following a complete reimplementation, to
+    indicate breaking backwards compatibility. The "guard" modifier was
+    removed, and the internals are completely different.
+
+    The new version is a few times faster with half the code. It's now even
+    faster than Moose.
+
+    Any code that just used modifiers should not change in behavior, except
+    to become more correct. And, of course, faster. :)
+
+SEE ALSO
+    Class::Method::Modifiers::Fast Moose, Class::Trigger,
+    Class::MOP::Method::Wrapped, MRO::Compat, CLOS
+
+AUTHOR
+    Shawn M Moore, "[email protected]"
+
+ACKNOWLEDGEMENTS
+    Thanks to Stevan Little for Moose, I would never have known about method
+    modifiers otherwise.
+
+    Thanks to Matt Trout and Stevan Little for their advice.
+
+COPYRIGHT AND LICENSE
+    Copyright 2007-2009 Shawn M Moore.
+
+    This program is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Class-Method-Modifiers-1.09/inc/Module/Install/AutoLicense.pm 
new/Class-Method-Modifiers-2.04/inc/Module/Install/AutoLicense.pm
--- old/Class-Method-Modifiers-1.09/inc/Module/Install/AutoLicense.pm   
1970-01-01 01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/inc/Module/Install/AutoLicense.pm   
2013-03-31 05:19:17.000000000 +0200
@@ -0,0 +1,63 @@
+#line 1
+package Module::Install::AutoLicense;
+
+use strict;
+use warnings;
+use base qw(Module::Install::Base);
+use vars qw($VERSION);
+
+$VERSION = '0.08';
+
+my %licenses = (
+    perl         => 'Software::License::Perl_5',
+    apache       => 'Software::License::Apache_2_0',
+    artistic     => 'Software::License::Artistic_1_0',
+    artistic_2   => 'Software::License::Artistic_2_0',
+    lgpl2        => 'Software::License::LGPL_2_1',
+    lgpl3        => 'Software::License::LGPL_3_0',
+    bsd          => 'Software::License::BSD',
+    gpl          => 'Software::License::GPL_1',
+    gpl2         => 'Software::License::GPL_2',
+    gpl3         => 'Software::License::GPL_3',
+    mit          => 'Software::License::MIT',
+    mozilla      => 'Software::License::Mozilla_1_1',
+);
+
+sub auto_license {
+  my $self = shift;
+  return unless $Module::Install::AUTHOR;
+  my %opts = @_;
+  $opts{lc $_} = delete $opts{$_} for keys %opts;
+  my $holder = $opts{holder} || _get_authors( $self );
+  #my $holder = $opts{holder} || $self->author;
+  my $license = $self->license();
+  unless ( defined $licenses{ $license } ) {
+     warn "No license definition for '$license', aborting\n";
+     return 1;
+  }
+  my $class = $licenses{ $license };
+  eval "require $class";
+  my $sl = $class->new( { holder => $holder } );
+  open LICENSE, '>LICENSE' or die "$!\n";
+  print LICENSE $sl->fulltext;
+  close LICENSE;
+  $self->postamble(<<"END");
+distclean :: license_clean
+
+license_clean:
+\t\$(RM_F) LICENSE
+END
+
+  return 1;
+}
+
+sub _get_authors {
+  my $self = shift;
+  my $joined = join ', ', @{ $self->author() || [] };
+  return $joined;
+}
+
+'Licensed to auto';
+__END__
+
+#line 125
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Class-Method-Modifiers-1.09/inc/Module/Install/GithubMeta.pm 
new/Class-Method-Modifiers-2.04/inc/Module/Install/GithubMeta.pm
--- old/Class-Method-Modifiers-1.09/inc/Module/Install/GithubMeta.pm    
2012-04-03 02:09:57.000000000 +0200
+++ new/Class-Method-Modifiers-2.04/inc/Module/Install/GithubMeta.pm    
2013-03-31 05:19:17.000000000 +0200
@@ -7,7 +7,7 @@
 use base qw(Module::Install::Base);
 use vars qw($VERSION);
 
-$VERSION = '0.16';
+$VERSION = '0.22';
 
 sub githubmeta {
   my $self = shift;
@@ -21,13 +21,7 @@
   $git_url =~ s![\w\-]+\@([^:]+):!git://$1/!;
   $http_url =~ s![\w\-]+\@([^:]+):!https://$1/!;
   $http_url =~ s!\.git$!/tree!;
-  $self->repository(
-      {
-          type => 'git',
-          url  => $git_url,
-          web  => $http_url,
-      },
-  );
+  $self->repository( $git_url );
   $self->homepage( $http_url ) unless $self->homepage();
   return 1;
 }
@@ -54,4 +48,4 @@
 'Github';
 __END__
 
-#line 117
+#line 111
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Class-Method-Modifiers-1.09/inc/Module/Install/ReadmeFromPod.pm 
new/Class-Method-Modifiers-2.04/inc/Module/Install/ReadmeFromPod.pm
--- old/Class-Method-Modifiers-1.09/inc/Module/Install/ReadmeFromPod.pm 
1970-01-01 01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/inc/Module/Install/ReadmeFromPod.pm 
2013-03-31 05:19:17.000000000 +0200
@@ -0,0 +1,138 @@
+#line 1
+package Module::Install::ReadmeFromPod;
+
+use 5.006;
+use strict;
+use warnings;
+use base qw(Module::Install::Base);
+use vars qw($VERSION);
+
+$VERSION = '0.20';
+
+sub readme_from {
+  my $self = shift;
+  return unless $self->is_admin;
+
+  # Input file
+  my $in_file  = shift || $self->_all_from
+    or die "Can't determine file to make readme_from";
+
+  # Get optional arguments
+  my ($clean, $format, $out_file, $options);
+  my $args = shift;
+  if ( ref $args ) {
+    # Arguments are in a hashref
+    if ( ref($args) ne 'HASH' ) {
+      die "Expected a hashref but got a ".ref($args)."\n";
+    } else {
+      $clean    = $args->{'clean'};
+      $format   = $args->{'format'};
+      $out_file = $args->{'output_file'};
+      $options  = $args->{'options'};
+    }
+  } else {
+    # Arguments are in a list
+    $clean    = $args;
+    $format   = shift;
+    $out_file = shift;
+    $options  = \@_;
+  }
+
+  # Default values;
+  $clean  ||= 0;
+  $format ||= 'txt';
+
+  # Generate README
+  print "readme_from $in_file to $format\n";
+  if ($format =~ m/te?xt/) {
+    $out_file = $self->_readme_txt($in_file, $out_file, $options);
+  } elsif ($format =~ m/html?/) {
+    $out_file = $self->_readme_htm($in_file, $out_file, $options);
+  } elsif ($format eq 'man') {
+    $out_file = $self->_readme_man($in_file, $out_file, $options);
+  } elsif ($format eq 'pdf') {
+    $out_file = $self->_readme_pdf($in_file, $out_file, $options);
+  }
+
+  if ($clean) {
+    $self->clean_files($out_file);
+  }
+
+  return 1;
+}
+
+
+sub _readme_txt {
+  my ($self, $in_file, $out_file, $options) = @_;
+  $out_file ||= 'README';
+  require Pod::Text;
+  my $parser = Pod::Text->new( @$options );
+  open my $out_fh, '>', $out_file or die "Could not write file 
$out_file:\n$!\n";
+  $parser->output_fh( *$out_fh );
+  $parser->parse_file( $in_file );
+  close $out_fh;
+  return $out_file;
+}
+
+
+sub _readme_htm {
+  my ($self, $in_file, $out_file, $options) = @_;
+  $out_file ||= 'README.htm';
+  require Pod::Html;
+  Pod::Html::pod2html(
+    "--infile=$in_file",
+    "--outfile=$out_file",
+    @$options,
+  );
+  # Remove temporary files if needed
+  for my $file ('pod2htmd.tmp', 'pod2htmi.tmp') {
+    if (-e $file) {
+      unlink $file or warn "Warning: Could not remove file '$file'.\n$!\n";
+    }
+  }
+  return $out_file;
+}
+
+
+sub _readme_man {
+  my ($self, $in_file, $out_file, $options) = @_;
+  $out_file ||= 'README.1';
+  require Pod::Man;
+  my $parser = Pod::Man->new( @$options );
+  $parser->parse_from_file($in_file, $out_file);
+  return $out_file;
+}
+
+
+sub _readme_pdf {
+  my ($self, $in_file, $out_file, $options) = @_;
+  $out_file ||= 'README.pdf';
+  eval { require App::pod2pdf; }
+    or die "Could not generate $out_file because pod2pdf could not be found\n";
+  my $parser = App::pod2pdf->new( @$options );
+  $parser->parse_from_file($in_file);
+  open my $out_fh, '>', $out_file or die "Could not write file 
$out_file:\n$!\n";
+  select $out_fh;
+  $parser->output;
+  select STDOUT;
+  close $out_fh;
+  return $out_file;
+}
+
+
+sub _all_from {
+  my $self = shift;
+  return unless $self->admin->{extensions};
+  my ($metadata) = grep {
+    ref($_) eq 'Module::Install::Metadata';
+  } @{$self->admin->{extensions}};
+  return unless $metadata;
+  return $metadata->{values}{all_from} || '';
+}
+
+'Readme!';
+
+__END__
+
+#line 254
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Class-Method-Modifiers-1.09/lib/Class/Method/Modifiers.pm 
new/Class-Method-Modifiers-2.04/lib/Class/Method/Modifiers.pm
--- old/Class-Method-Modifiers-1.09/lib/Class/Method/Modifiers.pm       
2012-04-03 02:09:05.000000000 +0200
+++ new/Class-Method-Modifiers-2.04/lib/Class/Method/Modifiers.pm       
2013-03-31 05:16:07.000000000 +0200
@@ -2,11 +2,11 @@
 use strict;
 use warnings;
 
-our $VERSION = '1.09';
+our $VERSION = '2.04';
 
 use base 'Exporter';
 our @EXPORT = qw(before after around);
-our @EXPORT_OK = (@EXPORT, 'install_modifier');
+our @EXPORT_OK = (@EXPORT, qw(fresh install_modifier));
 our %EXPORT_TAGS = (
     moose => [qw(before after around)],
     all   => \@EXPORT_OK,
@@ -26,6 +26,8 @@
 
     @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
 
+    return _fresh($into, $code, @names) if $type eq 'fresh';
+
     for my $name (@names) {
         my $hit = $into->can($name) or do {
             require Carp;
@@ -91,7 +93,13 @@
             $generated .= "sub $name {";
 
             # before is easy, it doesn't affect the return value(s)
-            $generated .= '$_->(@_) for @$before;' if @$before;
+            if (@$before) {
+                $generated .= '
+                    for my $method (@$before) {
+                        $method->(@_);
+                    }
+                ';
+            }
 
             if (@$after) {
                 $generated .= '
@@ -106,7 +114,9 @@
                         $$wrapped->(@_);
                     }
 
-                    $_->(@_) for @$after;
+                    for my $method (@$after) {
+                        $method->(@_);
+                    }
 
                     return wantarray ? @ret : $ret[0];
                 ';
@@ -119,6 +129,7 @@
 
             no strict 'refs';
             no warnings 'redefine';
+            no warnings 'closure';
             eval $generated;
         };
     }
@@ -136,6 +147,55 @@
     _install_modifier(scalar(caller), 'around', @_);
 }
 
+sub fresh {
+    my $code = pop;
+    my @names = @_;
+
+    @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
+
+    _fresh(scalar(caller), $code, @names);
+}
+
+sub _fresh {
+    my ($into, $code, @names) = @_;
+
+    for my $name (@names) {
+        if ($name !~ /\A [a-zA-Z_] [a-zA-Z0-9_]* \z/xms) {
+            require Carp;
+            Carp::confess("Invalid method name '$name'");
+        }
+        if ($into->can($name)) {
+            require Carp;
+            Carp::confess("Class $into already has a method named '$name'");
+        }
+
+        # We need to make sure that the installed method has its CvNAME in
+        # the appropriate package; otherwise, it would be subject to
+        # deletion if callers use namespace::autoclean.  If $code was
+        # compiled in the target package, we can just install it directly;
+        # otherwise, we'll need a different approach.  Using Sub::Name would
+        # be fine in all cases, at the cost of introducing a dependency on
+        # an XS-using, non-core module.  So instead we'll use string-eval to
+        # create a new subroutine that wraps $code.
+        if (_is_in_package($code, $into)) {
+            no strict 'refs';
+            *{"$into\::$name"} = $code;
+        }
+        else {
+            my $body = 'my $self = shift; $self->$code(@_)';
+            no warnings 'closure'; # for 5.8.x
+            eval "package $into; sub $name { $body }";
+        }
+    }
+}
+
+sub _is_in_package {
+    my ($coderef, $package) = @_;
+    require B;
+    my $cv = B::svref_2object($coderef);
+    return $cv->GV->STASH->NAME eq $package;
+}
+
 1;
 
 __END__
@@ -166,6 +226,12 @@
         debug "finished calling a dangerous method";
     };
 
+    use Class::Method::Modifiers qw(fresh);
+
+    fresh 'not_in_hierarchy' => sub {
+        warn "freshly added method\n";
+    };
+
 
 =head1 DESCRIPTION
 
@@ -199,6 +265,9 @@
 As of version 1.00, C<Class::Method::Modifiers> is faster in some cases than
 L<Moose>. See C<benchmark/method_modifiers.pl> in the L<Moose> distribution.
 
+C<Class::Method::Modifiers> also provides an additional "modifier" type,
+C<fresh>; see below.
+
 =head1 MODIFIERS
 
 =head2 before method(s) => sub { ... }
@@ -253,10 +322,48 @@
 
 =back
 
+=head2 fresh method(s) => sub { ... };
+
+Unlike the other modifiers, this does not modify an existing method.
+Ordinarily, C<fresh> merely installs the coderef as a method in the
+appropriate class; but if the class hierarchy already contains a method of
+the same name, an exception is thrown.  The idea of this "modifier" is to
+increase safety when subclassing.  Suppose you're writing a subclass of a
+class Some::Base, and adding a new method:
+
+    package My::SubclassOf::C;
+    use base 'Some::Base';
+
+    sub foo { ... }
+
+If a later version of Some::Base also adds a new method named C<foo>, your
+method will shadow that method.  Alternatively, you can use C<fresh>
+to install the additional method into your subclass:
+
+    package My::SubclassOf::C;
+    use base 'Some::Base';
+
+    use Class::Method::Modifiers 'fresh';
+
+    fresh 'foo' => sub { ... };
+
+Now upgrading Some::Base to a version with a conflicting C<foo> method will
+cause an exception to be thrown; seeing that error will give you the
+opportunity to fix the problem (perhaps by picking a different method name
+in your subclass, or similar).
+
+Creating fresh methods with C<install_modifier> (see below) provides a way
+to get similar safety benefits when adding local monkeypatches to existing
+classes; see L<http://aaroncrane.co.uk/talks/monkey_patching_subclassing/>.
+
+For API compatibility reasons, this function is exported only when you ask
+for it specifically, or for C<:all>.
+
 =head2 install_modifier $package, $type, @names, sub { ... }
 
-C<install_modifier> is like C<before>, C<after>, and C<around> but it also
-lets you dynamically select the modifier type ('before', 'after', 'around')
+C<install_modifier> is like C<before>, C<after>, C<around>, and C<fresh> but
+it also lets you dynamically select the modifier type ('before', 'after',
+'around', 'fresh')
 and package that the method modifiers are installed into. This expert-level
 function is exported only when you ask for it specifically, or for C<:all>.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/t/110-namespace-clean.t 
new/Class-Method-Modifiers-2.04/t/110-namespace-clean.t
--- old/Class-Method-Modifiers-1.09/t/110-namespace-clean.t     2012-04-03 
02:07:47.000000000 +0200
+++ new/Class-Method-Modifiers-2.04/t/110-namespace-clean.t     2013-03-31 
05:15:02.000000000 +0200
@@ -5,7 +5,7 @@
 
 BEGIN {
     eval "require Class::MOP"
-        or plan skip_all => $!;
+        or plan skip_all => 'Test requires Class::MOP';
 }
 
 # code for this sub is taken directly from
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/t/120-fresh.t 
new/Class-Method-Modifiers-2.04/t/120-fresh.t
--- old/Class-Method-Modifiers-1.09/t/120-fresh.t       1970-01-01 
01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/t/120-fresh.t       2012-12-29 
19:59:01.000000000 +0100
@@ -0,0 +1,89 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 12;
+use Test::Fatal;
+
+use B 'svref_2object';
+
+BEGIN {
+    package P1;
+    sub new { bless {}, shift }
+    sub m1 { 'P1/m1' }
+
+    package P2;
+    our @ISA = 'P1';
+    use Class::Method::Modifiers 'fresh';
+
+    sub m6 { 'P2/m6' }
+
+    fresh m2 => sub { 'P2/m2' };
+
+    fresh [qw(m3 m4)] => sub { 'P2/m3/m4' };
+
+    my $closee = 'closee';
+    fresh m5 => sub { "P2/m5/$closee" };
+}
+
+BEGIN {
+    package P3;                 # like P2, but using install_modifier
+    our @ISA = 'P1';
+
+    sub m6 { 'P3/m6' }
+
+    package main;
+    use Class::Method::Modifiers 'install_modifier';
+
+    install_modifier P3 => fresh =>     m2      => sub { 'P3/m2' };
+    install_modifier P3 => fresh => [qw(m3 m4)] => sub { 'P3/m3/m4' };
+
+    my $closee = 'closee';
+    install_modifier P3 => fresh =>     m5      => sub { "P3/m5/$closee" };
+}
+
+can_ok(P2->new, @$_) for [
+    qw(m2),                     # single-name call to fresh
+    qw(m3 m4),                  # multi-name call
+    qw(m5),                     # code ref is closure
+];
+
+is(P2->new->m5, 'P2/m5/closee', 'closure works');
+
+can_ok(P3->new, qw(m2 m3 m4 m5));
+is(P3->new->m5, 'P3/m5/closee', 'closure works with install_modifier');
+
+for my $class (qw(P2 P3)) {
+    my $method = $class->can('m5');
+    is(svref_2object($method)->GV->STASH->NAME, $class,
+       "method installed in $class has correct stash name");
+}
+
+{
+    package P2;
+
+    ::like(::exception { fresh m1 => sub {} },
+           qr/^Class P2 already has a method named 'm1'/,
+           'fresh: exception when inherited method exists');
+
+    ::like(::exception { fresh m6 => sub {} },
+           qr/^Class P2 already has a method named 'm6'/,
+           'fresh: exception when local method exists');
+
+    ::like(::exception { fresh '=:=' => sub {} },
+           qr/^Invalid method name '=:='/,
+           'fresh: exception when name invalid');
+}
+
+like(exception { install_modifier P3 => fresh => m1 => sub {} },
+     qr/^Class P3 already has a method named 'm1'/,
+     'install_modifier: exception when inherited method exists');
+
+like(exception { install_modifier P3 => fresh => m6 => sub {} },
+     qr/^Class P3 already has a method named 'm6'/,
+     'install_modifier: exception when local method exists');
+
+like(exception { install_modifier P3 => fresh => '=:=' => sub {} },
+     qr/^Invalid method name '=:='/,
+     'install_modifier: exception when name invalid');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/t/130-clean-underscore.t 
new/Class-Method-Modifiers-2.04/t/130-clean-underscore.t
--- old/Class-Method-Modifiers-1.09/t/130-clean-underscore.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/t/130-clean-underscore.t    2013-01-27 
21:18:53.000000000 +0100
@@ -0,0 +1,90 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 6;
+
+my @calls;
+
+do {
+    package Parent;
+
+    sub original {
+        $_ = "danger";
+        push @calls, 'Parent::original';
+    }
+};
+
+do {
+    package Child::Before;
+    use Class::Method::Modifiers;
+    BEGIN { our @ISA = 'Parent' }
+
+    before original => sub {
+        $_ = "danger";
+        push @calls, 'Child::Before::original';
+    };
+};
+
+Child::Before->original;
+is_deeply([splice @calls], [
+    'Child::Before::original',
+    'Parent::original',
+]);
+
+Child::Before->original;
+is_deeply([splice @calls], [
+    'Child::Before::original',
+    'Parent::original',
+]);
+
+do {
+    package Child::After;
+    use Class::Method::Modifiers;
+    BEGIN { our @ISA = 'Parent' }
+
+    after original => sub {
+        $_ = "danger";
+        push @calls, 'Child::After::original';
+    };
+};
+
+Child::After->original;
+is_deeply([splice @calls], [
+    'Parent::original',
+    'Child::After::original',
+]);
+
+Child::After->original;
+is_deeply([splice @calls], [
+    'Parent::original',
+    'Child::After::original',
+]);
+
+do {
+    package Child::Around;
+    use Class::Method::Modifiers;
+    BEGIN { our @ISA = 'Parent' }
+
+    around original => sub {
+        my $orig = shift;
+        $_ = "danger";
+        push @calls, 'Child::Around::original(before)';
+        $orig->(@_);
+        $_ = "danger";
+        push @calls, 'Child::Around::original(after)';
+    };
+};
+
+Child::Around->original;
+is_deeply([splice @calls], [
+    'Child::Around::original(before)',
+    'Parent::original',
+    'Child::Around::original(after)',
+]);
+
+Child::Around->original;
+is_deeply([splice @calls], [
+    'Child::Around::original(before)',
+    'Parent::original',
+    'Child::Around::original(after)',
+]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/t/release-pod-coverage.t 
new/Class-Method-Modifiers-2.04/t/release-pod-coverage.t
--- old/Class-Method-Modifiers-1.09/t/release-pod-coverage.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/t/release-pod-coverage.t    2013-01-27 
21:18:54.000000000 +0100
@@ -0,0 +1,19 @@
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN {
+  unless ($ENV{RELEASE_TESTING}) {
+    plan skip_all => 'these tests are for release candidate testing';
+  }
+}
+
+eval "use Test::Pod::Coverage 1.08";
+plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD coverage"
+  if $@;
+
+eval "use Pod::Coverage::TrustPod";
+plan skip_all => "Pod::Coverage::TrustPod required for testing POD coverage"
+  if $@;
+
+all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Class-Method-Modifiers-1.09/t/release-pod-syntax.t 
new/Class-Method-Modifiers-2.04/t/release-pod-syntax.t
--- old/Class-Method-Modifiers-1.09/t/release-pod-syntax.t      1970-01-01 
01:00:00.000000000 +0100
+++ new/Class-Method-Modifiers-2.04/t/release-pod-syntax.t      2013-01-27 
21:18:54.000000000 +0100
@@ -0,0 +1,14 @@
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN {
+  unless ($ENV{RELEASE_TESTING}) {
+    plan skip_all => 'these tests are for release candidate testing';
+  }
+}
+
+eval "use Test::Pod 1.41";
+plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+
+all_pod_files_ok();

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to