= 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, :on
d.template :weekly_subscription, :on, :on, :on
end
В модели пользователя:
class User << ActiveRecord::Base
has_courier
...
== Использование
Посылаем пользователю сообщение по шаблону :import_complete во все разрешенные сервисы
user.message :import_complete, {:some=>'arguments in hash'}
Если сервис отправляет сообщение в реальном времени, то он его уже
отправил, а если сообщения собираются для дальнейшей отправки, то
осуществляется эта доставка так:
Courier.deliver_all!
== Сервисы
На данный момент реализованы сервисы:
* Courier::Service::GritterNotice - отправка сообщений через gritter_notices[http://github.com/dapi/gritter_notices]
* Courier::Service::ActionMailer - TODO
* Courier::Service::MailChimp - TODO
* Courier::Service::Facebook - Использует Koala[https://github.com/arsduo/koala]
== Свой сервис
Все сервисы наследуютсяо от Courier::Service::Base. Последнее
имя класс автоматически становится именем этого сервиса через
demodulize.underscore. Всего нужно имплементировать 2 метода:
* message(owner, template, args)
* deliver!
=== Сервис отложенной отправки
Достаточно реализовать метод deliver!, так как +message+ удачно складывает все сообщения в базу. Например:
def deliver!
courier_messages.fresh.each do |message|
send_message_my_way message.owner, message.text
end
end
=== Сервис отправки в реальном времени
Достаточно реализоват метод +message+. Например:
def message(owner, template, args)
send_message_my_way owner, template.get_text(args)
end
== Contributing to courier
* Yes, please.
== Copyright
Copyright (c) 2011 Danil Pismenny.