Comments (5)
Hi Ilya,
The generic idea will be to do similar thing to docs, that is, use target
to specify external context and then in callbacks instrument the AR instance to persist it's state etc... See thread for similar discussion. In summary, I'm gonna be working to release a version this weekend that fully works with target object and test it against active record!
from finite_machine.
I've released v0.2.0
that allows for easy integration with any object including ActiveRecord. See integration section for further details. Let me know how you getting on with this?
from finite_machine.
Thank you for clearing this up. I see now that the machine is quite standalone, and I'm supposed to plug it into models the DIY way.
from finite_machine.
You can even go further than my example and have for example Account
to be your pure AR state storage and AccountManager
class that actually takes an account instance
class Account < ActiveRecord::Base; end
class AccountManager
attr_accessor :account
def initiailize(account)
@acount = account
end
def manage
@manage = FiniteMachine.define do
target account
end
end
end
account = Account.new
manager = AccountManager.new(account)
manager.manage.debit_account # puts account into :debit state etc...
Possibilities are endless! The sweet part is that in future if you decide to use some other ORM you can do it very easily without much hassle, as a side effect you can test your machine separately from the model itself. Once you implement your solution you can send me pull request so that we can add it to readme?
from finite_machine.
Yes, I never said a standalone machine is bad, it's actually quite the opposite, and you did a fantastic job here! If/when I use it in production, I will let you know. Won't be easy. I work in a team and we currently use the state_machine
gem everywhere. Lots of typing/testing to replace.
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.