= 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 ... == Использование Посылаем пользователю сообщение по шаблону :import_complete во все разрешенные сервисы 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[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_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 (c) 2011 Danil Pismenny.