2016-11-12 4 views
0

RubyでAASMを使用した有限状態マシンで作業しようとしています。 これは私のコードの一部です:プットがログとして私が手AASM/Rubyでコールバックが機能しない前に

event :Orthography, :before => :to_lowercase do 
    puts "Check Orthography" 
    transitions :from => :Initialized, :to => :UniquenessChecked 
end 

event :Uniqueness do 
    puts "Check Uniqueness" 
    transitions :from => :UniquenessChecked, :to => :OrthographyChecked 
end 

... 

def to_lowercase 
    puts "To lowercase test" 
end 

Check Orthography 
Check Uniqueness 
To lowercase test 

しかし、私は、コールバックの前に使用しているので、私は、期待:

To lowercase test 
Check Orthography 
Check Uniqueness 

どのようにすることができますイベントの前または後に何かする?

答えて

1

to_lowercaseメソッドがイベントの前に呼び出されます。

より前に発生したCheck OrthographyCheck Uniquenessの出力が混乱していると思います。これは、最初の2つのputsがクラスレベルで定義され、ファイルが読み込まれてステートマシンが設定されたときに出力されるために発生します。

最後に、putsがメソッド内で呼び出されますが、インスタンスがすでに作成され、イベントが発生したときです。

ステートマシンを定義することでテストできますが、イベントは発生しません。ステートマシン定義からの出力は引き続き表示されます。

+0

私は「term.Orthography」というイベントを発生させたときと違うのを見ます。これは、to_lowercase関数からputsログを表示するかどうかを示します。しかし、私はまだ注文を理解していない。私は "Check Orthography"の前に "小文字のテストに"ログを見たいと思っています。 –

+0

ポイントは次のとおりです:クラスをロードするときに状態を定義するブロックが実行されるため、これを行うことはできません。このイベントはインスタンス上で発生します。それは2つの異なることです。これを特定の順序で実行したいときは、メソッドの中に入れて、あなたの例で 'to_lowercase'メソッドを呼び出すように呼び出す必要があります。 – spickermann

+1

イベント名を小文字にすることをお勧めします。クラスまたはモジュールのみを大文字にする必要があります。 – Lichtamberg

関連する問題