Skip to content

Instantly share code, notes, and snippets.

@davydovanton
Last active May 2, 2017 07:56
Show Gist options
  • Save davydovanton/2cc371a456f3cd6bcb57814a74251f07 to your computer and use it in GitHub Desktop.
Save davydovanton/2cc371a456f3cd6bcb57814a74251f07 to your computer and use it in GitHub Desktop.

У нас есть либа, которая заруливает отправку всех нотификаций. Выглядит это следующим образом. Есть глобальный класс, который ты вызываешь с юзером (и его настройками) и с параметрами Notify.new.call(account, title: 'bla bla'). У этого класса есть куча стратегий (text, email, push, etc) которые вызываются все для каждого юзера. Но в каждой стратегии указывается условие, при котором эту стратегию нужно выполнять, т.е.:

class TestStrategy
  # ...

  def allow?(preferences)
    preferences.allow_email
  end
end

Т.е. для конечного юзера вот этой либы процесс выглядит следующим образом:

account = AccountRepo.new.aggregate(:preferences).by_pk(1).one!
# => account.preferences.allow_text => false
# => account.preferences.allow_email => true

Notify.new(strategies: [:email, :text, :push]).call(account, title: 'bla bla')
# => { text: false, email: true, push: false }
@Fodoj
Copy link

Fodoj commented May 2, 2017

Немножко непонятно как это связывается, например, с отдельными mailers и шаблонами для них. Можно пример? :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment