Test app: http://github.com/bobtfish/catalyst-app-bug-go_chain/tree/master
- - Bricas' Exception blog post
-
- http://bricas.vox.com/library/post/catalyst-exceptionclass.html
-
- Broken by recent exception refactoring
-
# Compatibility warnings to add:
- $self->config should warn as config should only ever be called as a
- class method.
+ class method (TESTS).
# Proposed functionality / feature additions:
## App / ctx split:
NOTE - these are notes that t0m thought up after doing back compat for
- _component_class, may be inaccurate, wrong or missing things
+ catalyst_component_class, may be inaccurate, wrong or missing things
bug mst (at least) to correct before trying more than the first 2
steps. Please knock yourself out on the first two however :)
writing a config loader / app class role which dispatches per vhost to
differently configured apps is piss easy)
+## GSOC
+
+### Next steps - less planned:
+
+ - Creating service()-like sugar for component
+
+ - Test cases for extending the container in an application.
+ - Using the sugar added in the previous item
+ - Test when Model::Foo depends_on Model::Bar
+ - Test for component Foo => ( lifecycle => 'Singleton', class => 'My::External::Class', dependencies => { config => depends_on("config") } )
+ - Fix ^^ so that you can get your component's namespaced config nicely.
+
+ - Tests for using the container outside of Catalyst
+ - Custom container which adds some (very simple) services which are initialized from
+ the application config file (note plain services, not components)
+ - Depend on (and test) these inside Catalyst
+ - Test loading container outside Catalyst, and these services working
+ - Test Catalyst / MyApp is not loaded
+
+#### Extending my app, notes
+
+Basically try to implement something like this (starting out without the sugar!), and see how it breaks
+and what needs to be done to fix it!
+
+##### Eventual syntax
+
+package MyApp::Container;
+use Catalyst::IOC;
+
+ container $self, as {
+ container model => as {
+ component Foo => (); # As per default!
+ component Bar => (dependencies => ['/model/Foo']); # Magic!
+ component Baz => ( lifecycle => 'InstancePerContext );
+ component Quux => ( lifecycle => 'Singleton' ); # ACCEPT_CONTEXT not called
+ # Catalyst::Model::Adaptor example
+ conponent Fnar => ( lifecycle => 'Singleton', class => 'My::External::Class', dependencies => { config => depends_on('config')} );
+ # ^^ FIXME - gets whole config, not Model::Foo
+ # There should be a 'nice' way to get the 'standard' config
+ };
+ # Note - implementation of BB may need to be changed to support making sure existing
+ # services actually get overridden. not sure how the default container behaves when doing that
+ # above code would build the constructor injection as it currently does,
+ # defaulting to the class name in the right namespace as declared by the surrounding container
+ # as well as adding using the catalyst-specific service class
+ };
+
+1;
+
+##### To start with
+
+package MyApp::Container;
+use Moose;
+
+extends 'Catalyst::Container;
+
+after BUILD => sub {
+ my $self = shift;
+ my $model_container = $self->get_sub_container('model');
+ my $service = Catalyst::IOC::ConstructorInjection->new(
+ name => 'Baz',
+ class => 'MyApp::Model::Baz',
+ dependencies => [
+ depends_on( '/application_name' ),
+ depends_on( '/config' ),
+ depends_on( '/model/Foo' ),
+ ],
+ lifecycle => 'InstancePerContext',
+ );
+ $model_container->add_service( 'Foo', $service );
+};
+
+### To polish off / t0m review
+
+ locate_components service vs setup_components method
+ - can we be more lazy?
+ - should setup_components be a service that things like the ->component lookup
+ can depend on?
+
+ - my $accept_context_args = $self->param('accept_context_args');
+ + my $accept_context_args = $params{accept_context_args};
+ ^^ This (may be) wrong! I am thinking the service should be allowed to mangle the
+ accept_context args, no?
+ Without this change, the user could make a custom service which mangled the param, and use
+ Catalyst/IOC/Service/WithAcceptContext.pm, with this change, that module will always see the
+ un-mangled version?? However, without this change, shit doesn't work...
+
+### Known issues
+
+ - Broken $instance->expand_modules() in setup_components and figure
+ out later how to bring it back
+
+ - expand_component_module
+
+ - People wrapping locate_components in Catalyst.pm