Em tempos de pouco Seaside, a gente tem que se virar pra aumentar a produtividade ao escrever códigos de client-side.

Quem de nós desenvolvedores, nesses últimos 10 anos, não sofreu de sérias cefaléias depois de algumas horas de depuração braçal(vulgo “alert-debugging“) de código JavaScript?

Que atirem a primeira pedra!

Ler o restante desta entrada »

Acts as State Machine eh um plugin do Rails que visa facilitar o gerenciamento de estados de um dado model ActiveRecord, implementando assim uma Maquina de Estado Finito. O acts_as_state_machine carrega o conceito de eventos. Que sao blocos de codigo responsaveis pelas transicoes de um estado do Model para o outro. Suponhamos, por exemplo, que voce queira controlar os estados das tarefas que voce irah realizar durante um dia. Com o acts_as_state_machine voce poderia ter algo parecido com o seguinte:

class Tarefa < ActiveRecord::Base
  # Inicialmente a Tarefa estarah no estado 'Pendente'
  acts_as_state_machine :initial => :pendente

  state :pendente
  state :iniciada, :enter => Proc.new {|o| Mailer.send_notice(o)}
  state :concluida
  state :cancelada

  # No evento 'iniciar' eh realizada a transicao do estado 'pendente' para 'iniciada'
  event :iniciar do
    transitions :from => :pendente, :to => :iniciada
  end

  event :concluir do
    transitions :from => :iniciada, :to => :concluida
  end

  event :cancelar do
    transitions :from => :pendente, :to => :cancelada
  end
end

Para cada estado, um metodo “<nomedoestado>?” serah criado, e para cada evento, um metodo “<nomedoevento>!” serah criado:

  t = Tarefa.create # Cria a tarefa com seu estado inicial...
  t.state # => "pendente"
  t.iniciar! # Envia notificacao por email, e muda estado da Tarefa para "iniciada"
  t.iniciada? # => true
  # ...
  t.concluir! # Muda o estado da tarefa para "Concluida"

Como voce pode ver no codigo de exemplo, quando a nossa Tarefa mudar para o estado ‘iniciada’, (em consequencia da chamada ao metodo do evento ‘iniciar’), serah enviada uma notificacao por email. Isso eh feito por meio daquela Proc que foi passada como uma funcao de callback do estado :iniciada. Nos mostrando que temos a flexibilidade de fazer qualquer coisa na mudanca de um estado para o outro. Alih, no lugar de um bloco de codigo, pode ser passado um simbolo, com o nome de um metodo de instancia do model.

Instalacao

Para quem jah instalou um plugin Rails, instalar o acts_as_state_machine nao tem segredo algum! Na raiz da tua aplicacao Rails, digite:

  ./script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/

Daih em diante eh soh usar! :-)