How do I create dynamic definitions for state mach

2019-04-13 06:16发布

I am trying to write an application that will allow users to manage workflows using the State Machine gem but I am not sure how to proceed in allowing users to define their own state machines using the State Machine gem for ruby.

In the dynamic definitions portion of the gem documentation it says that I should be able to do this by replacing code like this below with a data source.

   def transitions
    [
      {:parked => :idling, :on => :ignite},
      {:idling => :first_gear, :first_gear => :second_gear, :on => :shift_up}
      # ...
    ]
  end

I am not sure how to go about doing this. how do I define the transistions from a database?

1条回答
仙女界的扛把子
2楼-- · 2019-04-13 07:08

Because transitions is just a method, you could implement this any way you want. Here's one possible way.

I'll assume you're using ActiveRecord.

Define a Transition model and an associated transitions table with to, from, and on columns, all strings. Then you can start defining transitions, e.g.:

Transition.create(:from => "parked", :to => "idling", :on => "ignite")

Then in your transitions method:

def transitions
  transitions_data = []
  Transition.all.each do |transition|
    transitions_data << { transition.from.to_sym => transition.to.to_sym, :on => transition.on.to_sym }  
  end
  transitions_data
end

You can then use the other code in the documentation you linked to create a state machine dynamically.

This is just one example, and could be much further optimized. I'll leave that part to you. Hopefully this will give you a good start.

查看更多
登录 后发表回答