Программирование на Ruby - ÐовоÑти
Ya_Acl - Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÑпиÑка прав доÑтупа (ACL)
чт, 16/02/2012 - 01:57 — spineYa_Acl предÑтавлÑет Ñобой ÑамоÑтоÑтельный объект поÑредÑтвом которого производÑÑ‚ÑÑ Ð²Ñе проверки. Ðто значит что он не привÑзан к фреймворкам и Ñто руководÑтво предлагает только один из возможных путей иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого компонента.
УÑтановка
ОÑновные понÑтиÑ
РеÑÑƒÑ€Ñ - объект, доÑтуп к которому контролируетÑÑ. ÐŸÑ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ - дейÑтвие Ñовершаемое над реÑурÑом. Роль - объект, который может запрашивать доÑтуп к реÑурÑу.
Роль(роли) запрашивает доÑтуп к привилегии реÑурÑа. Ðапример реÑÑƒÑ€Ñ â€œÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒâ€ Ð¼Ð¾Ð¶ÐµÑ‚ иметь привилегию “Ñоздатьâ€.
Ðачальные уÑловиÑ
По умолчанию вÑе запрещено. И по ходу можно только выÑтавлÑть разрешениÑ, но не запреты.
Ð’Ñе реÑурÑÑ‹ должны быть добавлены в acl (в противном Ñлучае получите иÑключение).
ОÑновные возможноÑти
Assert - динамичеÑкие проверки, например, ÑвлÑетÑÑ Ð»Ð¸ залогиненый пользователь владельцем Ñтого объекта. Проверки могут ÑтавитьÑÑ Ð½Ð° конкретные роли Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ привилегии, а не проÑто “на привилегиюâ€. Владение неÑколькими ролÑми. ЕÑли Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одной из ролей Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½ доÑтуп к привилегии реÑурÑа, то доÑтуп открыт. Роль Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ð¼ доÑтупом ко вÑем реÑурÑам. ПередаетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼ в метод билдера “resourcesâ€. ÐаÑледование ролей Ð´Ð»Ñ Ñ€ÐµÑурÑов. То еÑть мы можем определить роли которым автоматичеÑки Ñтанут доÑтупны вÑе привилегии реÑурÑа.
ПорÑдок Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¾Ðº на доÑтупноÑть к привилегии реÑурÑа
ЕÑли ни одна из переданных ролей не имеет доÑтупа к привилегии реÑурÑа, то доÑтуп запрещаетÑÑ.
Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ роли, имеющий доÑтуп к привилегии, проверÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ предназначенные Ð´Ð»Ñ Ñтой роли. ЕÑли Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ роли прошли вÑе проверки, то доÑтуп разрешаетÑÑ.
Workflow
Ð’ начале необходимо проинициализировать объект acl. Ð”Ð»Ñ Ñтого необходимо Ñоздать файл (Ñтруктура ниже) который будет загружатьÑÑ Ð¿Ñ€Ð¸ Ñтарте приложениÑ. Ð¥Ð¾Ñ‚Ñ Ð² development Ñреде вы можете захотеть подгружать его при каждом запроÑе Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ñтва разработки.
roles do # Роли
role :admin
role :editor
role :operator
end
asserts do # Проверки
assert :assert_name, [:current_user_id, :another_user_id] do
current_user_id == another_user_id
end
assert :another_assert_name, [:current_user_id, :another_user_id] do
current_user_id != another_user_id
end
end
resources :admin do # РеÑурÑÑ‹ и роль которой доÑтупно вÑе
resource 'UserController', [:editor] do # РеÑÑƒÑ€Ñ Ð¸ роли которым доÑтупны вÑе привилегии данного реÑурÑа
privilege :index, [:operator] # доÑтупно Ð´Ð»Ñ :admin, :editor, :operator
privilege :edit # доÑтупно Ð´Ð»Ñ :admin, :editor
privilege :new do
assert :assert_name, [:editor] # Ðта проверка будет вызвана только Ð´Ð»Ñ Ñ€Ð¾Ð»Ð¸ :editor
assert :another_assert_name # Ðта проверка будет вызвана Ð´Ð»Ñ Ñ€Ð¾Ð»ÐµÐ¹ :admin, :editor
end
end
end
end
ПоÑле Ñтого будет доÑтупен объект acl через YaAcl::Acl.instance.
acl.allow?('UserController', :index, [:editor, :opeartor]) # true
acl.allow?('UserController', :edit, [:editor, :opeartor]) # true
acl.allow?('UserController', :edit, [:opeartor]) # false
acl.allow?('UserController', :new, [:admin], :current_user_id => 1, :another_user_id => 1) # true
acl.allow?('UserController', :new, [:editor], :current_user_id => 1, :another_user_id => 2) # false
acl#check - возвращает объект результата YaAcl::Result
acl#check! - возвращает true или броÑает иÑключение
ИнÑтрумент Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñвоими руками
ÑÑ€, 15/02/2012 - 20:14 — spineÐ’Ñе, наверное, уже знают о ActiveSupport::Notifications. Ðта библиотека дает возможноÑть одним чаÑÑ‚Ñм Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ ÑобытиÑ, а другим подпиÑыватьÑÑ Ð½Ð° них и требуемым образом реагировать на полученную информацию о Ñобытии.
37signals делÑÑ‚ÑÑ Ð¾Ð¿Ñ‹Ñ‚Ð¾Ð¼ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑиÑтемы мониторинга Ð·Ð´Ð¾Ñ€Ð¾Ð²ÑŒÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ð°Ð·Ð¸Ñ€ÑƒÐµÑ‚ÑÑ Ð½Ð° ActiveSupport::Notifications и statsd.
ЕÑли вам интереÑно ÑамоÑтоÑтельно Ñоздать такой инÑтрумент, или возможноÑтей NewRelic не доÑтаточно, то наÑтоÑтельно рекомендую прочитать Ñтатью "Pssst... your Rails application has a secret to tell you"
Cane - анализатор качеÑтва кода
вт, 14/02/2012 - 13:28 — spineКоманда ÑервиÑа Square продолжает делать вклад в open source и развитие ÑообщеÑтва разработчиков.
Ðа Ñто раз они предÑтавлÑÑŽÑ‚ Cane - инÑтрумент анализа кода напиÑанного на Ruby. Он разработан Ñпециально Ð´Ð»Ñ MRI 1.9, но может анализировать код проекта, который иÑпользует Ruby 1.8. ВерÑÐ¸Ñ 1.9 нужна только Ð´Ð»Ñ Ñамого Cane.
Полезной ÑвлÑетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñть наÑтраивать то аÑпекты кода, на которые Cane должен обращать внимание.
СÑылки:
Слайды от докладчиков конференции .тоÑтер {ruby}
пн, 13/02/2012 - 12:43 — spine10 Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð° ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ .тоÑтер {ruby}. Было очень интереÑно, поÑкольку Ñо Ñвоими докладами выÑтупали одни из замечательных членов Ruby-ÑообщеÑтва.
ЕÑли у Ð²Ð°Ñ Ð½Ðµ было возможноÑти лично поÑетить конференцию, то вот ÑпиÑок Ñлайдов, доÑтупных на данный момент:
MailCatcher - перехватчик почты Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ð½Ð¾Ð¹ разработки
пн, 13/02/2012 - 11:30 — spineMailCatcher - крохотный SMTP-Ñервер, который умеет принимать почту и отображать ее Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ неÑложного веб-интерфейÑа.
Команда mailcatcher запуÑкает SMTP-Ñервер по адреÑу smtp://127.0.0.1:1025, а веб-Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾Ñтупен тут - http://127.0.0.1:1080.
ВозможноÑти:
ЕÑли перед вами Ñтоит задача отправки почтовых Ñообщений, то MailCatcher заÑлуживает вниманиÑ.
ПодробноÑти уÑтановки и более подробное опиÑание возможноÑти на официальном Ñайте - mailcatcher.me
Ðебольшие корректировки в раÑпиÑании грÑдущего .тоÑтер { ruby }
вт, 07/02/2012 - 15:27 — spineСкотт Чакон (GitHub) и Блейк Мизерани (Heroku), не Ñмогут вылететь из Сан-ФранциÑко и принÑть учаÑтие в конференции. Их заменÑÑ‚ КонÑтантин Ð¥Ð°Ð·Ñ Ð¸ Ð”ÑƒÐ³Ð»Ð°Ñ ÐšÐ°Ð¼Ð¿Ð¾Ñ.
КонÑтантин, как и планировалоÑÑŒ, раÑÑкажет о Sinatra: его иÑтории, текущем ÑоÑтоÑнии и будущем фреймворка.
Ð”ÑƒÐ³Ð»Ð°Ñ Ñ€Ð°ÑÑкажет о том, почему JRuby Ñтоит иÑпользовать — прÑмо ÑÐµÐ¹Ñ‡Ð°Ñ â€” и о том, почему JRuby быÑтр, практичен, почему не Ñтоит боÑтьÑÑ JVM, почему MRI можно и нужно заменить на JRuby прÑмо ÑейчаÑ, и за Ñчет чего на JRuby можно доÑтигнуть отличных ÑкороÑтей Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ.
Ðа Ñтранице toster.ru уже доÑтупна Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° мероприÑтиÑ.
ПодробноÑти в Ñтатье "Срочно в номер!"
Strano - UI Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Capistrano
вт, 07/02/2012 - 14:00 — spineStrano - Ñто веб-Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°Ð¼Ð¸ Capistrano. Ðа данный момент работает только Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñми, хранÑщимиÑÑ Ð² GitHub.
При подключении Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ проекта Strano Ñам находит Ñкрипты Ð´ÐµÐ¿Ð»Ð¾Ñ Capistrano и читает ÑпиÑок задач из них.
ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñех задач ÑохранÑетÑÑ, поÑтому вÑегда можно поÑмотреть что и как прошло.
Код Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ и ДжоÑль МоÑÑ (Joel Moss), автор проекта, приглашает вÑех желающих приÑоединитьÑÑ Ðº работе.
ПодробноÑти уÑтановки и другие детали в репозитории - github.com/joelmoss/strano
Sidekiq - очередь Ñообщений, Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰Ð°Ñ Ñффективнее Resque
вт, 07/02/2012 - 12:58 — spineSidekiq - новый игрок на поле очередей Ñообщений, реализующий в Ñвоей работе Actor model.
Sidekiq ÑовмеÑтим Resque и тоже иÑпользует Redis в качеÑтве бÑкенда. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ€Ð°Ð·Ð½Ð¸Ñ†Ð° Ñ Resque в том, что Sidekiq иÑпользует многопоточноÑть при обработке Ñообщений.
Ðа данный момент возможно работа только Ñ Rails 3.
ИÑпользование
Добавить воркера в каталог app/worker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
Отправить Ñообщение в очередь. Ðапример, HardWorker.perform_async('bob', 5)
ЗапуÑтить команду sidekiq из каталога приложениÑ, чтобы началаÑÑŒ обработка очереди.
ПодробноÑти на Ñайте проекта - mperham.github.com/sidekiq
ВеÑьма «Ñерьёзный» движок
пн, 06/02/2012 - 02:23 — spineÐа чём работает ваш блог? WordPress? LiveJournal? Jekyll? Хватит Ñто терпеть!
Ðет ничего приÑтнее, чем иметь ÑобÑтвенный standalone-блог, однако нет ничего ужаÑнее, чем заново изобретать велоÑипед.
Ðебольшой блог очень удобно веÑти при помощи обычных текÑтовых файлов, которые правильным образом обрабатываютÑÑ Ð¸ подаютÑÑ Ñ‡Ð¸Ñ‚Ð°Ñ‚ÐµÐ»ÑŽ. Ð”Ð»Ñ Ñтого идеально подходит движок Serious, но похоже, что его развитие оÑтановилоÑÑŒ (Ñто печально).
Я хочу приглаÑить вÑех желающих обратить Ñвоё внимание на Ñтот веÑьма милый инÑтрумент и призываю приÑоединитьÑÑ Ðº развитию данного проекта.
Service Layer в Rails приложениÑÑ…
Ñб, 04/02/2012 - 10:07 — spineJared Carroll опиÑывает Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ‚Ñ‚ÐµÑ€Ð½Ð°, приводит клаÑÑификацию ÑервиÑов и примеры иÑпользованиÑ.
По Ñути Ñта ÑÑ‚Ð°Ñ‚ÑŒÑ ÑвлÑетÑÑ Ð²Ñ‹Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ из книги Ðрика ÐванÑа Предметно-ориентированное проектирование (DDD).
http://blog.carbonfive.com/2012/01/10/does-my-rails-app-need-a-service-layer/
Где хранить Ñложную логику?
пт, 03/02/2012 - 17:39 — spineКак чаÑто у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°Ð»Ð¾ ощущение, что не понимаешь куда "размеÑтить" Ñложную бизнеÑ-логику?
В контроллер? Может в модель, потому что контроллер должен быть "skinny"?
Ðрик Смит (Eric Smith) из 8th Light имеет Ñвое, на мой взглÑд отличное, решение Ñтого вопроÑа. Ð’ Ñтатье он не только показывает как проÑто пойти ложным путем при уÑложнении логики, но и дает рекомендации по иÑправлению Ñитуации.
Читайте "Mind Your Own Business Rails"
imperavi-rails - Ñто mountable engine Ð´Ð»Ñ rails 3.1+, который добавлÑет редактор Imperavi в приложение
чт, 02/02/2012 - 22:43 — spineÐ’Ñем привет! Ð’Ñе наверное видели отличненький визуальный редактор Imperavi от компании Imperavi? :) ЕÑли нет, то можно поÑмотреть здеÑÑŒ http://imperavi.com/redactor/
Так вот, Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð¾Ð²Ð°Ð» репозиторий и пытаюÑÑŒ Ñделать Ñтот редактор удобным Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Rails. ÐŸÐµÑ€Ð²Ð°Ñ Ð»Ð°Ñточка уже еÑть: https://github.com/tanraya/imperavi-rails
Ðужно некоторые вещи довеÑти до ума, напиÑать теÑты и прочее. Ðо - оно уже работает. Можно Ñ Ð¾ÑторожноÑтью пользоватьÑÑ.
Кто заинтереÑовалÑÑ Ð¸ кому надоело прикручивание tinymce и прочих редакторов в Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - добро пожаловать в проект, ÑтановитеÑÑŒ контрибуторами, предлагайте идеи, уÑтанавливайте редактор в Ñвои Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ проÑто делитеÑÑŒ мнениÑми.
Я открыт Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ и обÑуждениÑ.
ClientSit - ошибки в JS
вт, 31/01/2012 - 11:39 — spineПрототип ÑервиÑа Ð´Ð»Ñ Ñ‚Ñ€Ñкинга клиентÑких ошибок в JS, зарегиÑтрироватьÑÑ Ð¸ получить код Ð´Ð»Ñ Ð²Ñтавки можно тут - http://clientsit.heroku.com/
можно поднÑть и Ñвой трÑкер.
но прежде читаем README на гитхабе Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ
https://github.com/homakov/ClientSit
жду ваших пул риквеÑтов )
Ruby Hero Awards 2012
вт, 31/01/2012 - 11:14 — spineОткрыто голоÑование за тех, кто доÑтоин Ð·Ð²Ð°Ð½Ð¸Ñ Ruby Hero. Ðазвать Ñвоего кандидата можно на Ñайте rubyheroes.com
Я отдал Ñвой Ð³Ð¾Ð»Ð¾Ñ Ð·Ð° Питера Купера (Peter Cooper). Рвы?
Как правильно Ñкачивать большие файлы Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ruby?
пн, 30/01/2012 - 10:53 — spineÐ’ ÑлучаÑÑ…, когда получаемый файл имеет размеры превышающие размеры доÑтупной оперативной памÑти, нужно запиÑывать получаемый поток данных Ñразу на диÑк.
Ð’ коде Ñто выглÑдит так:
begin
file = open("/path/to/file.mov", 'wb')
http.request_get('/' + URI.encode("file.mov")) do |response|
response.read_body do |segment|
file.write(segment)
end
end
ensure
file.close
end
end
Пример кода и Ñовет из Ñтатьи "Large Ruby File Downloads Done Right!"
Ruby on Rails Google+
пт, 27/01/2012 - 17:17 — spineÐовоÑти фреймворка, технологий ÑвÑзанных Ñ Ruby on Rails и обзор гемов на Ñтранице I18n.locale = :ru