Статистика, уведомление и триггеры в Ruby on Rails

Posted on Май 18, 2008. Filed under: coding, ruby | Метки: , , |

Передо мной стоит задача реализовать сбор статистики использования приложения на Ruby On Rails. Для этого подходит шаблон Observer, наблюдатель. В общем виде он применяется когда есть следующая задача:

Один объект («Подписчик») должен знать об изменении состояний или некоторых событиях другого объекта. При этом необходимо поддерживать низкий уровень связывания с объектом — «Подписчиком».

Для того, чтобы он работал, нужно, чтобы приложение давало возможность подписчику зарегистрировать себя, а подписчик должен релизовывать некоторый общий интерфейс, понятный приложению, через который он будет получать сообщения об изменении состояний.

Я приведу задачу из плугина restful_authentication, который наверное всем знаком. Он используется для реализации системы аутентитификации. Допустим, у меня есть класс User. Я хочу чтобы после того, как объект этого класса получил сообщение create, пользователю было отправлено сообщение на email с помощью UserMailer.deliver_signup_notification(user) (мы не будем разбираться с этим классом, примите как данное, что он хорошо работает и умеет отсылать письма). Так как работа с почтой и уведомлениями не является основной задачей класса User, то стоит создать наблюдателя, который бы справлялся с этой задачей.

В Rails наблюдателей можно сделать вообщем двумя способами: коротким и длинным. Сначала — длинный:

class UserObserver < ActiveRecord::Observer
def after_create(user)
UserMailer.deliver_signup_notification(user)
end
end

Мы создаем observer для класса User. Поэтому обязательно имя класса будет UserObserver. Он должен наследовать от Observer (ссылка на описание в Ror API). Чтобы он обрабатывал сообщение User#create мы описываем метод after_create, принимающий в качестве аргумента объект, за которым наблюдатель собственно наблюдает.

Сохраните этот код в файл app/models/user_observer.rb.

Чтобы Observer заработал его нужно зарегистрировать. Для этого в файле config/environment.rb вашего Rails приложения добавьте такую строку (если её еще нету):

config.active_record.observers = :user_observer

Это все, что касается долгого пути. А теперь короткий:

В консоли напишите

>ruby script/generate Observer User

Это сгенерирует файл app/models/user_observer.rb, и занесет в config/environment.rb ту самую верхнюю строку. В app/models/user_observer.rb будет находиться

class UserObserver < ActiveRecord::Observer
end

А вы дополните её своим кодом. Таким вот простым образом мы можем обрабатывать любые события, происходящими с нашими моделями в Ror приложении.

За подробной информацией обращайтесь сюда api.rubyonrails.org, citforum.ru.

Читать запись полностью | Make a Comment ( 1 so far )

Ruby Числа

Posted on Апрель 29, 2008. Filed under: ruby | Метки: , |

Ruby поддерживает целые числа и числа с плавающей запятой (float numbers). Целые числа могут быть любого порядка (на самом деле они ограничены сверху объемом памяти, выделенным вашей операционной системой). Целые числа внутри диапазона (-2^30, 2^30 — 1) или (-2^62, 2^62 -1) хранятся в двоичной форме и представляют собой экземпляры класса Fixnum. Целые вне этих диапазонов хранятся как экземпляры класса Bignum (в данный момент класс представляет собой множество переменной длины, элементы которого это экземпляры класса Fixnum). Эта разница прозрачна для пользователя и Ruby автоматически конвертирует классы в обе стороны.

(далее…)

Читать запись полностью | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...