Enterprise Software is all about wizards

This does bring up an interesting point about flow control.

Even when you're not using a wizard-style intereface, there will be
times when the application needs to have a slightly more complex
behavior than a simple redirect or render. Say, a chain of redirects
that happens only when the user first signs up.

It seems ugly to embed this across several actions and controllers.
.
I've been thinking about the possibility of separating program flow
from controllers / actions. To make a kind of DSL that says, "under
these conditions, follow this path"

Have done some work on a plugin - nothing that's release-worthy though.

Starr

Even when you're not using a wizard-style intereface, there will be
times when the application needs to have a slightly more complex
behavior than a simple redirect or render. Say, a chain of redirects
that happens only when the user first signs up.

Couldn't you handle this in one controller? Place cross-controller
code in helpers?

I've been thinking about the possibility of separating program flow
from controllers / actions.

I thought controllers controlled application flow. Controllers don't
have to map to just one model. Right? (Or am I just crazy?)

Hi Austin,

You're right - for most cases controllers handel application flow just
fine. After you create a record, you'll probably want to redirect to
the list of records, etc.

But there are certain cases where you need to completely change this
up. For example: An app I'm working on has two ways you can sign up -
full and partial. The program flow looks something like this (it might
look weird here, but makes sense in context of the project):

Full: User.signup >> Billing.add_card >> Dashboard.index
Partial: User.signup >> Subscription.confirm >> Project.show

Sure, I could add conditional redirects to each of these actions. But
things get tangled up pretty quickly.

Also, I could make a new single controller that wraps all of these
controller/action pairs. That wouldn't be a bad idea, actually. I think
the only way to do that would be to use components. Aren't those being
phased out?

Anyway, I don't have the answer to all of this - but its an interesting
problem.

Cheers
Starr