Catalyst-Manual-5.9007/000755 000767 000024 00000000000 12141775240 015074 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/Changes000644 000767 000024 00000026751 12141775230 016401 0ustar00etherstaff000000 000000 Revision history for Catalyst-Manual 5.9007 2013-05-06 - Fix pod warnings (RT#83398 - thanks, Paul Waring!) - Fix repository metadata (thanks, Lars Lars Dɪᴇᴄᴋᴏᴡ) 5.9006 2012-11-08 - fix bad =head1 (Kennedy Clark) 5.9005 2012-11-01 - Fix minor typos RT 78545, thanks Joe Axford - Update auth class name RT 77322 Thanks Joe Axford - Fix typo RT #77247 Thanks John Deighan 5.9004 4th May 2012 - PSGI Compat changes - Small code changes (thanks sockmonk) - Small changes to Manual::Components 5.9003 17 Feb 2012 - Mention PSGI in Manual::Ingro RT 74872 (thanks William Blunn). - Better docs of :Global inspired by RT 74869 (thanks William Blunn) - Highlight the importance of uncommenting the template line in the list action - Clarify docs for nginx in non-root - a trailing slash on the location block is very much needed. - Clarified Data::Dumper usage. RT#71410 Thanks to Bill Corr - Mention Chef deployment in Manual::Deployment (thanks to Alexey Melezhik) 5.9002 3 Sept 2011 - Tutorial - Switch to 'catalyst' vs. 'root' user in VM - Add notes about X Windows installation - Misc small adjustments 5.9001 2 Sept 2011 - Tutorial: - Migrate Tutorial to use of a downloadable Virtual Machine - Switch tutorial to Catalyst::Plugin::StatusMessage (vs. flash and query parameters) - Switch to use of local::lib - Add "next chapter links" (RT #31164) - Test all the tutorial code and make sure it's all working - Lots of other Tutorial cleanup - Update to Catalyst 5.9 and latest versions of all modules - Clean up RT ticket queue (#68379, 68377, 68376, etc.) - Other misc fixes/changes 5.9000 16 Aug 2011 - Copy editing to make more sense in deployment documentation. 5.8901 7 Aug 2011 - TRIAL RELEASE - Added Catalyst::Manual::Deployment containing the documentation which used to be in Catalyst::Engine::*, updated for the new PSGI engine. 5.8008 2 Aug 2011 - Tutorial chaper 3 - Remove note about hacking tests to require MyApp so that MyApp->path_to works. Application components should compile independently, and therefore explain this and show configuring components from the app class. - Tutorial appendix - Fix confusing mix of singular and plural table names in the MySQL section to be plural, as per the rest of the tutorial. - Cookbook - Remove suggestion to generate RSS feeds using Template Toolkit. This is a horrible idea, and it's very very easy to generate an invalid feed. 5.8007 29 Feb 2011 - Tutorial - Switch to use of DBIx::Class::PassphraseColumn for hashed & salted passwords. It's much more flexible than the previously used DBIx::Class::EncodedColumn. 5.8006 29 Feb 2011 - Fix metadata to refer to the new git repository - Cookbook - Small fixes and typos - Tutorial - Various typo fixes. - RT #57989: typo - RT #61486: correct instructions for MySQL - RT #62095: prevent XSS - RT #62095: persistent message on /login - RT #63057: typo - RT #64087: typos - RT #64126: Use precise name of licence - RT #64126: typos - RT #67820: fix relationship decleration - Do not recommend FastMmap - DevelopmentProcess - RT #62610: typo 5.8005 27 Oct 2010 - Tutorial: - Add DATABASE CONFIG SWITCHING USING MULTIPLE CONFIG FILES section - Critical bugfix on index page. 5.8004 17 Feb 2010 - Tutorial: - Add foreign key support for SQLite (huge thanks to Caelum for that and other good edits!) - Add "Quick Start" to Intro (Chapter 1) - Switch to use of "-r" to auto-restart the dev svr - Update for latest available Debian package versions - Switch to individual files for example code vs. tarballs - Switch to 'done_testing' and shorter 'prove' args for testing chapter - Misc typo fixes - Other: - Minor Cookbook edits 5.8003 28 Dec 2009 - Variety of typo fixes - Fix incorrectness re :Global and :Local - Update DevelopmentProcess.pod 5.8002 15 Nov 2009 - Update tutorial to match latest prepacked versions in Debian 5 - Add FormHandler branch (with thanks to gshank!) - Misc cleanup/freshing up of tutorial. - Fix indenting issue (with thanks to Kiffin Gish) - Integrate tome fix branch (with thanks to tome!) - Add a "negative" test to confirm that test02 does not have an admin create link - Integrate sqlite3 clarification and link by wolfman2000 from tutorial_role_updates branch - Fix Pod typos in ::Internals (RT#51488) - Fix Pod typos in the Cookbook (RT#51466) - Fix a Test::Pod failure and make Debian happier. - Typo fixes from garu - Misc minor and/or typo fixes 5.8001 06 Oct 2009 - Tutorial - Fix RT #46760 - Fix RT #46618 - Fix cat-install script URL - Fix typos - Replace reference to deprecated CatalystX::ListFramework::Builder with Catalyst::Plugin::AutoCRUD - Other - Lots of updates thanks to t0m - Update development process / core team docs - Cookbook fixes WRT authorization - Better description of application setup process - Fix some links - Normalise spacing 5.8000 27 May 2009 - Tutorial: - Update for Catalyst 5.80 - Update to "depluralize" the database names (big thanks to Kiffin Gish!) - Switch back to including numbers in chapter names (for proper sorting) - Add section to Ch 4: "Moving Complicated View Code to the Model" - Add section to Ch 3: "RenderView's 'dump_info' Feature" - Misc fixes and updates (thanks to Anne Wainwright) - Other: - Add some 5.8 and Moose-specific material to the new CatalystAndMoose.pod (thanks to t0m and Sebastian Willert) 5.7021 8 May 2009 - Tutorial: - Switch to SimpleDB for auth - Switch to use of DBIx::Class::EncodedColumn for hashed & salted passwords - Re-write PostgreSQL section in appendix - Remove "create=dynamic" and only cover "create=static" for DBIC helper - Other: - Rewrite / clean up a big chunk of Catalyst::Manual::Intro (Ian Wells) - There is no Catalyst::Config, fix reference to it. (t0m) - Misc minor adjustments 5.7020 12 Mar 2009 - Tutorial: - Fix errors in FormFu chapter 5.7019 11 Mar 2009 - Tutorial: - Change from the use of "part" to refer to each .pod file for the tutorial in favor of the more intuitive word "chapter." "Part" was just to ambiguous (e.g., does "prior part" refer to the prior .pod file or the prior section in the current .pod file). - Move use of "load_namespaces" for DBIC from BasicCRUD to MoreCatalystBasics - Update the "Table of Contents" in Tutorial.pod to match the current sections - Fix a few typos 5.7018 8 Mar 2009 - Tutorial: - Add a new section to BasicCRUD covering more advanced features of DBIC ("EXPLORING THE POWER OF DBIC") - Convert from Ubuntu to Debian 5 live CD as the recommended way to do the tutorial (all code and examples updated and tested to match) - Removed Catalyst::Plugin::Authorization::ACL from Authorization.pod in favor of a "chained and model-based" approach - More conversion to Chained dispatch - Suggestions and fixes with thanks to mintywalker@gmail.com - DBIC-related updates in MoreCatalystBasics - Fix misplaced "=over 4" in previous release - Reword warning about not using GET for delete based on input from kd - Lots of other small adjustments 5.7017 28 Feb 2009 - Tutorial: - Main change = adding Chained dispatch starting in BasicCRUD (Part 4) - Change FormFu tutorial to not use deprecated methods (Del Merritt) - MoreCatalystBasics - Additional clarification about TTSite (Del Merritt) - Tutorial::Authorization - Corrects the ACL for "/books/delete" - Additional comments (Del Merritt) - Tutorial::AdvancedCRUD::FormFu - suggest how the intrepid user might now proceed, having completed the Tutorial. (Del Merritt) - Fix typo in Authorization section (RT #42091) - Fix typo in BasicCRUD (RT #42034) - Resolve outstanding typo and suggestions in MoreCatalystBasics (RT #41491) - Fix DBIC create for MySQL in Appendix (Jarom) - Other: - Misc minor updates - Add some "getting started" links to the Catalyst::Manual page 5.7016 28 Dec 2008 - Tutorial: - Updates to make Parts 8 & 9 run correctly - Adjust URLs for final config tarballs - Add note about changes across different C::Devel on how plugins enabled - Misc minor updates 5.7015 15 Dec 2008 - Tutorial: - Remove TTSite from Tutorial (thanks to dhoss for the help) - Update Tutorial for Ubuntu 8.10 (therefore update to Cat v5.7014, C::Devel v1.07, DBIC v0.08010, etc.) - Reorganize MoreCatalystBasics.pod so user is able to run the app the first time much earlier and build on it from there (running the app each time along the way) - Update URL for latest copy in SVN to match new location of repo - Other: - Misc typo fix - Change use of Class::C3 to MRO::Compat, as rafl tells me this is best practice, and gives you native next::method in 5.10. (t0m) 5.7014 04 Nov 2008 - Remove a reference to a FOREACH loop that did not exist (RT #39046) - Changed some Template Toolkit links to perldoc links (RT #38354) - Fix Template Toolkit website link (RT #37574) - Fix part numbering (RT #37963) - Improvements to the ACCEPT_CONTEXT docs in Manual::Intro - Happy Election Day, America! 5.7013 09 Jul 2008 - revert to use Catalyst qw/@plugins/ style 5.7012 29 May 2008 - Expurgation of all use of default :Private and index :Private in favour of default :Path and index :Path :Args(0) - Expurgation of all yaml as configuration format - Major updates to tutorial, thanks hkclark and gerda 5.7011 16 May 2008 - added warnings and poiinters to newer examples in HTML::Widget, and Authentication parts of the tutorial. - pod fix (RT #32636) 5.701004 09 Apr 2008 - rename placeholder back to Manual.pm, this will probably trigger a ppm bug but that's ppm's problem 5.701003 08 Oct 2007 - Patch to Cookbook from bits. 5.701002 25 Aug 2007 5.701001 17 Aug 2007 - Changes to mocation of lib/Catalyst/Manual.pod to lib/Catalyst/ManualPlaceholder.pm to keep cpan indexer happy. 5.700704 08 Aug 2007 - Updated mailing list addresses to scsys.co.uk domains 5.700703 - Cookbook: Updated development server deployment instructions, and included a better description of the POE engine. 5.700702 26 April 2007 - Switch to Module::Install 5.700701 19 April 2007 - Removal of WritingPlugins. ExtendingCatalyst is now the main resource for extensions to the framework and the application. 5.700501 10 November 2006 - Matches Catalyst-Runtime 5.7005 5.700401 07 November 2006 - First release to CPAN; matches Catalyst-Runtime 5.7004. 5.700301 20 October 2006 - Splitting manual into its own distro Catalyst-Manual-5.9007/inc/000755 000767 000024 00000000000 12141775240 015645 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/lib/000755 000767 000024 00000000000 12141775240 015642 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/Makefile.PL000644 000767 000024 00000001165 12141773666 017063 0ustar00etherstaff000000 000000 use strict; use warnings; use inc::Module::Install 0.87; use Module::Install::AuthorTests; use Module::Install::AuthorRequires; name 'Catalyst-Manual'; all_from 'lib/Catalyst/Manual.pm'; author 'Kieren Diment '; license 'perl'; test_requires 'Test::More'; author_requires 'Pod::Simple' => '3.11'; # L support author_requires 'Test::Pod' => '1.14'; author_requires 'Test::Pod::Coverage' => '1.04'; author_tests 't/author'; auto_install; # r/w: catagits@git.shadowcat.co.uk:Catalyst-Manual.git resources repository => 'git://git.shadowcat.co.uk/catagits/Catalyst-Manual.git'; WriteAll; Catalyst-Manual-5.9007/MANIFEST000644 000767 000024 00000004001 12141775240 016220 0ustar00etherstaff000000 000000 Changes inc/Module/AutoInstall.pm inc/Module/Install.pm inc/Module/Install/AuthorRequires.pm inc/Module/Install/AuthorTests.pm inc/Module/Install/AutoInstall.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/Fetch.pm inc/Module/Install/Include.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Win32.pm inc/Module/Install/WriteAll.pm lib/Catalyst/Manual.pm lib/Catalyst/Manual/About.pod lib/Catalyst/Manual/Actions.pod lib/Catalyst/Manual/CatalystAndMoose.pod lib/Catalyst/Manual/Components.pod lib/Catalyst/Manual/Cookbook.pod lib/Catalyst/Manual/Deployment.pod lib/Catalyst/Manual/Deployment/Apache/FastCGI.pod lib/Catalyst/Manual/Deployment/Apache/mod_perl.pod lib/Catalyst/Manual/Deployment/DevelopmentServer.pod lib/Catalyst/Manual/Deployment/FastCGI.pod lib/Catalyst/Manual/Deployment/IIS/FastCGI.pod lib/Catalyst/Manual/Deployment/lighttpd/FastCGI.pod lib/Catalyst/Manual/Deployment/nginx/FastCGI.pod lib/Catalyst/Manual/Deployment/SharedHosting.pod lib/Catalyst/Manual/DevelopmentProcess.pod lib/Catalyst/Manual/ExtendingCatalyst.pod lib/Catalyst/Manual/Internals.pod lib/Catalyst/Manual/Intro.pod lib/Catalyst/Manual/Plugins.pm lib/Catalyst/Manual/Tutorial.pod lib/Catalyst/Manual/Tutorial/01_Intro.pod lib/Catalyst/Manual/Tutorial/02_CatalystBasics.pod lib/Catalyst/Manual/Tutorial/03_MoreCatalystBasics.pod lib/Catalyst/Manual/Tutorial/04_BasicCRUD.pod lib/Catalyst/Manual/Tutorial/05_Authentication.pod lib/Catalyst/Manual/Tutorial/06_Authorization.pod lib/Catalyst/Manual/Tutorial/07_Debugging.pod lib/Catalyst/Manual/Tutorial/08_Testing.pod lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD.pod lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormBuilder.pod lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormFu.pod lib/Catalyst/Manual/Tutorial/09_AdvancedCRUD/09_FormHandler.pod lib/Catalyst/Manual/Tutorial/10_Appendices.pod lib/Catalyst/Manual/WritingPlugins.pod Makefile.PL MANIFEST This list of files META.yml README t/01-use.t t/author/pod-coverage.t t/author/pod.t TODO Catalyst-Manual-5.9007/META.yml000644 000767 000024 00000001200 12141775235 016342 0ustar00etherstaff000000 000000 --- abstract: "The Catalyst developer's manual" author: - 'Catalyst Contributors, see Catalyst.pm' - 'Kieren Diment ' build_requires: ExtUtils::MakeMaker: 6.36 Test::More: 0 configure_requires: ExtUtils::MakeMaker: 6.36 distribution_type: module dynamic_config: 1 generated_by: 'Module::Install version 1.06' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Catalyst-Manual no_index: directory: - inc - t resources: license: http://dev.perl.org/licenses/ repository: git://git.shadowcat.co.uk/catagits/Catalyst-Manual.git version: 5.9007 Catalyst-Manual-5.9007/README000644 000767 000024 00000000601 12141773642 015755 0ustar00etherstaff000000 000000 Catalyst-Manual This is just the Catalyst manual. If you want to develop Catalyst apps, please install Catalyst::Devel. If you'd like a tutorial and a full example Catalyst application, please install Task::Catalyst::Tutorial. If you just want to run Catalyst applications, you probably don't need this manual, but you do need Catalyst::Runtime. http://dev.catalystframework.org/ Catalyst-Manual-5.9007/t/000755 000767 000024 00000000000 12141775240 015337 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/TODO000644 000767 000024 00000000702 12141773642 015567 0ustar00etherstaff000000 000000 ::Internals - Needs work ::ExtendingCatalyst - Should fix / merge action docs ::Plugins - Needs all those plugins evaluating and stuff replacing - Update obsolete list ::DevelopmentProcess - Needs more repos stuff adding ::Intro - Has way too much stuff in ::Cookbook - Re-add section on checking roles EVERYTHING - Paul Makepeace - stuff he threatened to document from mailing list - Kill all use base - Kill all use parentCatalyst-Manual-5.9007/t/01-use.t000644 000767 000024 00000000074 12141773642 016543 0ustar00etherstaff000000 000000 use strict; use warnings; use Test::More tests => 1; ok(1); Catalyst-Manual-5.9007/t/author/000755 000767 000024 00000000000 12141775240 016641 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/t/author/pod-coverage.t000644 000767 000024 00000000107 12141773642 021403 0ustar00etherstaff000000 000000 use Test::More; use Test::Pod::Coverage 1.04; all_pod_coverage_ok(); Catalyst-Manual-5.9007/t/author/pod.t000644 000767 000024 00000000071 12141773642 017612 0ustar00etherstaff000000 000000 use Test::More; use Test::Pod 1.14; all_pod_files_ok(); Catalyst-Manual-5.9007/lib/Catalyst/000755 000767 000024 00000000000 12141775240 017426 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/lib/Catalyst/Manual/000755 000767 000024 00000000000 12141775240 020643 5ustar00etherstaff000000 000000 Catalyst-Manual-5.9007/lib/Catalyst/Manual.pm000644 000767 000024 00000003510 12141775230 021177 0ustar00etherstaff000000 000000 # Manual.pm # Copyright (c) 2006 Jonathan Rockway package Catalyst::Manual; use strict; use warnings; our $VERSION = '5.9007'; =head1 NAME Catalyst::Manual - The Catalyst developer's manual =head1 SYNOPSIS perldoc Catalyst::Manual::Intro perldoc Catalyst::Manual::Tutorial =head1 SEE ALSO Install L to install all the dependencies you need to follow along with the Tutorial. You can also refer to L for more information on installation options. Some "Getting Started" Links: =over 4 =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =item * L =back =head2 Books For additional information on Catalyst, there are currently two books available: =over 4 =item * The Definitive Guide to Catalyst: Writing Extendable, Scalable and Maintainable Perl-Based Web Applications By: Kieren Diment, Matt Trout Available July 12, 2009 ISBN 10: 1-4302-2365-0 ISBN 13: 978-1-4302-2365-8 http://www.apress.com/book/view/9781430223658 =item * Accelerating Perl Web Application Development By: Jonathan Rockway Published December, 2007 ISBN 10: 1847190952 ISBN 13: 978-1-847190-95-6 http://www.packtpub.com/catalyst-perl-web-application/book =back =head1 AUTHORS Catalyst Contributors, see Catalyst.pm =head1 COPYRIGHT This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; Catalyst-Manual-5.9007/lib/Catalyst/Manual/About.pod000644 000767 000024 00000034253 12141773642 022434 0ustar00etherstaff000000 000000 =head1 NAME Catalyst::Manual::About - The philosophy of Catalyst =head1 DESCRIPTION This document is a basic introduction to the I of Catalyst. It does not teach you how to write Catalyst applications; for an introduction to that please see L. Rather, it explains the basics of what Catalyst is typically used for, and why you might want to use Catalyst to build your applications. =head2 What is Catalyst? The short summary Catalyst is a web application framework. This means that you use it to help build applications that run on the web, or that run using protocols used for the web. Catalyst is designed to make it easy to manage the various tasks you need to do to run an application on the web, either by doing them itself, or by letting you "plug in" existing Perl modules that do what you need. There are a number of things you typically do with a web application. For example: =over 4 =item * Interact with a web server If you're on the web, you're relying on a web server, a program that sends files over the web. There are a number of these, and your application has to do the right thing to make sure that your program works with the web server you're using. If you change your web server, you don't want to have to rewrite your entire application to work with the new one. =item * Do something based on a URI It's typical for web applications to use URIs as a main way for users to interact with the rest of the application; various elements of the URI will indicate what the application needs to do. Thus, C will add a person named "John" whose title is "President" to your database, and C will go to a "display" of item 23 in your catalog, and C will display the status of order 7582, and C will display a form to add a comment to page 8. Your application needs to have a regular way of processing these URIs so it knows what to do when such a request comes in. =item * Interact with a data store You probably use a database to keep track of your information. Your application needs to interact with your database, so you can create, edit, and retrieve your data. =item * Handle forms When a user submits a form, you receive it, process it to make sure it's been filled in properly, and then do something based on the result--submit an order, update a record, send e-mail, or return to the form if there's an error. =item * Display results If you have an application running on the web, people need to see things. You usually want your application displayed on a web browser, in which case you will probably be using a template system to help generate HTML code. But you might need other kinds of display, such as PDF files, or other forms of output, such as RSS feeds or e-mail. =item * Manage users You might need the concept of a "user", someone who's allowed to use your system, and is allowed to do certain things only. Perhaps normal users can only view or modify their own information; administrative users can view or modify anything; normal users can only order items for their own account; normal users can view things but not modify them; order-processing users can send records to a different part of the system; and so forth. You need a way of ensuring that people are who they say they are, and that people only do the things they're allowed to do. =item * Develop the application itself When you're writing or modifying the application, you want to have access to detailed logs of what it is doing. You want to be able to write tests to ensure that it does what it's supposed to, and that new changes don't break the existing code. =back Catalyst makes it easy to do all of these tasks, and many more. It is extremely flexible in terms of what it allows you to do, and very fast. It has a large number of "components" and "plugins" that interact with existing Perl modules so that you can easily use them from within your application. =over 4 =item * Interact with a web server? Catalyst lets you use a number of different ones, and even comes with a built-in server for testing or local deployment. =item * Do something based on a URI? Catalyst has extremely flexible systems for figuring out what to do based on a URI. =item * Interact with a data store? Catalyst has many plugins for different databases and database frameworks, and for other non-database storage systems. =item * Handle forms? Catalyst has plugins available for several form creation and validation systems that make it easy for the programmer to manage. =item * Display results? Catalyst has plugins available for a number of template modules and other output packages. =item * Manage users? Catalyst has plugins that handle sessions, authentication, and authorization, in any way you need. =item * Developing the application? Catalyst has detailed logging built-in, which you can configure as necessary, and supports the easy creation of new tests--some of which are automatically created when you begin writing a new application. =back =head3 What B Catalyst? Catalyst is not an out-of-the-box solution that allows you to set up a complete working e-commerce application in ten minutes. (There are, however, several systems built on top of Catalyst that can get you very close to a working app.) Catalyst is designed for flexibility and power; to an extent, this comes at the expense of simplicity. Programmers have many options for almost everything they need to do, which means that any given need can be done in many ways, and finding the one that's right for you, and learning the right way to do it, can take time. TIMTOWDI works both ways. Catalyst is not designed for end users, but for working programmers. =head2 Web programming: The Olden Days Perl has long been favored for web applications. There are a wide variety of ways to use Perl on the web, and things have changed over time. It's possible to handle everything with very raw Perl code: print "Content-type: text/html\n\n

Hello World!

"; for example, or my @query_elements = split(/&/, $ENV{'QUERY_STRING'}); foreach my $element (@query_elements) { my ($name, $value) = split(/=/, $element); # do something with your parameters, or kill yourself # in frustration for having to program like this } Much better than this is to use Lincoln Stein's great L module, which smoothly handles a wide variety of common tasks--parameter parsing, generating form elements from Perl data structures, printing http headers, escaping text, and very many more, all with your choice of functional or object-oriented style. While L was revolutionary and is still widely used, it has various drawbacks that make it unsuitable for larger applications: it is slow; your code with it generally combines application logic and display code; and it makes it very difficult to handle larger applications with complicated control flow. A variety of frameworks followed, of which the most widely used is probably L, which encourages the development of modular code, with easy-to-understand control-flow handling, the use of plugins and templating systems, and the like. Other systems include L, which is designed for use with XML running under mod_perl; L--upon which Catalyst was originally based--designed for the easy development of powerful web databases; L, which does a great deal of automation in helping to set up web sites with many complex features; and Ruby on Rails (see L), written of course in Ruby and among the most popular web development systems. It is not the purpose of this document to criticize or even briefly evaluate these other frameworks; they may be useful for you and if so we encourage you to give them a try. =head2 The MVC pattern MVC, or Model-View-Controller, is a model currently favored for web applications. This design pattern is originally from the Smalltalk programming language. The basic idea is that the three main areas of an application--handling application flow (Controller), processing information (Model), and outputting the results (View)--are kept separate, so that it is possible to change or replace any one without affecting the others, and so that if you're interested in one particular aspect, you know where to find it. Discussions of MVC often degenerate into nitpicky arguments about the history of the pattern, and exactly what "usually" or "should" go into the Controller or the Model. We have no interest in joining such a debate. In any case, Catalyst does not enforce any particular setup; you are free to put any sort of code in any part of your application, and this discussion, along with others elsewhere in the Catalyst documentation, are only suggestions based on what we think works well. In most Catalyst applications, each branch of MVC will be made of up of several Perl modules that can handle different needs in your application. The purpose of the B is to access and modify data. Typically the Model will interact with a relational database, but it's also common to use other data sources, such as the L search engine or an LDAP server. The purpose of the B is to present data to the user. Typical Views use a templating module to generate HTML code, using L