Mercurial > hg > savane-forge
changeset 0:02d30d4e5ec8
Initial import
author | Michael J. Flickinger <mjflick@gnu.org> |
---|---|
date | Sun, 18 Jan 2009 15:01:27 -0500 |
parents | |
children | e0a2e4b7ce0c |
files | Changes LICENSE Makefile.PL README lib/Savane.pm lib/Savane/Controller/Root.pm lib/Savane/Model/DB.pm lib/Savane/Schema.pm lib/Savane/View/TT.pm root/favicon.ico root/static/images/btn_120x50_built.png root/static/images/btn_120x50_built_shadow.png root/static/images/btn_120x50_powered.png root/static/images/btn_120x50_powered_shadow.png root/static/images/btn_88x31_built.png root/static/images/btn_88x31_built_shadow.png root/static/images/btn_88x31_powered.png root/static/images/btn_88x31_powered_shadow.png root/static/images/catalyst_logo.png root/templates/main_page.tt savane.conf script/savane_cgi.pl script/savane_create.pl script/savane_fastcgi.pl script/savane_server.pl script/savane_test.pl t/01app.t t/02pod.t t/03podcoverage.t t/model_DB.t t/view_TT.t |
diffstat | 31 files changed, 1397 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/Changes @@ -0,0 +1,4 @@ +This file documents the revision history for Perl extension Savane. + +0.01 2009-01-18 14:06:11 + - initial revision, generated by Catalyst
new file mode 100644 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 3 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU 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. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>.
new file mode 100644 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,19 @@ +# IMPORTANT: if you delete this file your app will not work as +# expected. you have been warned +use inc::Module::Install; + +name 'Savane'; +all_from 'lib/Savane.pm'; + +requires 'Catalyst::Runtime' => '5.7014'; +requires 'Catalyst::Plugin::ConfigLoader'; +requires 'Catalyst::Plugin::Static::Simple'; +requires 'Catalyst::Action::RenderView'; +requires 'parent'; +requires 'Config::General'; # This should reflect the config file format you've chosen + # See Catalyst::Plugin::ConfigLoader for supported formats +catalyst; + +install_script glob('script/*.pl'); +auto_install; +WriteAll;
new file mode 100644 --- /dev/null +++ b/README @@ -0,0 +1,1 @@ +Run script/savane_server.pl to test the application.
new file mode 100644 --- /dev/null +++ b/lib/Savane.pm @@ -0,0 +1,74 @@ +package Savane; + +use strict; +use warnings; + +use Catalyst::Runtime '5.70'; + +# Set flags and add plugins for the application +# +# -Debug: activates the debug mode for very useful log messages +# ConfigLoader: will load the configuration from a Config::General file in the +# application's home directory +# Static::Simple: will serve static files from the application's root +# directory + +use parent qw/Catalyst/; + +our $VERSION = '0.01'; + +# Configure the application. +# +# Note that settings in savane.conf (or other external +# configuration file that you set up manually) take precedence +# over this when using ConfigLoader. Thus configuration +# details given here can function as a default configuration, +# with a external configuration file acting as an override for +# local deployment. + +__PACKAGE__->config( name => 'Savane' ); + +# Start the application +__PACKAGE__->setup(qw/-Debug ConfigLoader Static::Simple/); + +=head1 NAME + +Savane - Web framework for Savane interface. + +=head1 SYNOPSIS + + script/savane_server.pl + +=head1 DESCRIPTION + +Savane + +=head1 SEE ALSO + +L<Savane::Controller::Root>, L<Catalyst> + +=head1 AUTHOR + +Michael J. Flickinger C<< <mjflick@gnu.org> >> + +=head1 LICENSE + + Savane + Copyright (C) 2009 - Savannah Hackers + + 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 3 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, see <http://www.gnu.org/licenses/>. + +=cut + +1;
new file mode 100644 --- /dev/null +++ b/lib/Savane/Controller/Root.pm @@ -0,0 +1,83 @@ +package Savane::Controller::Root; + +use strict; +use warnings; +use parent 'Catalyst::Controller'; + +# +# Sets the actions in this controller to be registered with no prefix +# so they function identically to actions created in MyApp.pm +# +__PACKAGE__->config->{namespace} = ''; + +=head1 NAME + +Savane::Controller::Root - Root Controller for Savane + +=head1 DESCRIPTION + +[enter your description here] + +=head1 METHODS + +=cut + +=head2 index + +=cut + +sub index :Path :Args(0) { + my ( $self, $c ) = @_; + + # example of a template being called + $c->stash->{remote_host} = $c->req->address; + $c->stash->{template} = 'templates/main_page.tt'; +} + +sub default :Path { + my ( $self, $c ) = @_; + $c->response->body( 'Page not found' ); + $c->response->status(404); + +} + +=head2 end + +Allow for "post processing" of in our application. +* Write some code for handling "server errors". +* Also, attempt to render a view, if needed. + +=cut + +sub end : Private { + my ( $self, $c ) = @_; + + return if $c->res->body; # already have a response + $c->forward( 'Savane::View::TT' ); # render template +} + +=head1 AUTHOR + +Michael J. Flickinger C<< <mjflick@gnu.org> >> + +=head1 LICENSE + + Savane + Copyright (C) 2009 - Savannah Hackers + + 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 3 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, see <http://www.gnu.org/licenses/>. + +=cut + +1;
new file mode 100644 --- /dev/null +++ b/lib/Savane/Model/DB.pm @@ -0,0 +1,50 @@ +package Savane::Model::DB; + +use strict; +use base 'Catalyst::Model::DBIC::Schema'; + +__PACKAGE__->config( + schema_class => 'Savane::Schema', + connect_info => [ + 'dbi:mysql:dbname=savane_dev', + 'root', + ], +); + +=head1 NAME + +Savane::Model::DB - Catalyst DBIC Schema Model + +=head1 SYNOPSIS + +See L<Savane> + +=head1 DESCRIPTION + +L<Catalyst::Model::DBIC::Schema> Model using schema L<Savane::Schema> + +=head1 AUTHOR + +Michael J. Flickinger C<< <mjflick@gnu.org> >> + +=head1 LICENSE + + Savane + Copyright (C) 2009 - Savannah Hackers + + 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 3 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, see <http://www.gnu.org/licenses/>. + +=cut + +1;
new file mode 100644 --- /dev/null +++ b/lib/Savane/Schema.pm @@ -0,0 +1,48 @@ +package Savane::Schema; + +use strict; +use base qw/DBIx::Class::Schema::Loader/; + +__PACKAGE__->loader_options( + relationships => 1, + # debug => 1, +); + +=head1 NAME + +Savane::Schema - DBIx::Class::Schema::Loader class + +=head1 SYNOPSIS + +See L<Savane> + +=head1 DESCRIPTION + +Generated by L<Catalyst::Model::DBIC::Schema> for use in L<Savane::Model::DB> + +=head1 AUTHOR + +Michael J. Flickinger C<< <mjflick@gnu.org> >> + +=head1 LICENSE + + Savane + Copyright (C) 2009 - Savannah Hackers + + 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 3 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, see <http://www.gnu.org/licenses/>. + +=cut + +1; +
new file mode 100644 --- /dev/null +++ b/lib/Savane/View/TT.pm @@ -0,0 +1,40 @@ +package Savane::View::TT; + +use strict; +use base 'Catalyst::View::TT'; + +__PACKAGE__->config(TEMPLATE_EXTENSION => '.tt'); + +=head1 NAME + +Savane::View::TT - TT View for Savane + +=head1 DESCRIPTION + +TT View for Savane. + +=head1 AUTHOR + +Michael J. Flickinger C<< <mjflick@gnu.org> >> + +=head1 LICENSE + + Savane + Copyright (C) 2009 - Savannah Hackers + + 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 3 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, see <http://www.gnu.org/licenses/>. + +=cut + +1;
new file mode 100644 index 0000000000000000000000000000000000000000..5ad723dc416e8ad9c8dea9457a564c59499466e9 GIT binary patch literal 2551 zc%1E4&rcIk5T4fJ!yhO=lxo3Ru_7!gh!UY8`~g5nfRqqUgj2)GD;!$F0TKw1z=d!! z5SqXNNKe2YASW@YSWRPBQs_okX-Q+3y6BG6g#;Fa)W&#`Nhb5Ynfbn*x7ob606Ne^ zW+qTf2S*w}A;3PifWrVVOu3>&j@$x!eaB3<7xa2R^z{XysmTXkuM8ab5+)}_*4fFk zwl*JOiFyPW9gRY5tw7iZ9#5Es!wT!|m7%*^g6wP_W@kmx5MX#X3^g^Y%x3d3Syl)K zp{2zKf*^z29R;V8Cq0QRFH6knl)-HFQeB{2kmeAep@9d#Ut%1$%G_=dIyw^1RHz<? ziHRuHgM@kJ@kmUP6c`wgNizy_b0R(03pN`MilUHqkeN(8X^Y4A4#4*PBs;60)&Gln z#VK~<S(ygwtvQE~(R??poO-SrD@>2mi*J{d7%6+xdg)?bQ2}?0t1L})mESMFa?Sz; z7YZI8Pz!Ud51w8=!1>p8x+nPu*pzQD<lfT`V}7K?rPr=#6X&xsHJDlNXmCb$#&7m` z$~#KRwCAkl#6JATHZrn-d3hgka8OQ(-`Kc@_4OaHxmoxl-tMk~i;FR&vmB?UKH>cQ z7tK69J#n=sVWH42x?EADJBA!-EhC-rI6l6O@wlSVwcFpS^VHRC;@H?W(p`e>?VAV? zB#)5C)M&ShxU-`in=3KL^z>&nMj}7a>-~;&_Ymj(zJ{Pix?7UoE62UUs;YN1*E)HS z)&a_`CCzua0$5%B8vFY<$Tw;IhH~pk^FyJys=;w9SX{h<m6dDg_wOXlKWa-$F<e;q zmNGvUQ*dY~f?HcZQr2)d0+^K*z^<;;_R-qvQ@<1Xr$~wK@qERZ8BvXY(-J4`$zFB@ O=Nwua%>ahyFMa`#fIOxE
new file mode 100644 index 0000000000000000000000000000000000000000..c709fd67191037b89c6cfcdd821b9afb3b0447e7 GIT binary patch literal 3826 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
new file mode 100644 index 0000000000000000000000000000000000000000..15142fe2a751e6f6bdaaba78ec5bd2a3a80d2b27 GIT binary patch literal 3681 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
new file mode 100644 index 0000000000000000000000000000000000000000..7249b47ea06cfd54ee78d4aded9088912e9c6884 GIT binary patch literal 3862 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 U#u9YuYXLxQBdwZe;HaYi0UKhVf&c&j
new file mode 100644 index 0000000000000000000000000000000000000000..e6876c08fc78dcad5e4fd5a2e895f3522ad63a13 GIT binary patch literal 3673 zc$@)Q4yN&mP)<h;3K|Lk000e1NJLTq004LZ001%w0{{R3pn31=00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#08mU+Mc?4w z+}zr_baJDioZ8&k<mBS6udUJ3&v9~b^z`$xva(T8QPtPe+S=8jp`f#ki~axr@063v zFfaT2`{w87%#4iM0Rhd=&B?>R$)=`tacqi;iu^b?`9(xNK0dZrR`&Mx)6C1AoSEz7 z;?2&>>Zz#o^z_x$)860Q{Pgqw85zmT$Jg1_;o{)Slat+6Rq^ZS<hZuk+Sut^TGP|h zdV6~4=;vZ$V*CC2&(F`-W@XcLb?bO{<NyHi^X}s0;=8%E;^X4gg@nSv!13|$?CtB) zy12}<vdYHAsi~>T%E*CzdFbfn<mKa*mX*J~yXx%e<UBm}*VoFguEoX0Q%pv&v9HK} zec0I7zP`Tu`}xS7ob^{$y1KdM=;rimYnqvt{U|5Sy}a1g)77l1-r(M~wY0met2#0& z>gwvsS61NQ;Qajj<IT+M?Cjp&-cC+V?(XhnUs>`10PJaLtEr~+cX#vi@#^a6($mq; z(9F=p!r4PY?aj=rtg3~DghN9^?cCgjfP2Km!r<NA;o;ui+uHs6`sqeSY;0_lk&N!{ z>}O(Jjf#cx^72GIHs0Ra+S=M%TU*=S+uh#W>($ik>gj!WbI;1k#FUfe*44GNvE{_W z?(yu%Vqv+rw2zL9(b3WD#>M^p`z|IPPf0@4($Bs+Il{BB*c%)63JT=r<Ngm0%(%D9 z%*k0(OvlK?=;q{!g@C)fy0^Htudl6dYh|;vvdT_PrlzCB!@qcSal*vGa&BkW*VdSp zk@NKO;^5!h-P`rV#BFC`O-DeUpPm2z{~{R?`1ttR+t~T}`P$pr+uPaO+t~T}_wn=b z+S=Iv|NY$D+5P|h_xbn!{{H#-_}bdpyu7^h_w)Gq`1A4c?C$K_+SvX7|Ns5{M?X3L z{r~;_{q^<r_xJa`ySe%I_vz{B_xbtdn3&^)ga7{i_w@4S<>dF_;M>~S;N08V#==-u zRA5?E({FC&D=XH~&+`}<z`(%K$;j;P?)v)qzP`KF5D(|b#y8``Apigh-bqA3RCwCF zSbbbm<sRRVx#Jwu+Gro;MbW`XHj1OX3{;qIAun-<7!t@t^BP0~qYM~|C{4>1QOx|* zEoF&%6I_sZ4JCZJ$_^W2ZoHGC2FtGAtge;Oo!<L<&W4U&^dIB<oaguaUcS%od(Lx) zA2*8r0Vo>vdc93Ftbf>`+`ruGRsOnHQbM?I+r$cse6g&fI_3&iR)N=q3MbUGjg}sc zJ^X6soOfy_P&g~RZCQ$+_{R1yNy{8x`@{*Cx5dmjy*)OiG)JK*I}!IM3HRE54MjO? zt=~{EAU02`opaOn(BL9m<mLNYgddB2H3bO=550S%&G+G<Jn62mmseZ!(aA6nz)qfw zf{K*yXLtsCdV1ap`#RN8aWD|!p1qfJWF|YQF6ptDbXm>eqfX)3<*cQg-$CrHwIJ&m zoXdHb5T`c3?iA(}G}E3Yal^4ZT}OI;Pl+=?*Uy=9Fr4cc53ahpdwXv@J+AK3(&3?c zNnE&7SX@vh6w|~sTC^BIqk)MQBTH%ZTzhLfnSi`A>F}MoXo=l!mvF#JBz8$<02sU7 z2D7r*>9i}LBdh^Ac_UJrG&-8b9~15s7L?@*e-|?{gb#on!!U-V6~lOT%+5*zgJE0P z7{;nZ4$M%VL@0zr(y59X+ZJB2P<Y_3Fr{F!hVmPzD3n`E)}D5FzpmVc5i?3KBgWxi z#u^@mRU|=THcZU!bn-DH$-<1b(9D_u*rL5FoL_L1s>u%w%-1+C65wTcRt4red}mG* zhz4*pntT*!jPS%2&=s!Kwooi76B1iswn-cgDrf@1PpZu0WBFmwL*ycyidUaGqk%aF z4Klw(tp)3nt#+wv95HGwC7-yDk2SYp9F#C(`Jpz4V+2ogrVoQ-L0q(jTjnC%N*#x^ zTes4v)c2N{s1HIr)<>mE<1vgcZO8aaLv8JF1nn>+4hIX(&p|A#P2u2DO*|LjW6UmU z7nR!8)#dKq^;`=2SHp9yU*utTh!MKT0V^zBR9HzW%r5B{QV6Aeuz)MG$)tVY_rY*D zU)W@@4_1X3tQ7WGbgshujt+yNqrao0<Ga|E!H0h-EiFw8UTK23!(i&@Hw_t}W-_4I z)M0^XLXKl14$S_J@6c+Buc$yvhpE5+9>WBCVIToK-c|TWJWpA|6m*(8GongMgQFrN zqdX&@@|$7k?CdldIt@@j#smu(1G1gY9GNwsiO8LuJ9qC!n>stl3fwp1BD#|;7$>~G zrKO^!W!kK-+-9|`Oy0EV34~z3s0`d4$1UWA9E$}ej+4fMySrOZG6r{0+%1-VsJuCI zX1{~xj`yQdKME0J1rH_CT!q&+H6X;ydi2io2OlGG=i`q*-c#{e3X_?J8!QHNy9U6J zg<Qs9v1FY+>&PHG1oP9gXCXh1H3SXtjfI~uN)FJKL78L1cv3-ArcM{H)9D%x&YI=W zeQXgjZqp8;v`)uUDwSF~y`+SxORZoES_R6zd*ksmc*canLX$fc-p5y89fxN#;Ja^r z0(AkC$>-Dgbh`F{vbp)Vju$kOAlg7BsG-Rr{I=ISHLRuqC6}vIax)G-e`nESix5bA z=kJeZK!L1rd0dh5WHvz%g}l9Q!9tvC;c*EPO5P`E$u8saMCS;Cr-b@RF1HY@@&u|R zaL<v%NnCDF=42$yDxZ^?dE|D`0XPLZeUID9MdL8d%}t9+s8~YRq9*6wsyT3k$ledV z_m|Ke!UyQtwfpxIL~TO}9hQ=kHwoe&T5UE_ORs_ZIaiy7(tu_yop%HYGYXpa-d-Bd zW5UV6*~~cn*-Q7Z=%q!U`T0Qs9UHQ@p~+wP2+a^etJ_RISn&DHFn1F~4Vh*#gKCLv zKF|wMJ&4JSXELGMj6{^TkA_ov!;iVm;>NxgE5I!t9u|SX{n3}kVUvfzB7l#O!6L9& z1Um_0r@#U!kK><{hrQ8afyN#N4-ej_<Rk4ipagK=Ac*xqpJM<gd-rkJ1Hu~x(2YL| z!p~yQ|CI9Mq3MVAoT;vU?x~EGFC3aa4x75Ft6)@DS5<*cAc!&(N=yQcx8QY`RaJq` z_NuCiTIdh=lCZrR5<qVvh)>@jva3yWbceN*s+^mvtC>hRl;yT(9jOrc#7{pTs{c9p zr}4s(s$5F0N+qPI5a7+7ROJd)LU?%%D(G~SlKTuns8p1*@VQYP1z`#W5)`2-_X_b$ zHZfCmI+t=1GFMKMbfJ)PdZ;BeoN}}21<xNH63LNE*8S)Ex^?4)*VWNzaKZl@5YRi; z(ZGjJv}ov;T1P{chO8hOS|`xzzy)eu7CQOcu&0%**3q`1DikyoAUt(o&yppiLX<pF zE|+r}8<SmiljZU-`3+Q&H_96u6XC&#XRd7Hpl3jTSbviz)*t~nbj`j3&bCB3)Z~ec ziJj>18xzBRfDHukLt^4mg4_`H*9H*A;@(Sse;z2z+b}=m>l|5*OtzukMYw*6G-vL$ zI$3dX&bu<G7H@-g#0lAPP|XIhjk4lE5F%t}z}D8FQVw{)mC4{H=g5lRMP=fLGtdG3 zE$%JOiH>K4Q&<VhlCN)=?>&FRb)UKFi)yvH@q>^xW3p>Pu1}vo_u^|l?|-O9xTpZr z5TgQ59kWcKCO4?nOq5Y9i}_HYz6iwss?~^&J_jnaff56ClBtSesy|f7<Bx??IKE3` zz2}E~5c0D3F3I`DMdu}Ry%+9Uh|Xa8yqC9DUhuD9^S@II*Mw}{_2l`Y3+ES~M<|lO zC?W$185g08#NrDVAXt2%XcC;s&Qs?hy%<QaNMH-Oy;ujrd0ycS%c5R;&FA`)Qw9S7 zg8^Gt`S@=Rxppn&qpgF3r$%;p*I%pjU*qHBvv6*}6d(;wfhAx{016;PW)R$OU@wZG zJ_WiA!Ylb4F%a8{fN!QC1t}MVC7RHwO(Lxyv$Dr*Gn<XJ9<csCKC2eKvdViQyQjz8 z_s#0*t7kvCdGqGgAGMp!Jv~=#=Bs^1v-#>(Tb~WZ;P#mRW$rP911-RT*j!lqCM3YO z^`HvmdPqu7k3zIQoHCok_wo%b8_+V@>FkJz2sWF&j~$V|-2ahB{FlENfie+x|9YQS z=GCwIHev^q_C>JM(<Al)dq+B|!U#*RJQWcJTU#NKUfIgr0e&DG!O2Kx?@NbdL@OKI z#aa+%ON63PuXhSc(yW(<yNA22-QCt<tJSK%+-<d9(t|fVJZxP~zH{%#^_L)P{c_ma zeYqR4^(4Dnls3Q+h#+Qk>-Ap>25_<sY_(ppeo3xYYxgCq_3~u~bnG4}0pVVwM9hy* zEm)9t-|x}h<cIv9e^4D^3@{k_0S3+(V2$YU0Wr=JGY0fYaf~<-WLJn;dWI;DHQNhk zh*ki70SN1d?UiBqqYn_?vF5(QdQ#Zy*b0Uo$4OyaJOE;7Kz4+|V2Dr&!X*8eu)ddV zlV~6G#IHDy`j3Qhc#;7|9)l4#LTck8hEo`_de%sienngy3iIOb3hVX5?6(UR@b4@9 z`0Dz4pXL94IKO{XjtQf0iwhP6+@JmJ!;*z><M)IErdBMNNMvns3Xf#nWHBZVN#$Cn z@N7<V_|%ERiD&biKSdbx@c7YZCkjh>6p2&##Q=_pubn9H^Yd&@;a>ZQBIoOgLXO1t r;@A&ty~B26`$WOW9`60W00RIpRom?R8Oc-t0000<MNUMnLSTZRR%5CT
new file mode 100644 index 0000000000000000000000000000000000000000..007b5db69b5ca488c325c0115ad87a7bc6a129f7 GIT binary patch literal 2517 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 Ut#h9AEdv~FT`pDI+)66^FB~`OF8}}l
new file mode 100644 index 0000000000000000000000000000000000000000..ccf4624b5de3d4a0c4b5f772bcce7ad247e2a237 GIT binary patch literal 2274 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
new file mode 100644 index 0000000000000000000000000000000000000000..8f0cd9f41f699794f919bc2c8fc8e0ab3e7297f0 GIT binary patch literal 2542 zc%0={`9IT-AAkE$ZuQmSs3fVBBVAI_ArvWUjv--~4)GXMk`60!<S3O~kz;d{t6VGR z+!~u>tc`84VY7SK=Hv5sd|!{p>-BuRUO&8^&&T8Sc)VV(c&8gzRF$-q002<6yJ~%F z1Hl`<S3!0oI`3Q^*#Nn~OV=*}z}N)N5qx|j*Mi%C;h+#G{IPFn0C34a1QMWY_s};m z;8uXI{}WhmfCT`^0!|LjHrd%(g++yZa&n`NjtB%II5@Z=Fi<2C;vyr5hKDF5(&UE^ zjZKYf0FaiJhPrl*M<BppFo}TyrM4z2DvDNKE>Tf2H$4o6LO-RYFlJ|0Jv_SK#7>)- zFc=KBj0}6DqOJWkKX3BYD?vm3Oh*Ts#p>$r`uq29dq-PxLM(wmcmxaj_N|f!hm%O8 z!NLBTnr|K+9>k_5I-SmBFi=JL1j3}m&d$u_P<-s`>FMdzw{ci3RumNl0)cESPq(65 z$YgSIa?-79HuVklcOhPt<t3%1C1et5?)L4Bk7*PDAOJvXOY`F5;^gE60{}?mKhl*I z#*Q5mV|a#<QGb75XIG~{z{ib_Af7#G{L#?cgX!vQx3fBj1%Uj5uTLMr{Jg+pI9z2_ z#h1+VnCNH2!$X}NZHtQwK~Ud<-0b#WKc#JL6w2)E?9A9Wo-i_U-S#4;2h)w|Zf<UF zZEj>JE3dDw+uGVnrBaDR!elbVV)5$gsz4wRi9~!pABV@`@i-2Lv$C?n<MAY736)Ca zayd-ql2{_<a=B}3Ys<^aY&Ls&nMI{hSuB=VBFX;zVd=kC5}{DY;c{>|oJ1mKvX~wo z?hHCzA{O7ieVfjpr==zdgaSMc2L^-Z=H~9W-CSZW;m7cklanheBErN3jYcg+6|N{M z(r7df&~-c>&tTA5EGB1zn8QJ#kOhVL*x?}_k1G@ks8q_ch_Jl8yk+(>jY{1R^yd$e zG&=h0XDcZ`f4!?~6gRrCurN_kv4TPgMZ$rcobmB-<`T2G80FyLz!)A9&r+mca=qO_ zMftgc`T2FJly7D>cj3bH^b{EpEsc)m@p-GOE8l-KR8?0JiNr|)fk7roq>>qBW!eaK zb#1k~yNfa~zzhv#Gw8pu!-A!yvhuQq+8Q>8&0SvR{U@7E8Xw0O6gXbB!j}{eRaLGt z815eKzP`RQGc%;ADG>&<F_GH$*V_R=27uqX0b2k6HUK1)KL7xm0`06XIY$ucKFK?S z+%z%X9~8!Pt+Bg=H*b<{9OCBFz9Qq|kTD4rWD_;(*gD8fh`NsdvenK`72SXIwr-LS z-W^_7Z~VyTyXynv3Ezdgj&D$}K&!3kdAuI1PT|jUXqJ@qczrIX1%?QRE9Z8wB92!x zJ14gMsGV#{y>q%@)k_1N4bMsB*TCXPh9Nwz)?{XfS|r3z&65z5{Y$v9b<hVOMV2vx zFs<4jV9pO%Z*MQg{kjIL^5JmqKi%J-|KZ_@6NyG+unF1Q+!wNx8cj-5y<B6xa{58R z!s%!N0pxECqcAl6=x?LCp7|fom|Y`r!hXhDBU$<9-^*`u3NnJ)d3A@(g>!PScL$nJ zaCTClg&HRQ7L~br$(W=#vh8B(C5jpL{W*@+Thp+BbJ^2cym-XHdviN3_@p4=eJ?@P zYelxTbLdhstYb;fM%QiMeRW^iB#Yo=E4jfPbTvUjmfpZsHw|z2F4RtomqvHl+Dtlq zCHNlwa3~Cwd8lvn7dh<IjNYd>*?Z{Cm7kMMKckc4^}Q+*!*?mC?8Is&sKmx^^Ug9Q zYqvhF*lMbI(dfvz(vshr_Gc^}bwJeC@JdNYgrz6<P#nD6hii`V5%i45o%8{@;-bbM z?*3hFc=%X`eFHHftR+2tJZW||H$iJC(;@KMT_vvab!1vmVVl41zN0*SWhKjfzIyJF zBXTG10nrV|&WtxDz1p@7l#bixX2J{5G<88I`L4a&KSc|5Ti2-MLwo<47`inypTRxR z)%$FwW4T;)rsU-J7c2^rmAN^;p3i?R5R@BLnEj^1V_o;^5LF7hFh}DZuO)`uco3{( zsiGQoR(8wX+B^4C)a&l-)BfYuMTC}H{Q_HV^+Y-!aVhn1A!!hKjZQC$(Rad&cl%Em zx_wG7`<xkyAF5vVIAG*Vvk!;>o9E!IWcJ*5DgEdR|7d?k{_U||PSP$#gk#;q-Ta_K zlqr#1MH_jWIKcdTIyi+A@d6@YRO2H&OXV=*+vId&QM2Z`spNiw&(lr&6qP&X8rm8c zZaH{iGLGNJk-ZP8=!EjK0?#&TpK{dQs;{7~?o)21U~|yF!|0B>%8AS?h6d(G)NPb% zuyw^jby3<13vy+2dvgQw)o;@0r*pllefq`28pfGh;uDQ8*Ub%hRE!11rpDLA{B0#T za8u;}ha|>7x<A<7nt{UJJCW1jxZhg77P3{4?exI5r)A5~QvW+h#!S55%e|Xln72gs zXrA^Pc8NXiyth&%#?u-#!*fw9gSu)#di;*iTXqopU#7||?D&dTh;ePlZroGwxsXw6 zcXw~7SK^Iyv-T|L!0-MvRNvzTc<8)YqnvS!JRNkh#0#Mx8d?0?5)a*8@M;?AnE*-c zgL>}2Bn&$H`q32CEK6)LZIMDoi6x#1IEFV46Fj(kVaXESRK?2cM_<8T)Z(>5>Tuc+ zo91$ezi~mq*7%BMrzS!|`F;MA*9S}R5&Fsbi8#pi!$yXnz5Q~O&OI<y{mZH+z1JU0 z(I6-8WZX9?byhq5x!#_yANs-#&Z-xsexzS@K*n_)Hpp>^4p-Gm5~Q7a2jTT9zMnq2 zSuq<iuc7b%ss3ZW5q#9M_((=hjbU-j-Yu(;PF_ms;&z%7c(+=j4tmhV#bvt-EzcmM zz4GzI($2)o$lS#Ifa85%Q3kDFMhuN2-?ZO2aI6Yma#B~g&!qJfZtAHM)35iUp?3sW zbzZCx9yYthG&rh-&2b@$&X0&j2D-a58ZA2?S{T}m4npy<s>)C2%j`0{G;`SsO7kuV ui=iLV>S{(|tNorb*#%Lq=*mkOK+W|@4_Y<EcH>_I>}+mWS6cZX^8N)J%mAza
new file mode 100644 index 0000000000000000000000000000000000000000..aa776fa40f8e6d41c5277be33b0e16b10c1def92 GIT binary patch literal 2304 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 a0|4eoa7M-5CQbkV002ovPDHLkV1l4dqzaP&
new file mode 100644 index 0000000000000000000000000000000000000000..21f1cac7a9e12236982adf3f548dcaee560cbabb GIT binary patch literal 13710 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
new file mode 100644 --- /dev/null +++ b/root/templates/main_page.tt @@ -0,0 +1,4 @@ +Welcome to a whole new world of Savannah'ing.<p> + +By the way, you seem to be connecting from [% remote_host %] +
new file mode 100644 --- /dev/null +++ b/savane.conf @@ -0,0 +1,3 @@ +# rename this file to Savane.yml and put a : in front of "name" if +# you want to use yaml like in old versions of Catalyst +name Savane
new file mode 100755 --- /dev/null +++ b/script/savane_cgi.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl -w + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' } + +use strict; +use warnings; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Savane; + +Savane->run; + +1; + +=head1 NAME + +savane_cgi.pl - Catalyst CGI + +=head1 SYNOPSIS + +See L<Catalyst::Manual> + +=head1 DESCRIPTION + +Run a Catalyst application as a cgi script. + +=head1 AUTHOR + +Sebastian Riedel, C<sri@oook.de> + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut
new file mode 100755 --- /dev/null +++ b/script/savane_create.pl @@ -0,0 +1,75 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use Catalyst::Helper; + +my $force = 0; +my $mech = 0; +my $help = 0; + +GetOptions( + 'nonew|force' => \$force, + 'mech|mechanize' => \$mech, + 'help|?' => \$help + ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +my $helper = Catalyst::Helper->new( { '.newfiles' => !$force, mech => $mech } ); + +pod2usage(1) unless $helper->mk_component( 'Savane', @ARGV ); + +1; + +=head1 NAME + +savane_create.pl - Create a new Catalyst Component + +=head1 SYNOPSIS + +savane_create.pl [options] model|view|controller name [helper] [options] + + Options: + -force don't create a .new file where a file to be created exists + -mechanize use Test::WWW::Mechanize::Catalyst for tests if available + -help display this help and exits + + Examples: + savane_create.pl controller My::Controller + savane_create.pl controller My::Controller BindLex + savane_create.pl -mechanize controller My::Controller + savane_create.pl view My::View + savane_create.pl view MyView TT + savane_create.pl view TT TT + savane_create.pl model My::Model + savane_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\ + dbi:SQLite:/tmp/my.db + savane_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\ + dbi:Pg:dbname=foo root 4321 + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Create a new Catalyst Component. + +Existing component files are not overwritten. If any of the component files +to be created already exist the file will be written with a '.new' suffix. +This behavior can be suppressed with the C<-force> option. + +=head1 AUTHOR + +Sebastian Riedel, C<sri@oook.de> +Maintained by the Catalyst Core Team. + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut
new file mode 100755 --- /dev/null +++ b/script/savane_fastcgi.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl -w + +BEGIN { $ENV{CATALYST_ENGINE} ||= 'FastCGI' } + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Savane; + +my $help = 0; +my ( $listen, $nproc, $pidfile, $manager, $detach, $keep_stderr ); + +GetOptions( + 'help|?' => \$help, + 'listen|l=s' => \$listen, + 'nproc|n=i' => \$nproc, + 'pidfile|p=s' => \$pidfile, + 'manager|M=s' => \$manager, + 'daemon|d' => \$detach, + 'keeperr|e' => \$keep_stderr, +); + +pod2usage(1) if $help; + +Savane->run( + $listen, + { nproc => $nproc, + pidfile => $pidfile, + manager => $manager, + detach => $detach, + keep_stderr => $keep_stderr, + } +); + +1; + +=head1 NAME + +savane_fastcgi.pl - Catalyst FastCGI + +=head1 SYNOPSIS + +savane_fastcgi.pl [options] + + Options: + -? -help display this help and exits + -l -listen Socket path to listen on + (defaults to standard input) + can be HOST:PORT, :PORT or a + filesystem path + -n -nproc specify number of processes to keep + to serve requests (defaults to 1, + requires -listen) + -p -pidfile specify filename for pid file + (requires -listen) + -d -daemon daemonize (requires -listen) + -M -manager specify alternate process manager + (FCGI::ProcManager sub-class) + or empty string to disable + -e -keeperr send error messages to STDOUT, not + to the webserver + +=head1 DESCRIPTION + +Run a Catalyst application as fastcgi. + +=head1 AUTHOR + +Sebastian Riedel, C<sri@oook.de> +Maintained by the Catalyst Core Team. + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut
new file mode 100755 --- /dev/null +++ b/script/savane_server.pl @@ -0,0 +1,115 @@ +#!/usr/bin/perl -w + +BEGIN { + $ENV{CATALYST_ENGINE} ||= 'HTTP'; + $ENV{CATALYST_SCRIPT_GEN} = 31; + require Catalyst::Engine::HTTP; +} + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; + +my $debug = 0; +my $fork = 0; +my $help = 0; +my $host = undef; +my $port = $ENV{SAVANE_PORT} || $ENV{CATALYST_PORT} || 3000; +my $keepalive = 0; +my $restart = $ENV{SAVANE_RELOAD} || $ENV{CATALYST_RELOAD} || 0; +my $restart_delay = 1; +my $restart_regex = '(?:/|^)(?!\.#).+(?:\.yml$|\.yaml$|\.conf|\.pm)$'; +my $restart_directory = undef; +my $follow_symlinks = 0; + +my @argv = @ARGV; + +GetOptions( + 'debug|d' => \$debug, + 'fork' => \$fork, + 'help|?' => \$help, + 'host=s' => \$host, + 'port=s' => \$port, + 'keepalive|k' => \$keepalive, + 'restart|r' => \$restart, + 'restartdelay|rd=s' => \$restart_delay, + 'restartregex|rr=s' => \$restart_regex, + 'restartdirectory=s@' => \$restart_directory, + 'followsymlinks' => \$follow_symlinks, +); + +pod2usage(1) if $help; + +if ( $restart && $ENV{CATALYST_ENGINE} eq 'HTTP' ) { + $ENV{CATALYST_ENGINE} = 'HTTP::Restarter'; +} +if ( $debug ) { + $ENV{CATALYST_DEBUG} = 1; +} + +# This is require instead of use so that the above environment +# variables can be set at runtime. +require Savane; + +Savane->run( $port, $host, { + argv => \@argv, + 'fork' => $fork, + keepalive => $keepalive, + restart => $restart, + restart_delay => $restart_delay, + restart_regex => qr/$restart_regex/, + restart_directory => $restart_directory, + follow_symlinks => $follow_symlinks, +} ); + +1; + +=head1 NAME + +savane_server.pl - Catalyst Testserver + +=head1 SYNOPSIS + +savane_server.pl [options] + + Options: + -d -debug force debug mode + -f -fork handle each request in a new process + (defaults to false) + -? -help display this help and exits + -host host (defaults to all) + -p -port port (defaults to 3000) + -k -keepalive enable keep-alive connections + -r -restart restart when files get modified + (defaults to false) + -rd -restartdelay delay between file checks + -rr -restartregex regex match files that trigger + a restart when modified + (defaults to '\.yml$|\.yaml$|\.conf|\.pm$') + -restartdirectory the directory to search for + modified files, can be set mulitple times + (defaults to '[SCRIPT_DIR]/..') + -follow_symlinks follow symlinks in search directories + (defaults to false. this is a no-op on Win32) + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst Testserver for this application. + +=head1 AUTHOR + +Sebastian Riedel, C<sri@oook.de> +Maintained by the Catalyst Core Team. + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut
new file mode 100755 --- /dev/null +++ b/script/savane_test.pl @@ -0,0 +1,54 @@ +#!/usr/bin/perl -w + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; +use FindBin; +use lib "$FindBin::Bin/../lib"; +use Catalyst::Test 'Savane'; + +my $help = 0; + +GetOptions( 'help|?' => \$help ); + +pod2usage(1) if ( $help || !$ARGV[0] ); + +print request($ARGV[0])->content . "\n"; + +1; + +=head1 NAME + +savane_test.pl - Catalyst Test + +=head1 SYNOPSIS + +savane_test.pl [options] uri + + Options: + -help display this help and exits + + Examples: + savane_test.pl http://localhost/some_action + savane_test.pl /some_action + + See also: + perldoc Catalyst::Manual + perldoc Catalyst::Manual::Intro + +=head1 DESCRIPTION + +Run a Catalyst action from the command line. + +=head1 AUTHOR + +Sebastian Riedel, C<sri@oook.de> +Maintained by the Catalyst Core Team. + +=head1 COPYRIGHT + +This library is free software, you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut
new file mode 100644 --- /dev/null +++ b/t/01app.t @@ -0,0 +1,7 @@ +use strict; +use warnings; +use Test::More tests => 2; + +BEGIN { use_ok 'Catalyst::Test', 'Savane' } + +ok( request('/')->is_success, 'Request should succeed' );
new file mode 100644 --- /dev/null +++ b/t/02pod.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod 1.14"; +plan skip_all => 'Test::Pod 1.14 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_files_ok();
new file mode 100644 --- /dev/null +++ b/t/03podcoverage.t @@ -0,0 +1,9 @@ +use strict; +use warnings; +use Test::More; + +eval "use Test::Pod::Coverage 1.04"; +plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; +plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; + +all_pod_coverage_ok();