Sneak (Ябеда) – новый gem для Ruby on Rails
В рамках проекта “ВебНаблюдатель”, над которым мы сейчас работаем я выпустил простой плагин под названием sneak или по русски “ябеда”. Исходные коды разумеется доступны на github. Функционал тривиален и постоянно востребован – необходимо обеспечить пользователям возможность сообщить администрации сайта о том, что какой-то размещенный материал (пост в блоге, комментарий итд) является спамом или вызывает сомнения в своей законности. Расскажу теперь как использовать этот gem.
Для начала прописываем его в Gemfile нашего приложения
gem 'sneak'
и вызываем bundler
$ bundle install
запускаем соответствующий генератор
$ rails g sneak:install
и у нас появляются 3 новых файла:
db/migrate/20120122103158_create_sneak.rb
config/initializers/sneak_initializer.rb
app/models/flag_observer.rb
Первый из них – это файл миграции для базы данных. В настоящий момент поддерживается толькр ActiveRecord, в дальнейшем постараюсь добавить поддержку NoSQL. Во втором (sneak_initializer.rb) определены типы сообщений, которые может оставлять пользователь, а flag_observer.rb отвечает за действия, которые необходимо совершить после того, как флаг будет создан.
Далее – мы должны добавить в каждый класс, который будет “ябедничать” :) следующий код
class User < ActiveRecord::Base
acts_as_sneak
end
В данном примере я использовал класс User, хотя это может быть Account или какой-нибудь автоматический сборщик спама SpamCollector. Далее – отмечаем все модели, которые могут быть помечены как проблематичные таким образом:
class Project < ActiveRecord::Base
is_flaggeable
end
Создаем список типов жалоб в sneak_initializer
CLAIM_TYPES = ["spam1", "offensive", "attention"]
Пишем обработчик:
class FlagObserver < ActiveRecord::Observer
observe :flag
def after_save(flag)
#TODO add code
end
end
И теперь мы готовы к тому, чтобы использовать наш плагин. Флаг можно создать так
Project.first.reported :by => User.first, :as => "spam"]
или так
User.first.report :on => Project.first, :with => "spam"]
Если у вас появятся пожелания к дополнительным хэлперам – пишите комментарии здесь или в Github Issues.