Users subscription and notification management system
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
config
lib
pkg
spec
Gemfile
Gemfile.lock
LICENSE.txt
README
README.rdoc
Rakefile
VERSION
courier-notifier.gemspec

README.rdoc

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.