Pull to refresh

Хватит изобретать велосипед

Ruby
Очень часто на хабре встречаю топики или комментарии любителей изобретать велосипед. Аргументы как всегда одни и те же:
1. так оно надёжнее,
2. лень копаться в чужом коде,
3. самореализовываюсь.

Кто-то так и не находит подходящий для его нужд фреймворк, пишет свой и клепает на нём сайты-визитки. А кто-то утверждает, что Смарти больно много весит, пытается его переписать, понимает, что не осилит, и заявляет, что это вообще лишнее.

Для тех, кто экономит своё время и использует в разработке Руби он Рейлс, хочу перечислить несколько плагинов, которые могут пригодиться во многих проектах.

1. Редакторы
Здесь два претендента TimyMCE и FCK. Для обоих есть плагины, упрощающие их интеграцию в RoR-приложение.

Смотрим.
wiki.rubyonrails.org/rails/pages/HowToUseTinyMCE и
www.underpantsgnome.com/projects/fckeditor-on-rails

Плагин для TinyMCE лучше освещён, однако не включает в себя загрузку файлов (изображений) на
сервер. Найти готовое решение не получилось, нашёл лишь примеры как это реализовать. Но не для
того я использую чужой плагин, чтобы ещё что-то существенное дописывать, потому поискал информацию об FCK. Здесь дела обстоят лучше. Плагин включает в себя контроллер, необходимый для загрузки и просмотра файлов на сервере. Поскольку в остальном оба редактора похожи, то я остановил свой выбор на FCK.

2. Вывод HTML
Можно пользоваться стандартным хелпером h(), но он просто экранирует все символы и теги HTML. Для вывода отформатированного HTML текста я использую плагин WhiteList, который отфильтровывает все небезопасные теги.

weblog.techno-weenie.net/2006/9/3/white-listing-plugin-for-rails

Всё просто: <%= white_list(@article.body) %>

3. Снова вернёмся к загрузке файлов на сервер. Здес поможет плагин attachment_fu
clarkware.com/cgi/blosxom/2007/02/24
Он позволяет хранить данные в базе или в файловой системе, проверяет загруженые файлы, может
обрабатывать изображения.

class Photo < ActiveRecord::Base
has_attachment :content_type => :image,
:storage => :file_system,
:min_size => 0.bytes,
:max_size => 500.kilobytes,
:resize_to => '700x500>',
:thumbnails => {:thumb => '200x200>'},
:processor => :Rmagick
validates_as_attachment
end

4. Сообщения об ошибках. Если какое-то поле модели не проходит валидацию, то рейлс генерирует сообщение типа Username is required, указывая имя поля в начале предложения. При попытке задавать собственные сообщения об ошибках такое поведение может быть не удобно. Я хочу вывести что-то вроде «Введите правильно свой логин». Это можно сделать при помощи плагина Custom Error Message.
wiki.rubyonrails.org/rails/pages/Custom+Error+Message
Укажите символ "^" в начале своего сообщения об ошибке, и имя поля не будет к нему автоматически добавляться.

Сравните
validates_acceptance_of :accepted_terms, :message => 'Please accept the terms of service', что сгенериует «Accepted terms Please accept the terms of service» и
validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'

5. Капча. Тут всё просто. Генерировать капчу и проверять на валидность позволяет плагин SimpleCaptcha.
expressica.com/simple_captcha

Выводим капчу <%= show_simple_captcha %>.
Проверяем
class User < ActiveRecord::Base
apply_simple_captcha
end
user.valid_with_captcha? или user.save_with_captcha

6. Постраничный вывод. Плагин WillPaginate расширяет ActiveRecord, добавляя метод paginate,
который практически идентичен стандартному find, а также добавляет простой хелпер will_paginate в шаблоны. Очень удобный и гибкий плагин.

github.com/mislav/will_paginate/wikis

@topics = Topic.paginate(:page => params[:page], :per_page => Topic.per_page, :order => 'created_at')

7. Регистрация, логин, логаут. Плагин Acts_as_authenticated сгенерирует контроллер, модель и
шаблоны страниц, необходимые для регистрации и аутентификации в приложении. Сгенерированный код легко подстроить под свои нужды.

wiki.rubyonrails.com/rails/pages/Acts_as_authenticated

8. Сжимаем яваскипт и css. Плагин AssetPackager в режиме development подгружает все файлы js и css по одному, в режиме production использует их сжатые в один файл версии.

synthesis.sbecker.net/pages/asset_packager

P.S. Все плагины просты в установке и использовании. Требуют минимум чтения и кодирования.
Tags:ruby on railspluginsdry
Hubs: Ruby
Total votes 61: ↑46 and ↓15 +31
Views2K

Popular right now