transitions - еще одна реализация конечных автоматов на Ruby

Все уже знают, что такое конечные автоматы, поэтому я просто приведу пример DSL ;)

class Product
  include ActiveModel::Transitions

  state_machine do
    state :available # first one is initial state
    state :out_of_stock, :exit => :exit_out_of_stock
    state :discontinued, :enter => lambda { |product| product.cancel_orders }

    event :discontinued do
      transitions :to => :discontinued, :from => [:available, :out_of_stock], :on_transition => :do_discontinue
    end
    event :out_of_stock, :success => :reorder do
      transitions :to => :out_of_stock, :from => [:available, :discontinued]
    end
    event :available do
      transitions :to => :available, :from => [:out_of_stock], :guard => lambda { |product| product.in_stock > 0 }
    end
  end
end

Библиотека transitions имеет большое количество интересных возможностей, которые хорошо описаны в README. Смотрите все подробности на GitHub - github.com/troessner/transitions

Источник: rubyflow.ru

Вход для пользователей