@@ -1,6 +1,11 @@
Revision history for String-Formatter
+0.102084 2013-11-08 22:30:46 America/New_York
+ - typo fixes
+ - update repo and bugtracker links
+
0.102082 2010-10-19 14:34:34 America/New_York
+ add missing prereq for Test::More
0.102081 2010-10-17 13:40:26 America/New_York
allow subclasses to provide default_codes
@@ -1,265 +1,345 @@
-This software is Copyright (c) 2010 by Ricardo Signes <rjbs@cpan.org>.
+This software is Copyright (c) 2013 by Ricardo Signes <rjbs@cpan.org>.
This is free software, licensed under:
The GNU General Public License, Version 2, June 1991
-The General Public License (GPL)
-Version 2, June 1991
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
-Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
-verbatim copies of this license document, but changing it is not allowed.
+ Copyright (C) 1989, 1991 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
+ Preamble
-The licenses for most software are designed to take away your freedom to share
-and change it. By contrast, the GNU 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. This General Public License applies to most
-of the Free Software Foundation's software and to any other program whose
-authors commit to using it. (Some other Free Software Foundation software is
-covered by the GNU Library General Public License instead.) You can apply it to
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU 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. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you have the freedom to
-distribute copies of free software (and charge for this service if you wish),
-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 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 show them
-these terms so they know 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.
-
-Finally, any free program is threatened constantly by software patents. We wish
-to avoid the danger that redistributors of a free program will individually
-obtain patent licenses, in effect making the program proprietary. To prevent
-this, we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-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 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
-derivative work under copyright law: that is to say, a work containing the
-Program or a portion of it, either verbatim or with modifications and/or
-translated into another language. (Hereinafter, translation is included without
-limitation in the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not covered by
-this License; they are outside its scope. The act of running the Program is not
-restricted, and the output from the Program is covered only if its contents
-constitute a work based on the Program (independent of having been made by
-running the Program). Whether that is true depends on what the Program does.
-
-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 License
-and to the absence of any warranty; and give any other recipients of the
-Program a copy of this License along with the Program.
-
-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.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus
-forming a work based on the Program, and copy and distribute such modifications
-or work under the terms of Section 1 above, provided that you also meet all of
-these conditions:
-
-a) You must cause the modified files to carry prominent notices stating that
-you changed the files and the date of any change.
-
-b) You must cause any work that you distribute or publish, that in whole or in
-part contains or is derived from the Program or any part thereof, to be
-licensed as a whole at no charge to all third parties under the terms of this
-License.
-
-c) If the modified program normally reads commands interactively when run, you
-must cause it, when started running for such interactive use in the most
-ordinary 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 License.
-(Exception: if the Program itself is interactive but does not normally print
-such an announcement, your work based on the Program is not required to print
-an announcement.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Program, and can be reasonably
-considered independent and separate works in themselves, then this License, and
-its terms, do not apply to those sections when you distribute them as separate
-works. But when you distribute the same sections as part of a whole which is a
-work based on the Program, the distribution of the whole must be on the terms
-of this License, whose permissions for other licensees extend to the entire
-whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Program.
-
-In addition, mere aggregation of another work not based on the Program with the
-Program (or with a work based on the Program) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-
-3. You may copy and distribute the Program (or a work based on it, under
-Section 2) in object code or executable form under the terms of Sections 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 Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least three years, to give
-any third party, for a charge no more than your cost of physically performing
-source distribution, a complete machine-readable copy of the corresponding
-source code, to be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange; or,
-
-c) Accompany it with the information you received as to the offer to distribute
-corresponding source code. (This alternative is allowed only for noncommercial
-distribution and only if you received the program in object code or executable
-form with such an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for making
-modifications to it. For an executable work, complete source code means all the
-source code for all modules it contains, plus any associated interface
-definition files, plus the scripts used to control compilation and installation
-of the executable. However, as a special exception, the source code distributed
-need not include anything that is normally distributed (in either source or
-binary form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component itself
-accompanies the executable.
-
-If distribution of executable or object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the source
-code from the same place counts as distribution of the source code, even though
-third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as
-expressly provided under this License. Any attempt otherwise to copy, modify,
-sublicense or distribute the Program is void, and will automatically terminate
-your rights under this License. However, parties who have received copies, or
-rights, from you under this License will not have their licenses terminated so
-long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it.
-However, nothing else grants you permission to modify or distribute the Program
-or its derivative works. These actions are prohibited by law if you do not
-accept this License. Therefore, by modifying or distributing 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 for copying, distributing or modifying
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), 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 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 show them these terms so they know 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.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ 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 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 derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 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 License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary 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
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 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 Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing 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 for copying, distributing or modifying
the Program or works based on it.
-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. You are not responsible for enforcing compliance by
-third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues), conditions
-are imposed on you (whether by court order, agreement or otherwise) that
-contradict the conditions of this License, they do not excuse you from the
-conditions of this License. If you cannot distribute so as to satisfy
-simultaneously your obligations under this License and any other pertinent
-obligations, then as a consequence you may not distribute the Program at all.
-For example, if a patent license would not permit royalty-free redistribution
-of the Program by all those who receive copies directly or indirectly through
-you, then the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or
-other property right claims or to contest validity of any such claims; this
-section has the sole purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license practices. Many
-people have made generous contributions to the wide range of software
-distributed through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an explicit
-geographical distribution limitation excluding those countries, so that
-distribution is permitted only in or among countries not thus excluded. In such
-case, this License incorporates the limitation as if written in the body of
+ 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.
+You are not responsible for enforcing compliance by third parties to
this License.
-9. 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 this 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 this License, you may choose
-any version ever published by the Free Software Foundation.
-
-10. 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
-
-11. 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.
-
-12. 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
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. 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 this 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
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. 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
+
+ 11. 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.
+
+ 12. 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
+
+ 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 the public, 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) <year> <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 2 of the License, 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) year 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 is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
@@ -9,9 +9,11 @@ bench.pl
dist.ini
lib/String/Formatter.pm
lib/String/Formatter/Cookbook.pm
+t/000-report-versions-tiny.t
t/basic.t
t/braces.t
t/method.t
t/params.t
-t/release-pod-syntax.t
t/stringf.t
+xt/release/changes_has_content.t
+xt/release/pod-syntax.t
@@ -5,7 +5,7 @@
"Darren Chamberlain <darren@cpan.org>"
],
"dynamic_config" : 0,
- "generated_by" : "Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.102400",
+ "generated_by" : "Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.132830",
"license" : [
"gpl_2"
],
@@ -17,194 +17,265 @@
"prereqs" : {
"configure" : {
"requires" : {
- "ExtUtils::MakeMaker" : "6.31"
+ "ExtUtils::MakeMaker" : "6.30"
+ }
+ },
+ "develop" : {
+ "requires" : {
+ "Test::Pod" : "1.41",
+ "version" : "0.9901"
}
},
"runtime" : {
"requires" : {
- "Params::Util" : 0,
- "Sub::Exporter" : 0,
- "perl" : "5.006"
+ "Params::Util" : "0",
+ "Sub::Exporter" : "0",
+ "perl" : "5.006",
+ "strict" : "0",
+ "warnings" : "0"
}
},
"test" : {
"requires" : {
- "Test::More" : "0.88"
+ "Test::More" : "0.96"
}
}
},
"release_status" : "stable",
"resources" : {
+ "bugtracker" : {
+ "web" : "https://github.com/rjbs/String-Formatter/issues"
+ },
+ "homepage" : "https://github.com/rjbs/String-Formatter",
"repository" : {
"type" : "git",
- "url" : "git://git.codesimply.com/String-Formatter.git"
+ "url" : "https://github.com/rjbs/String-Formatter.git",
+ "web" : "https://github.com/rjbs/String-Formatter"
}
},
- "version" : "0.102082",
+ "version" : "0.102084",
"x_Dist_Zilla" : {
+ "perl" : {
+ "version" : "5.019005"
+ },
"plugins" : [
{
- "class" : "Dist::Zilla::Plugin::GatherDir",
- "name" : "@RJBS/@Basic/GatherDir",
- "version" : "4.102342"
+ "class" : "Dist::Zilla::Plugin::Git::GatherDir",
+ "name" : "@RJBS/Git::GatherDir",
+ "version" : "2.017"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed",
+ "name" : "@RJBS/CheckPrereqsIndexed",
+ "version" : "0.009"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::CheckExtraTests",
+ "name" : "@RJBS/CheckExtraTests",
+ "version" : "0.015"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "name" : "@RJBS/RJBS-Outdated",
+ "version" : "0.009"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::PromptIfStale",
+ "name" : "@RJBS/CPAN-Outdated",
+ "version" : "0.009"
},
{
"class" : "Dist::Zilla::Plugin::PruneCruft",
- "name" : "@RJBS/@Basic/PruneCruft",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/PruneCruft",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::ManifestSkip",
- "name" : "@RJBS/@Basic/ManifestSkip",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/ManifestSkip",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::MetaYAML",
- "name" : "@RJBS/@Basic/MetaYAML",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/MetaYAML",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::License",
- "name" : "@RJBS/@Basic/License",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/License",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::Readme",
- "name" : "@RJBS/@Basic/Readme",
- "version" : "4.102342"
- },
- {
- "class" : "Dist::Zilla::Plugin::ExtraTests",
- "name" : "@RJBS/@Basic/ExtraTests",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/Readme",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::ExecDir",
- "name" : "@RJBS/@Basic/ExecDir",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/ExecDir",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::ShareDir",
- "name" : "@RJBS/@Basic/ShareDir",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/ShareDir",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::MakeMaker",
- "name" : "@RJBS/@Basic/MakeMaker",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/MakeMaker",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::Manifest",
- "name" : "@RJBS/@Basic/Manifest",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/Manifest",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::TestRelease",
- "name" : "@RJBS/@Basic/TestRelease",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/TestRelease",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::ConfirmRelease",
- "name" : "@RJBS/@Basic/ConfirmRelease",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/ConfirmRelease",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::UploadToCPAN",
- "name" : "@RJBS/@Basic/UploadToCPAN",
- "version" : "4.102342"
+ "name" : "@RJBS/@Filter/UploadToCPAN",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::AutoPrereqs",
"name" : "@RJBS/AutoPrereqs",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::Git::NextVersion",
"name" : "@RJBS/Git::NextVersion",
- "version" : "1.102810"
+ "version" : "2.017"
},
{
"class" : "Dist::Zilla::Plugin::PkgVersion",
"name" : "@RJBS/PkgVersion",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::MetaConfig",
"name" : "@RJBS/MetaConfig",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::MetaJSON",
"name" : "@RJBS/MetaJSON",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::NextRelease",
"name" : "@RJBS/NextRelease",
- "version" : "4.102342"
+ "version" : "5.006"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Test::ChangesHasContent",
+ "name" : "@RJBS/Test::ChangesHasContent",
+ "version" : "0.006"
},
{
"class" : "Dist::Zilla::Plugin::PodSyntaxTests",
"name" : "@RJBS/PodSyntaxTests",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
- "class" : "Dist::Zilla::Plugin::Repository",
- "name" : "@RJBS/Repository",
- "version" : "0.14"
+ "class" : "Dist::Zilla::Plugin::ReportVersions::Tiny",
+ "name" : "@RJBS/ReportVersions::Tiny",
+ "version" : "1.10"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::Prereqs",
+ "config" : {
+ "Dist::Zilla::Plugin::Prereqs" : {
+ "phase" : "test",
+ "type" : "requires"
+ }
+ },
+ "name" : "@RJBS/TestMoreWithSubtests",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::PodWeaver",
+ "config" : {
+ "Dist::Zilla::Plugin::PodWeaver" : {
+ "config_plugin" : "@RJBS",
+ "finder" : [
+ ":InstallModules",
+ ":ExecFiles"
+ ]
+ }
+ },
"name" : "@RJBS/PodWeaver",
- "version" : "3.101641"
+ "version" : "4.001"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::GithubMeta",
+ "name" : "@RJBS/GithubMeta",
+ "version" : "0.42"
},
{
"class" : "Dist::Zilla::Plugin::Git::Check",
"name" : "@RJBS/@Git/Check",
- "version" : "1.102810"
+ "version" : "2.017"
},
{
"class" : "Dist::Zilla::Plugin::Git::Commit",
"name" : "@RJBS/@Git/Commit",
- "version" : "1.102810"
+ "version" : "2.017"
},
{
"class" : "Dist::Zilla::Plugin::Git::Tag",
"name" : "@RJBS/@Git/Tag",
- "version" : "1.102810"
+ "version" : "2.017"
},
{
"class" : "Dist::Zilla::Plugin::Git::Push",
"name" : "@RJBS/@Git/Push",
- "version" : "1.102810"
+ "version" : "2.017"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":InstallModules",
- "version" : "4.102342"
+ "version" : "5.006"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":IncModules",
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":TestFiles",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ExecFiles",
- "version" : "4.102342"
+ "version" : "5.006"
},
{
"class" : "Dist::Zilla::Plugin::FinderCode",
"name" : ":ShareFiles",
- "version" : "4.102342"
+ "version" : "5.006"
+ },
+ {
+ "class" : "Dist::Zilla::Plugin::FinderCode",
+ "name" : ":MainModule",
+ "version" : "5.006"
}
],
"zilla" : {
"class" : "Dist::Zilla::Dist::Builder",
"config" : {
- "is_trial" : 0
+ "is_trial" : "0"
},
- "version" : "4.102342"
+ "version" : "5.006"
}
}
}
@@ -4,11 +4,11 @@ author:
- 'Ricardo Signes <rjbs@cpan.org>'
- 'Darren Chamberlain <darren@cpan.org>'
build_requires:
- Test::More: 0.88
+ Test::More: 0.96
configure_requires:
- ExtUtils::MakeMaker: 6.31
+ ExtUtils::MakeMaker: 6.30
dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.102400'
+generated_by: 'Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.132830'
license: gpl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -18,137 +18,185 @@ requires:
Params::Util: 0
Sub::Exporter: 0
perl: 5.006
+ strict: 0
+ warnings: 0
resources:
- repository: git://git.codesimply.com/String-Formatter.git
-version: 0.102082
+ bugtracker: https://github.com/rjbs/String-Formatter/issues
+ homepage: https://github.com/rjbs/String-Formatter
+ repository: https://github.com/rjbs/String-Formatter.git
+version: 0.102084
x_Dist_Zilla:
+ perl:
+ version: 5.019005
plugins:
-
- class: Dist::Zilla::Plugin::GatherDir
- name: '@RJBS/@Basic/GatherDir'
- version: 4.102342
+ class: Dist::Zilla::Plugin::Git::GatherDir
+ name: '@RJBS/Git::GatherDir'
+ version: 2.017
+ -
+ class: Dist::Zilla::Plugin::CheckPrereqsIndexed
+ name: '@RJBS/CheckPrereqsIndexed'
+ version: 0.009
+ -
+ class: Dist::Zilla::Plugin::CheckExtraTests
+ name: '@RJBS/CheckExtraTests'
+ version: 0.015
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ name: '@RJBS/RJBS-Outdated'
+ version: 0.009
+ -
+ class: Dist::Zilla::Plugin::PromptIfStale
+ name: '@RJBS/CPAN-Outdated'
+ version: 0.009
-
class: Dist::Zilla::Plugin::PruneCruft
- name: '@RJBS/@Basic/PruneCruft'
- version: 4.102342
+ name: '@RJBS/@Filter/PruneCruft'
+ version: 5.006
-
class: Dist::Zilla::Plugin::ManifestSkip
- name: '@RJBS/@Basic/ManifestSkip'
- version: 4.102342
+ name: '@RJBS/@Filter/ManifestSkip'
+ version: 5.006
-
class: Dist::Zilla::Plugin::MetaYAML
- name: '@RJBS/@Basic/MetaYAML'
- version: 4.102342
+ name: '@RJBS/@Filter/MetaYAML'
+ version: 5.006
-
class: Dist::Zilla::Plugin::License
- name: '@RJBS/@Basic/License'
- version: 4.102342
+ name: '@RJBS/@Filter/License'
+ version: 5.006
-
class: Dist::Zilla::Plugin::Readme
- name: '@RJBS/@Basic/Readme'
- version: 4.102342
- -
- class: Dist::Zilla::Plugin::ExtraTests
- name: '@RJBS/@Basic/ExtraTests'
- version: 4.102342
+ name: '@RJBS/@Filter/Readme'
+ version: 5.006
-
class: Dist::Zilla::Plugin::ExecDir
- name: '@RJBS/@Basic/ExecDir'
- version: 4.102342
+ name: '@RJBS/@Filter/ExecDir'
+ version: 5.006
-
class: Dist::Zilla::Plugin::ShareDir
- name: '@RJBS/@Basic/ShareDir'
- version: 4.102342
+ name: '@RJBS/@Filter/ShareDir'
+ version: 5.006
-
class: Dist::Zilla::Plugin::MakeMaker
- name: '@RJBS/@Basic/MakeMaker'
- version: 4.102342
+ name: '@RJBS/@Filter/MakeMaker'
+ version: 5.006
-
class: Dist::Zilla::Plugin::Manifest
- name: '@RJBS/@Basic/Manifest'
- version: 4.102342
+ name: '@RJBS/@Filter/Manifest'
+ version: 5.006
-
class: Dist::Zilla::Plugin::TestRelease
- name: '@RJBS/@Basic/TestRelease'
- version: 4.102342
+ name: '@RJBS/@Filter/TestRelease'
+ version: 5.006
-
class: Dist::Zilla::Plugin::ConfirmRelease
- name: '@RJBS/@Basic/ConfirmRelease'
- version: 4.102342
+ name: '@RJBS/@Filter/ConfirmRelease'
+ version: 5.006
-
class: Dist::Zilla::Plugin::UploadToCPAN
- name: '@RJBS/@Basic/UploadToCPAN'
- version: 4.102342
+ name: '@RJBS/@Filter/UploadToCPAN'
+ version: 5.006
-
class: Dist::Zilla::Plugin::AutoPrereqs
name: '@RJBS/AutoPrereqs'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::Git::NextVersion
name: '@RJBS/Git::NextVersion'
- version: 1.102810
+ version: 2.017
-
class: Dist::Zilla::Plugin::PkgVersion
name: '@RJBS/PkgVersion'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::MetaConfig
name: '@RJBS/MetaConfig'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::MetaJSON
name: '@RJBS/MetaJSON'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::NextRelease
name: '@RJBS/NextRelease'
- version: 4.102342
+ version: 5.006
+ -
+ class: Dist::Zilla::Plugin::Test::ChangesHasContent
+ name: '@RJBS/Test::ChangesHasContent'
+ version: 0.006
-
class: Dist::Zilla::Plugin::PodSyntaxTests
name: '@RJBS/PodSyntaxTests'
- version: 4.102342
+ version: 5.006
-
- class: Dist::Zilla::Plugin::Repository
- name: '@RJBS/Repository'
- version: 0.14
+ class: Dist::Zilla::Plugin::ReportVersions::Tiny
+ name: '@RJBS/ReportVersions::Tiny'
+ version: 1.10
+ -
+ class: Dist::Zilla::Plugin::Prereqs
+ config:
+ Dist::Zilla::Plugin::Prereqs:
+ phase: test
+ type: requires
+ name: '@RJBS/TestMoreWithSubtests'
+ version: 5.006
-
class: Dist::Zilla::Plugin::PodWeaver
+ config:
+ Dist::Zilla::Plugin::PodWeaver:
+ config_plugin: '@RJBS'
+ finder:
+ - ':InstallModules'
+ - ':ExecFiles'
name: '@RJBS/PodWeaver'
- version: 3.101641
+ version: 4.001
+ -
+ class: Dist::Zilla::Plugin::GithubMeta
+ name: '@RJBS/GithubMeta'
+ version: 0.42
-
class: Dist::Zilla::Plugin::Git::Check
name: '@RJBS/@Git/Check'
- version: 1.102810
+ version: 2.017
-
class: Dist::Zilla::Plugin::Git::Commit
name: '@RJBS/@Git/Commit'
- version: 1.102810
+ version: 2.017
-
class: Dist::Zilla::Plugin::Git::Tag
name: '@RJBS/@Git/Tag'
- version: 1.102810
+ version: 2.017
-
class: Dist::Zilla::Plugin::Git::Push
name: '@RJBS/@Git/Push'
- version: 1.102810
+ version: 2.017
-
class: Dist::Zilla::Plugin::FinderCode
name: ':InstallModules'
- version: 4.102342
+ version: 5.006
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':IncModules'
+ version: 5.006
-
class: Dist::Zilla::Plugin::FinderCode
name: ':TestFiles'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ExecFiles'
- version: 4.102342
+ version: 5.006
-
class: Dist::Zilla::Plugin::FinderCode
name: ':ShareFiles'
- version: 4.102342
+ version: 5.006
+ -
+ class: Dist::Zilla::Plugin::FinderCode
+ name: ':MainModule'
+ version: 5.006
zilla:
class: Dist::Zilla::Dist::Builder
config:
is_trial: 0
- version: 4.102342
+ version: 5.006
@@ -2,47 +2,52 @@
use strict;
use warnings;
-BEGIN { require 5.006; }
+use 5.006;
-use ExtUtils::MakeMaker 6.31;
+use ExtUtils::MakeMaker 6.30;
my %WriteMakefileArgs = (
- 'ABSTRACT' => 'build sprintf-like functions of your own',
- 'AUTHOR' => 'Ricardo Signes <rjbs@cpan.org>, Darren Chamberlain <darren@cpan.org>',
- 'BUILD_REQUIRES' => {
- 'Test::More' => '0.88'
+ "ABSTRACT" => "build sprintf-like functions of your own",
+ "AUTHOR" => "Ricardo Signes <rjbs\@cpan.org>, Darren Chamberlain <darren\@cpan.org>",
+ "BUILD_REQUIRES" => {},
+ "CONFIGURE_REQUIRES" => {
+ "ExtUtils::MakeMaker" => "6.30"
},
- 'CONFIGURE_REQUIRES' => {
- 'ExtUtils::MakeMaker' => '6.31'
+ "DISTNAME" => "String-Formatter",
+ "EXE_FILES" => [],
+ "LICENSE" => "gpl",
+ "NAME" => "String::Formatter",
+ "PREREQ_PM" => {
+ "Params::Util" => 0,
+ "Sub::Exporter" => 0,
+ "strict" => 0,
+ "warnings" => 0
},
- 'DISTNAME' => 'String-Formatter',
- 'EXE_FILES' => [],
- 'LICENSE' => 'gpl',
- 'NAME' => 'String::Formatter',
- 'PREREQ_PM' => {
- 'Params::Util' => '0',
- 'Sub::Exporter' => '0'
+ "TEST_REQUIRES" => {
+ "Test::More" => "0.96"
},
- 'VERSION' => '0.102082',
- 'test' => {
- 'TESTS' => 't/*.t'
+ "VERSION" => "0.102084",
+ "test" => {
+ "TESTS" => "t/*.t"
}
);
-unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
- my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
- my $pp = $WriteMakefileArgs{PREREQ_PM};
- for my $mod ( keys %$br ) {
- if ( exists $pp->{$mod} ) {
- $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
- }
- else {
- $pp->{$mod} = $br->{$mod};
- }
- }
+my %FallbackPrereqs = (
+ "Params::Util" => 0,
+ "Sub::Exporter" => 0,
+ "Test::More" => "0.96",
+ "strict" => 0,
+ "warnings" => 0
+);
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
+ delete $WriteMakefileArgs{TEST_REQUIRES};
+ delete $WriteMakefileArgs{BUILD_REQUIRES};
+ $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs;
}
delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
@@ -1,11 +1,11 @@
This archive contains the distribution String-Formatter,
-version 0.102082:
+version 0.102084:
build sprintf-like functions of your own
-This software is Copyright (c) 2010 by Ricardo Signes <rjbs@cpan.org>.
+This software is Copyright (c) 2013 by Ricardo Signes <rjbs@cpan.org>.
This is free software, licensed under:
@@ -1,14 +1,14 @@
use strict;
use warnings;
package String::Formatter::Cookbook;
-BEGIN {
- $String::Formatter::Cookbook::VERSION = '0.102082';
+{
+ $String::Formatter::Cookbook::VERSION = '0.102084';
}
# ABSTRACT: ways to put String::Formatter to use
1;
-
__END__
+
=pod
=head1 NAME
@@ -17,7 +17,7 @@ String::Formatter::Cookbook - ways to put String::Formatter to use
=head1 VERSION
-version 0.102082
+version 0.102084
=head1 OVERVIEW
@@ -56,7 +56,7 @@ format string, an exception will be raised.
Another common pattern is to create a routine that behaves like Perl's
C<sprintf>, but with a different set of conversion routines. (It will also
-almost ceratinly have much simpler semantics than Perl's wildly complex
+almost certainly have much simpler semantics than Perl's wildly complex
behavior.)
use String::Formatter stringf => {
@@ -71,7 +71,7 @@ behavior.)
"My name is %s. I am about %l feet tall. I use an %e alphabet.\n",
'Ricardo',
'ffffff',
- 'abcchdefghijklmnñopqrrrstuvwxyz',
+ 'abcchdefghijklllmnñopqrrrstuvwxyz',
);
# Output:
@@ -188,11 +188,10 @@ Darren Chamberlain <darren@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is Copyright (c) 2010 by Ricardo Signes <rjbs@cpan.org>.
+This software is Copyright (c) 2013 by Ricardo Signes <rjbs@cpan.org>.
This is free software, licensed under:
The GNU General Public License, Version 2, June 1991
=cut
-
@@ -1,8 +1,8 @@
use strict;
use warnings;
package String::Formatter;
-BEGIN {
- $String::Formatter::VERSION = '0.102082';
+{
+ $String::Formatter::VERSION = '0.102084';
}
# ABSTRACT: build sprintf-like functions of your own
@@ -257,6 +257,7 @@ BEGIN {
}
+# should totally be rewritten with commonality with keyed_replace factored out
sub method_replace {
my ($self, $hunks, $input) = @_;
@@ -271,8 +272,10 @@ sub method_replace {
unless defined $conv;
if (ref $conv) {
+ local $_ = $input;
$hunks->[ $i ]->{replacement} = $input->$conv($hunk->{argument});
} else {
+ local $_ = $input;
$hunks->[ $i ]->{replacement} = $input->$conv(
defined $hunk->{argument} ? $hunk->{argument} : ()
);
@@ -281,6 +284,31 @@ sub method_replace {
}
+# should totally be rewritten with commonality with method_replace factored out
+sub keyed_replace {
+ my ($self, $hunks, $input) = @_;
+
+ my $heap = {};
+ my $code = $self->codes;
+
+ for my $i (grep { ref $hunks->[$_] } 0 .. $#$hunks) {
+ my $hunk = $hunks->[ $i ];
+ my $conv = $code->{ $hunk->{conversion} };
+
+ Carp::croak("Unknown conversion in stringf: $hunk->{conversion}")
+ unless defined $conv;
+
+ if (ref $conv) {
+ local $_ = $input;
+ $hunks->[ $i ]->{replacement} = $input->$conv($hunk->{argument});
+ } else {
+ local $_ = $input;
+ $hunks->[ $i ]->{replacement} = $input->{$conv};
+ }
+ }
+}
+
+
sub format_simply {
my ($self, $hunk) = @_;
@@ -299,8 +327,8 @@ sub format_simply {
1;
-
__END__
+
=pod
=head1 NAME
@@ -309,12 +337,7 @@ String::Formatter - build sprintf-like functions of your own
=head1 VERSION
-version 0.102082
-
-=head1 WARNING
-
-This module is brand new (as of today, 2009-11-16) and parts of its interface
-may change substantially before this warning goes away!
+version 0.102084
=head1 SYNOPSIS
@@ -523,6 +546,15 @@ This string replacer method expects the input to be a single value on which
methods can be called. If a value was given in braces to the format code, it
is passed as an argument.
+=head2 keyed_replace
+
+This string replacer method expects the input to be a single hashref. Coderef
+code values are used as callbacks, but strings are used as hash keys. If a
+value was given in braces to the format code, it is ignored.
+
+For example if the codes contain C<< i => 'ident' >> then C<%i> in the format
+string will be replaced with C<< $input->{ident} >> in the output.
+
=head2 hunk_formatter
The hunk_formatter processes each the hashref hunks left after string
@@ -552,7 +584,7 @@ of Perl's astonishingly large and complex system. That subset looks like this:
s - a short string (usually one character) identifying the conversion
Not all format modifiers found in Perl's C<sprintf> are yet supported.
-Currently the only format modifers must match:
+Currently the only format modifiers must match:
(-)? # left-align, rather than right
(\d*)? # (optional) minimum field width
@@ -630,7 +662,8 @@ all hunks, now strings, are recombined; this phase is just C<join>
The defaults are found by calling C<default_WHATEVER> for each helper that
isn't given. Values must be either strings (which are interpreted as method
-names) or coderefs. The semantics for each method are descibed in the methods' sections, below.
+names) or coderefs. The semantics for each method are described in the
+methods' sections, below.
=head1 HISTORY
@@ -655,11 +688,10 @@ Darren Chamberlain <darren@cpan.org>
=head1 COPYRIGHT AND LICENSE
-This software is Copyright (c) 2010 by Ricardo Signes <rjbs@cpan.org>.
+This software is Copyright (c) 2013 by Ricardo Signes <rjbs@cpan.org>.
This is free software, licensed under:
The GNU General Public License, Version 2, June 1991
=cut
-
@@ -0,0 +1,75 @@
+use strict;
+use warnings;
+use Test::More 0.88;
+# This is a relatively nice way to avoid Test::NoWarnings breaking our
+# expectations by adding extra tests, without using no_plan. It also helps
+# avoid any other test module that feels introducing random tests, or even
+# test plans, is a nice idea.
+our $success = 0;
+END { $success && done_testing; }
+
+# List our own version used to generate this
+my $v = "\nGenerated by Dist::Zilla::Plugin::ReportVersions::Tiny v1.10\n";
+
+eval { # no excuses!
+ # report our Perl details
+ my $want = '5.006';
+ $v .= "perl: $] (wanted $want) on $^O from $^X\n\n";
+};
+defined($@) and diag("$@");
+
+# Now, our module version dependencies:
+sub pmver {
+ my ($module, $wanted) = @_;
+ $wanted = " (want $wanted)";
+ my $pmver;
+ eval "require $module;";
+ if ($@) {
+ if ($@ =~ m/Can't locate .* in \@INC/) {
+ $pmver = 'module not found.';
+ } else {
+ diag("${module}: $@");
+ $pmver = 'died during require.';
+ }
+ } else {
+ my $version;
+ eval { $version = $module->VERSION; };
+ if ($@) {
+ diag("${module}: $@");
+ $pmver = 'died during VERSION check.';
+ } elsif (defined $version) {
+ $pmver = "$version";
+ } else {
+ $pmver = '<undef>';
+ }
+ }
+
+ # So, we should be good, right?
+ return sprintf('%-45s => %-10s%-15s%s', $module, $pmver, $wanted, "\n");
+}
+
+eval { $v .= pmver('ExtUtils::MakeMaker','6.30') };
+eval { $v .= pmver('Params::Util','any version') };
+eval { $v .= pmver('Sub::Exporter','any version') };
+eval { $v .= pmver('Test::More','0.96') };
+eval { $v .= pmver('strict','any version') };
+eval { $v .= pmver('warnings','any version') };
+
+
+# All done.
+$v .= <<'EOT';
+
+Thanks for using my code. I hope it works for you.
+If not, please try and include this output in the bug report.
+That will help me reproduce the issue and solve your problem.
+
+EOT
+
+diag($v);
+ok(1, "we really didn't test anything, just reporting data");
+$success = 1;
+
+# Work around another nasty module on CPAN. :/
+no warnings 'once';
+$Template::Test::NO_FLUSH = 1;
+exit 0;
@@ -1,7 +1,7 @@
#!perl
use strict;
-use Test::More tests => 11;
+use Test::More tests => 12;
use String::Formatter;
@@ -88,4 +88,25 @@ my $fmt = String::Formatter->new({
is($have, $want, "non-identifier format characters");
}
+{
+ my $fmt = String::Formatter->new({
+ input_processor => 'require_single_input',
+ string_replacer => 'keyed_replace',
+
+ codes => {
+ g => 'groan',
+ r => 'request',
+ },
+ });
+
+ {
+ my $zombie = {
+ groan => 'nnnnngh',
+ request => "Send... more...brainz...",
+ };
+ my $have = $fmt->format(q(%g... zombie says: %r), $zombie);
+ my $want = "nnnnngh... zombie says: Send... more...brainz...";
+ is($have, $want, "keyed_replace GOOD. fire BAD");
+ }
+}
@@ -1,7 +1,7 @@
#!perl
use strict;
-use Test::More tests => 1;
+use Test::More tests => 2;
use String::Formatter;
@@ -33,3 +33,21 @@ use String::Formatter;
is($have, $want, "method_replace GOOD. fire BAD");
}
}
+
+{
+ my $coderef = String::Formatter->new({
+ input_processor => 'require_single_input',
+ string_replacer => 'method_replace',
+ codes => {
+ f => sub { $_->{foo} },
+ r => sub { $_->{bar} },
+ },
+ });
+
+ is(
+ $coderef->format('%f => %r', { foo => 'FOO', bar => 'BAR' }),
+ 'FOO => BAR',
+ 'topicalized method replace',
+ )
+}
+
@@ -1,15 +0,0 @@
-#!perl
-
-BEGIN {
- unless ($ENV{RELEASE_TESTING}) {
- require Test::More;
- Test::More::plan(skip_all => 'these tests are for release candidate testing');
- }
-}
-
-use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
-
-all_pod_files_ok();
@@ -0,0 +1,41 @@
+#!perl
+
+use Test::More tests => 2;
+
+note 'Checking Changes';
+my $changes_file = 'Changes';
+my $newver = '0.102084';
+my $trial_token = '-TRIAL';
+
+SKIP: {
+ ok(-e $changes_file, "$changes_file file exists")
+ or skip 'Changes is missing', 1;
+
+ ok(_get_changes($newver), "$changes_file has content for $newver");
+}
+
+done_testing;
+
+# _get_changes copied and adapted from Dist::Zilla::Plugin::Git::Commit
+# by Jerome Quelin
+sub _get_changes
+{
+ my $newver = shift;
+
+ # parse changelog to find commit message
+ open(my $fh, '<', $changes_file) or die "cannot open $changes_file: $!";
+ my $changelog = join('', <$fh>);
+ close $fh;
+
+ my @content =
+ grep { /^$newver(?:$trial_token)?(?:\s+|$)/ ... /^\S/ } # from newver to un-indented
+ split /\n/, $changelog;
+ shift @content; # drop the version line
+
+ # drop unindented last line and trailing blank lines
+ pop @content while ( @content && $content[-1] =~ /^(?:\S|\s*$)/ );
+
+ # return number of non-blank lines
+ return scalar @content;
+}
+
@@ -0,0 +1,7 @@
+#!perl
+use Test::More;
+
+eval "use Test::Pod 1.41";
+plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+
+all_pod_files_ok();