Comments (2)
It's not so much about the callbacks. In my opinion the actual event should be deferred and so there should be an event queue (not a callback queue).
Each time a new event is received the first thing to do is to process events from the event queue in the order in which they were received (and put on the queue; to retain proper event ordering).
The challenge is to come up with a nice syntax to specify event deferral in specific states (because so far state is implicitly defined (in the transitions).
Inspired by http://redboltz.wikidot.com/deferred-events, maybe something like this?
events {
event :event2, :state1 => :state2
event :event2, :state2 => :state3
event :event1, :state3 => :state4
event :event1, :state4 => :state5
event :event1, :state5 => :state6
event :event1, :state1 => :state1, :defer => true
event :event1, :state2 => :state2, :defer => true
event :event1, :state1 => :state1, :defer => true
}
callbacks {
on_before { |event| puts "received #{event.name}" }
on_transition { |event| puts "#{event.name} #{event.from} -> #{event.to}" }
}
#...
fsm.event1
fsm.event1
fsm.event2
fsm.event2
# should transition through states state1, state2, state3, state4 and state5
This raise questions about which callbacks should fire. I think the event trace should be:
received event1
received event1
received event2
event2 state1 -> state2
received event2
event2 state2 -> state3
received event1
event1 state3 -> state4
received event1
event1 state4 -> state5
from finite_machine.
Due to complexity and need for storing events in queues before processing, I will skip this feature. In the past storing events asynchronously caused a lot of issues including memory leaks for the majority of users of this library.
from finite_machine.
Related Issues (20)
- Remove on_transition callback HOT 5
- Cancelling inside callbacks HOT 3
- Consider removing the conversion of event names into methods. HOT 1
- Repo description url is broken HOT 1
- Website for the gem is not working HOT 1
- Terminal state HOT 4
- When an error occurs on transition the current state is not "rollback" HOT 2
- https://travis-ci.org/minad/moneta
- Ruby 2.6.0 support (ruby-2.6.0-preview3) HOT 1
- Defining helper methods on machine, not on target HOT 2
- Setting target that responds to to_hash HOT 1
- v0.12.1 missing sync dependency HOT 4
- Java::JavaUtilConcurrent::RejectedExecutionException on jruby HOT 1
- Message Queue Spec sometimes hangs on jruby HOT 2
- alias_target doesn't seem to work HOT 2
- [ Feature Request ] Handling For Multiple State Machines HOT 3
- Unable to define constructors on custom classes HOT 4
- Base class events are not overrided in subclass.
- Errors with Ruby 3.1.2 HOT 2
- Transition does not happen if any_state is used in the definition. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from finite_machine.