2016-11-12 2 views
0

Я пытаюсь работать на конечной машине с AASM в Ruby. Это часть моего кода:Прежде чем обратный вызов не работает в 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 Orthography и Check Uniqueness, которые происходят до To lowercase test. Это происходит потому, что первые два puts определены на уровне класса и печатаются при чтении файла и настройке конечного автомата.

Принимая во внимание, что последний puts вызывается в методе, когда экземпляр уже создан и запускается событие.

Вы можете проверить это, указав конечный автомат, но не активируя никаких событий: вы все равно увидите результат определения конечного автомата.

+0

Я вижу разницу, когда я .. огонь событие "term.Orthography", или нет. Он будет показывать или не показывать журналы puts из функции to_lowercase. Но я все еще не понимаю порядок. Я хочу просмотреть журнал «В нижнем регистре» до «Проверка орфографии». –

+0

Дело в том, что вы не можете этого сделать, потому что блок, определяющий состояние, запускается при загрузке класса. Событие запускается в случае экземпляра. Это две разные вещи. Если вы хотите запустить это в определенном порядке, вы должны использовать их в методах и называть их, как вы называете метод 'to_lowercase' в вашем примере. – spickermann

+1

Я бы также предложил нижестоящие имена ваших событий ... Только классы или модули должны быть капитализированы .. – Lichtamberg

Смежные вопросы