Простой способ выключить наблюдателей во время задачи граблей?

Использование регулярных выражений bash =~:

$ var=/home/bamboo/bamboo-agent-home/xml-data/build-dir/NG-VOSGQL239-JOB
$ [[ $var =~ .*/ ]] && echo "${BASH_REMATCH[0]}"
/home/bamboo/bamboo-agent-home/xml-data/build-dir/
39
задан MediaJunkie 1 April 2009 в 22:36
поделиться

6 ответов

Вы могли добавить средство доступа к своей пользовательской модели, чему-то как "skip_activation", который не должен будет быть сохранен, но сохранился бы через сессию и затем проверил бы флаг в наблюдателя. Что-то как

class User
  attr_accessor :skip_activation
  #whatever
end

Затем в наблюдателе:

def after_save(user)
  return if user.skip_activation
  #rest of stuff to send email
end
8
ответ дан Terry 27 November 2019 в 02:02
поделиться

В обычно, для этих видов ситуаций, Вы можете:

  1. Настройте фиктивный объект для "поглощения" нежелательного поведения
  2. Имейте внешне доступный флаг / переключатель, который наблюдатели уважают для запрещения поведения
  3. Добавьте логику к наблюдателю для обнаружения, когда поведение является ненужным в целом (например, что dbarker предлагает),
  4. Имейте глобальный флаг "тестирование", "отладка", "запуск" или независимо от того, что это изменяет низкоуровневое поведение
  5. Анализируйте и удалите наблюдателей
  6. Добавьте метод к своей модели, которая выполняет альтернативную, ненаблюдаемую версию задачи (совместное использование реализации с нормальным методом как можно больше).

В этом случае я сказал бы, что № 3 является Вашим лучшим выбором.

2
ответ дан MarkusQ 27 November 2019 в 02:02
поделиться

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

0
ответ дан dstnbrkr 27 November 2019 в 02:02
поделиться

Поскольку другие подсказали; я перенес бы нежелательную логику в Вашего Наблюдателя с простым если оператор.

def after_create
  send_email if RAILS_ENV == "production"
end
0
ответ дан Matt Darby 27 November 2019 в 02:02
поделиться

При запущении тестов на приложении я продолжаю работать, я использую следующее:

Model.delete_observers
2
ответ дан Matt Haley 27 November 2019 в 02:02
поделиться

Вы можете отключить метод наблюдателя;

MessageObserver.send(:remove_method, :after_create)

Остановит: after_create на MessageObserver, удалив его.

1
ответ дан 27 November 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: