Courier
¶ ↑
Давным давно, в одной далекой-предалекой галактике, был такой модем USR Courier
, он хорошо держал карриер и был мечтой каждого фидошника. А сейчас чтобы получать много не нужных писем достаточно зарегистрироваться на еще одной социальной сети.
Чтобы помочь социальной сети справиться с большим количеством видов подписок и оповещений, а пользователю настроить способы их доставки мы разработали плагин Courier
. Courier
On Rails.
Courier
- Система управления пользовательскими оповещениями и подписоками.
Установка¶ ↑
Gemfile:
gem 'courier'
Создание миграции и конфигцарции ./config/initializers/courier.rb
rails g courier rake db:migrate
В config/initializers/courier.rb
регистрируем используемые сервисы, шаблоны и их значения по умолчанию:
Courier.init do |d| d.services :active_mailer, :gritter_notice, :facebook d.template :import_complete, :off, :on, :off d.template :avatar_loaded, :on, :off, :disabled d.template :weekly_subscription, :on, :on, :disabled end
Где :on и :off это значения по умолчанию, а :disabled - полный запрет на установку этого параметра пользователем (:off по умолчанию)
В модели пользователя:
class User << ActiveRecord::Base has_courier ...
Использование¶ ↑
Посылаем пользователю сообщение по шаблону <tt>:import_complete<tt> во все разрешенные сервисы
user.message :import_complete, {:some=>'arguments in hash'}
Если сервис отправляет сообщение в реальном времени, то он его уже отправил, а если сообщения собираются для дальнейшей отправки, то осуществляется эта доставка так:
Courier.deliver_all! # Запускает доставку по всем сервисам
Для каждого сервиса можно запускать доставку отдельно:
Courier.service(:facebook).deliver_all!
Персональные настройки¶ ↑
У каждого пользователя есть персональные настройки для матрицы шаблон-сервис. По умолчанию они такие, какие указаны в Courier.init
Установить собственное значение можно так:
user.courier.set(:import_complete, :facebook, :on) # или :off
Где :import_complete
- название шаблона, а :facebook
название сервиса.
Узнать значение:
user.courier.get(:import_complete, :facebook) # Вернет :on или :off user.courier.enabled?(:import_complete, :facebook) # Вернет true или false
Сервисы¶ ↑
На данный момент реализованы сервисы:
-
Courier::Service::GritterNotice
- отправка сообщений через gritter_notices -
Courier::Service::ActionMailer - TODO
-
Courier::Service::MailChimp - TODO
-
Courier::Service::Facebook
- Использует Koala
Свой сервис¶ ↑
Все сервисы наследуютсяо от Courier::Service::Base
. Последнее имя класс автоматически становится именем этого сервиса через demodulize.underscore
. Всего нужно имплементировать 2 метода:
-
message(owner, template, args)
-
deliver!
Сервис отложенной отправки¶ ↑
Достаточно реализовать метод deliver_all!
или deliver_message
, так как message
удачно складывает все сообщения в базу. Например:
def deliver_all! messages.fresh.each do |message| send_message_my_way(message.owner, message.text) and message.mark_as_delivered! end end
или
def deliver_message(message) send_message_my_way(message.owner, message.text) # returns true to mark message as delivered end
Сервис отправки в реальном времени¶ ↑
Достаточно реализоват метод message
. Например:
def message(owner, template, args) send_message_my_way owner, template.get_text(args) end
Contributing to courier¶ ↑
-
Yes, please.
Copyright¶ ↑
Copyright © 2011 Danil Pismenny.