Как получить список включенных модулей в класс, и дерево наследования
module SomeModule end class ParentModel < Object include SomeModule end class ChildModel < ParentModel end p ChildModel.included_modules #=> [SomeModule] p ChildModel.included_modules(false) #=> [] p ChildModel.ancestors #=> [ChildModel, ParentModel, SomeModule, Object, Kernel]
Какое отличие между include и extend в Ruby?
include: расширяем метод эксземпляра класса
extend: расширяет методы класса
module ReusableModule def module_method puts "Module Method: Hi there!" end end class ClassThatIncludes include ReusableModule end class ClassThatExtends extend ReusableModule end puts "Include" ClassThatIncludes.new.module_method # "Module Method: Hi there!" puts "Extend" ClassThatExtends.module_method # "Module Method: Hi there!"
Как Ruby поможет управлять виртуальными машинами.
И так возможно постоянные посетители нашего форума в курсе что я уже полтора года работаю в компании занимающейся облачным хостингом. Сказать про то что наша компания за год стала больше или вышла на мировые рынки - это ничего не скзать. Уверен что многим из нас есть что сказать хорошего о компании в которой они работают, в начале нам даже обещали опционы - о которых забыли очень быстро.
И так воможно ктото слышал о разных системах виртуализации и VPs - и так есть около 8 обще известных систем
- The KVM/QEMU Linux hypervisor
- The Xen hypervisor on Linux and Solaris hosts.
- The LXC Linux container system
- The OpenVZ Linux container system
- The User Mode Linux paravirtualized kernel
- The VirtualBox hypervisor
- The VMware ESX and GSX hypervisors
- The VMware Workstation and Player hypervisors
- The Microsoft Hyper-V hypervisor
И самое интересное что есть одна библиотека которая позволяет управлять ими, и к нашему с вами счастью у нее есть руби обертка с джемом ruby-libvirt.
И так что можно сделать с вашей виртуальной машиной без перезагрузки - добавлять логические диски, создавать Logical volume and group, сетевые устройства, монтировать флешки и сидиромы, так что если супорт говорит что есть необзодимость преегрузить вашу машину - тем самым сделать простой для ваший сайтов, просите сделать это без перезагрузки.
Если кому интересно я сделал у себя в репозитории простые примеры на руби которые немного расширяют список стандартных, с официального сайта. Библиотека является опенсорсной, но при поддержке редхата и других гигантов.
Так что если кого заинтересовало можете фокнуть и посмотреть.
Кроссбраузерность/iframe и full screen
Многие сервисы предлагают свои виджеты и иногда они умею показывать на весь экран какието сообщения, и грузить много данных через JSON. Одним словом прилоежния к примеруу могу быть написаны на бекбоне и интегрированы в ваш сайт.
Но как только мы сталкиваемся с интеграциями крос сайтовых запросов или получения доступа к родительсокму окну, то сразу получаем проблеммы с эксплорером или оперой.
Но как же интегрировать свое приложение написанное на яваскрипте, с аяксовыми запросами.
Я нашел довольно хорошее решение - использовать ифрейм, но как же суметь раскрыть ифрейм на все окно при клике внутри на какойто объект?
Было перепроовано много варивантов, и самы работоспособный оказался window.postMessage
Дальеш приведу простой пример с исходного кода, который не претендует на самый лучший вариант, но по крайней мере работает.
Функция для ифрейма
function resizeFrame(full) {
parent.postMessage(full == true ? 'full_screen' : 'inplace_screen', '*');
if (full == true) {
$('.wblock').hide();
} else {
$('.wblock').show();
}
}
Дальше код который будет вставляться в родительское окно.
if(typeof window.addEventListener != 'undefined') {
//alert('add addEventListener');
window.addEventListener('message', resize_message, false);
}
else if(typeof window.attachEvent != 'undefined') {
//alert('add attachEvent');
window.attachEvent('onmessage', resize_message);
}
resize_message - функция которая отресайзит фаш фрейм, или выполнит любое другое действие внутри родительской страницы.
Что нам дает использование ифрейма
- отсутствие проблемм с скроссайтовыми запросами,
- отсутствие переопределения CSS
- не пепесекаются яваскриптовые библиотеки
возможно что то еще, но я привел только те проблеммы которые всплывают сразу же при попытке интегрировать ваше яваскриптовое приложение в клиентский сайт.
git - precommit hook
И так есть у вас неродивые кодеры которые привыкли не проверять код после мерджа и заливать все скопом.
Для этого дела есть разные хуки у джита и остальных версионников. Так как сейчас большая часть рельсового населеняи пользуется джитом то привожу пример хука прекомита который будет проверять код на синтаксис.
vi .git/hooks/pre-commit



Atom