Name
    Catalyst::Plugin::ConfigComponents - Creates components from config
    entries

Version
    0.1.$Revision: 45 $

Synopsis
       # In your Catalyst application
       package MyApp;

       use Catalyst qw(... ConfigComponents ...);

       __PACKAGE__->setup;

       # In your applications config file
       <component name="Model::Help">
          <base_class>MyExternal::Model::HelpE<lt>/base_class>
          <base_class>Catalyst::ModelE<lt>/base_class>
       </component>

       # Do not create MyApp::Model::Help this module will do it for you

       # In a controller this will call the get_help method in
       # the class MyExternal::Model::Help
       my $help = $c->model( q(Help) )->get_help( ... );

Description
    When the application starts this module creates Catalyst component class
    definitions using config information. The defined class inherits from
    the list of base classes referenced in the config file

    This code was originally posted to the Catalyst mailing list by Dagfinn
    Ilmari Mannsker as a patch in response to an idea by Castaway. I
    thought it would be better as a plugin and have extended it to handle MI

Configuration and Environment
    Specify a *setup_components* config option to pass additional options
    directly to Module::Pluggable. To add additional search paths, specify a
    key named *search_extra* as an array reference. Items in the array
    beginning with :: will have the application class name prepended to
    them. Add a key named *exclude_pattern* as a regular expression to match
    component names to exclude, e.g. :: \. \# to exclude emacs temporary
    files

Subroutines/Methods
  setup_components
    This overloads the core method. For each config key matching \A
    ([MVC]|Model|View|Controller) :: it checks if the corresponding
    component already exists, and if it doesn't this method creates it on
    the fly. The base class is set to
    "MyApp->config->{$component}->{base_class}" if it exists,
    "Catalyst::$component" (with [MVC] expanded to the full component type)
    otherwise. The *base_class* can be an array ref in which case the
    defined class will inherit from all classes in the list (multiple
    inheritance).

  _expand_component_type
    Expands the MVC abbreviations to Model, View and Controller respectively

  _load_component_and_children
    Calls "setup_component" for the given component and all it's inner
    packages

Diagnostics
    None

Dependencies
    Catalyst::Utils
    Devel::InnerPackage
    Module::Pluggable::Object

Incompatibilities
    There are no known incompatibilities in this module

Bugs and Limitations
    There are no known bugs in this module. Please report problems to the
    address below. Patches are welcome

Author
    Peter Flanigan, "<Support at RoxSoft.co.uk>"

License and Copyright
    Copyright (c) 2008 Peter Flanigan. All rights reserved

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself. See perlartistic

    This program is distributed in the hope that it will be useful, but
    WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE

