Add bang method variants for flow actions#63
Merged
saturnflyer merged 1 commit intomainfrom Feb 17, 2026
Merged
Conversation
Define Circulator::InvalidTransition and auto-define a host-namespaced subclass (e.g. Widget::InvalidTransition) when a flow is declared. Bang methods (status_approve!) raise InvalidTransition when no transition exists or a guard rejects, with distinct messages for each case. Non-bang methods remain unchanged. Add flow! instance method and variant: keyword to flow so that callers can select method variants (e.g. flow(:approve, :status, variant: :bang)). Unknown variants raise ArgumentError. FLOW_VARIANTS drives method definition: each key maps to a define_<variant>_flow_method, so adding a variant without implementing its define method raises NoMethodError at class load time. Added: bang method variants for flow actions Added: Circulator::InvalidTransition exception class Added: host-namespaced InvalidTransition subclass per class with flows Added: flow! instance method and variant: keyword on flow Added: FLOW_VARIANTS registry that drives method definition
2dfe694 to
673d8a0
Compare
jeffdlange
approved these changes
Feb 17, 2026
jeffdlange
left a comment
There was a problem hiding this comment.
Really good explanation and example in the main description. Thank you!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Circulator::InvalidTransitionbase exception and auto-defineHostClass::InvalidTransitionsubclass when a flow is declared, so host apps can rescue their own namespaced exception without coupling to Circulatorstatus_approve!) that raiseInvalidTransitionwith distinct messages for missing transitions vs guard rejectionsflow!instance method andvariant:keyword toflowfor extensible dispatch (e.g. futureflow?/variant: :check)variant:values raiseArgumentErrorExamples
Test plan
to:lambdasflow_target:flowsflow!andvariant: :bangvariant:raisesArgumentError