ruby

Статистика, уведомление и триггеры в 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: containers, blocks, iterators

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

[Image]
Плеер с одной песней не будет популярным, поэтому нам понадобится хранить список доступных песен и список песен в плейлисте. Все это контейнеры: объекты которые содержат ссылки на один и более объект.
И каталогу и плейлисту нужен одинаковый набор методов: добавить песню, удалить песню, возвратить список песен и так далее. Плейлист может выполнять дополнительные задания, такие как вставлять рекламу периодически или поддерживать общую продолжительность плейлиста, но сейчас нас эти функции не интересуют. Кажется хорошей идеей разработать класс СписокПесен, который мы можем использовать в каталогах и плейлистах.
(далее…)

Читать запись полностью | Make a Comment ( None 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 )

Некоторые основы Ruby (об именах)

Posted on Апрель 20, 2008. Filed under: ruby |

Ruby использует соглашение, чтобы различать использование имен: первые символы имени определяют его использование. Локальные переменные, параметры методов, имена методов должны начинаться с прописной буквы или знака подчеркивания. Глобальные переменные начинаются со знака доллара $, а переменные экземпляра класса начинаются с at знака (@). Переменные класса начинаются с двух знаков at (@@). Наконец, имена классов, названия модулей и констант должны начинаться с заглавной буквы. После какого то из этих начальных символов в имени может содержаться любая комбинация из букв, цифр и знаков подчеркивания (c оговоркой: за символом @ не может следовать цифра). Однако, по соглашению в составных именах слова разделяются знаком подчеркивания, а составные имена классов используют так называемый PascalCasing (когда каждое слово начинается с заглавной буквы).programming ruby

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

Блоки и итераторы

Posted on Апрель 20, 2008. Filed under: programming ruby 2nd edition, ruby |

Вы можете использовать блоки для реализации обратных вызовов, передачи кусков кода и для реализации итераторов.

Дальше больше
(далее…)

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

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