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.

Похожие записи в блоге: