winzou / StateMachineBundle

MIT License
337 stars 43 forks source link

Disabling callbacks based on Expression language #21

Open tristanbes opened 8 years ago

tristanbes commented 8 years ago

Hello,

Right now we can disable a callback via enabled: false. Wouldn't be awesome if we could put Expressions using the ExpressionEngine instead of a boolean ?

Use case: feature flags This way we could enable/disable callbacks with business logic instead of adding the logic itself inside the callback code wenever possible.

callbacks:
    my_callback:
        ...
        enabled: "object.getSettings().hasFeature('email_enabled')"
winzou commented 8 years ago

Hello,

I'm not a big fan of putting too much business logic in config files. But I see an interesting use case for dynamically disable a third-party callback, instead of writing a new callback with a if to call the third-party callback.

You can already use container parameters in the disabled key, why is that not enough?

tristanbes commented 8 years ago

Because we have multi-tenant application (for example X shops running on the same database and codebase). So each X stores has different configuration/features that are not dumped into the container

pjedrzejewski commented 8 years ago

@winzou Would you merge such feature if we open a PR? :)

winzou commented 8 years ago

@pjedrzejewski Definitely, that's a really interesting feature actually. Should not be complicated to implement.