added my name to pod stop words
[catagits/Catalyst-Runtime.git] / TODO
CommitLineData
77d892df 1# Known Bugs:
cdb34619 2
3 - Bug ->go or ->visit causes actions which have Args or CaptureArgs called
4 twice when called via ->go or ->visit.
5
6 Test app: http://github.com/bobtfish/catalyst-app-bug-go_chain/tree/master
7
77d892df 8# Compatibility warnings to add:
9
10 - $self->config should warn as config should only ever be called as a
5d94e8f9 11 class method (TESTS).
77d892df 12
13# Proposed functionality / feature additions:
14
15## Log setup needs to be less lame
16
17So Catalyst::Plugin::Log::* can die
18in a fire. Having $c->log_class would be a good start. kane volunteered
19to do some of this.
20
21Simple example: Catalyst::Plugin::Log::Colorful should just be a
22subclass of Catalyst::Log, no ::Plugin:: needed.
23
24See also: Catalyst::Plugin::Log::Dispatch and
25http://github.com/willert/catalyst-plugin-log4perl-simple/tree
26
5f99445c 27## throw away the restarter and allow using the restarters Plack provides
28
5f99445c 29## be smarter about how we use PSGI - not every response needs to be delayed
30 and streaming
31
32# The horrible hack for plugin setup - replacing it:
77d892df 33
34 * Have a look at the Devel::REPL BEFORE_PLUGIN stuff
35 I wonder if what we need is that combined with plugins-as-roles
36
5f99445c 37# App / ctx split:
77d892df 38
39 NOTE - these are notes that t0m thought up after doing back compat for
5d94e8f9 40 catalyst_component_class, may be inaccurate, wrong or missing things
77d892df 41 bug mst (at least) to correct before trying more than the first 2
42 steps. Please knock yourself out on the first two however :)
43
44 - Eliminate actions in MyApp from the main test suite
45 - Uncomment warning in C::C::register_action_methods, add tests it works
46 by mocking out the logging..
47 - Remove MyApp @ISA controller (ask metaclass if it has attributes, and if
48 so you need back compat :/)
49 - Make Catalyst::Context, move the per request stuff in there, handles from
50 main app class to delegate
51 - Make an instance of the app class which is a global variable
52 - Make new instance of the context class, not the app class per-request
53 - Remove the components as class data, move to instance data on the app
54 class (you probably have to do this for _all_ the class data, good luck!)
55 - Make it possible for users to spin up different instances of the app class
56 (with different config etc each)
57 - Profit! (Things like changing the complete app config per vhost, i.e.
58 writing a config loader / app class role which dispatches per vhost to
59 differently configured apps is piss easy)
19c64905 60
61## GSOC
62
4af15971 63### Final steps for GSOC
64
65##### Things that work:
66
878cfbf2 67 - the default container loads all components, calls ACCEPT_CONTEXT() when appropriate, and COMPONENT() when appropriate, behaving like current Catalyst does
68
69 - its possible to create a custom container, and override the components you want. Lifecycle, class, dependencies, all overridable.
70
71 - config files are loaded without Catalyst::Plugin::ConfigLoader
72
73 - per request life cycle somewhat works
74
75 - external modules are loaded just using a custom container, much like Catalyst::Model::Adaptor
76
4af15971 77##### Things that don't work:
78
878cfbf2 79 - expand_component_module
80
878cfbf2 81 - Some back compat
ca35f958 82 - wrappers around setup_component, setup_components in Catalyst.pm
878cfbf2 83 - $instance->expand_modules
84 - search_extra
85 - Crazy tests for things such as:
86 sub COMPONENT {
87 ...
88 *${appclass}::Model::TopLevel::GENERATED::ACCEPT_CONTEXT = sub { ... };
89 ...
90 }
91
4af15971 92##### Need planning, have questions:
93
878cfbf2 94 - per request life cycle
95
96 - sugar - we should discuss the syntax with rafl and edenc
ca35f958 97 - what's missing?
878cfbf2 98
99 - when / when not COMPONENT should be called
100
101 - locate_components service vs setup_components method
102 - can we be more lazy?
103 - should setup_components be a service that things like the ->component lookup
104 can depend on?
105
106 - There are a few more FIXMEs, idk if any relevant here
107
4cb56916 108### Next steps - planned:
109
4af15971 110 - some imports need to get the importing package in Catalyst::IOC
9527a3af 111 - done - needs testing
4af15971 112
4af15971 113 - Back compat for Catalyst.pm moved methods (locate_components)
9527a3af 114 - done - needs testing
4af15971 115
4cb56916 116 - Test custom container
117 - writing some tests which verify that the models you think should be
118 there are there, and that they received their dependencies as arguments
119 - i.e. Model::Bar should get params { foo => $model_foo } when being
120 constructed, etc
121 - Need to test that if you have a standard component Frotz
122 and a customized component Fnar, and Fnar depends on Frotz
123 - And yeah, some tests that the customised components actually work via
124 $c->model('Foo'), and that COMPONENT is called (or not called)
125 as appropiate and that ACCEPT_CONTEXT is called (or not) as appropriate
126
a43734f6 127### Next steps - less planned:
731a4757 128
47500a27 129 - make ACCEPT_CONTEXT and COMPONENT optional in Catalyst::IOC::BlockInjection and Catalyst::IOC::ConstructorInjection
130 - Create COMPONENTSingleton life cycle
131
731a4757 132 - Test cases for extending the container in an application.
334eb9fb 133 - Using the sugar added in the previous item
134 - Test when Model::Foo depends_on Model::Bar
2bf1bef6 135 - Test for component Foo => ( lifecycle => 'Singleton', class => 'My::External::Class', dependencies => { config => depends_on("config") } )
136 - Fix ^^ so that you can get your component's namespaced config nicely.
731a4757 137
88e5cd24 138 - Tests for using the container outside of Catalyst
139 - Custom container which adds some (very simple) services which are initialized from
140 the application config file (note plain services, not components)
141 - Depend on (and test) these inside Catalyst
142 - Test loading container outside Catalyst, and these services working
143 - Test Catalyst / MyApp is not loaded
4634d3ad 144
f5dbaa05 145#### Extending my app, notes
146
147Basically try to implement something like this (starting out without the sugar!), and see how it breaks
148and what needs to be done to fix it!
149
150##### Eventual syntax
151
152package MyApp::Container;
153use Catalyst::IOC;
154
2bf1bef6 155 container $self, as {
f5dbaa05 156 container model => as {
157 component Foo => (); # As per default!
158 component Bar => (dependencies => ['/model/Foo']); # Magic!
159 component Baz => ( lifecycle => 'InstancePerContext );
160 component Quux => ( lifecycle => 'Singleton' ); # ACCEPT_CONTEXT not called
2bf1bef6 161 # Catalyst::Model::Adaptor example
162 conponent Fnar => ( lifecycle => 'Singleton', class => 'My::External::Class', dependencies => { config => depends_on('config')} );
163 # ^^ FIXME - gets whole config, not Model::Foo
164 # There should be a 'nice' way to get the 'standard' config
f5dbaa05 165 };
166 # Note - implementation of BB may need to be changed to support making sure existing
167 # services actually get overridden. not sure how the default container behaves when doing that
168 # above code would build the constructor injection as it currently does,
169 # defaulting to the class name in the right namespace as declared by the surrounding container
170 # as well as adding using the catalyst-specific service class
171 };
172
1731;