January 21, 2010

Console tip: retrieve the last return value with underscore

rubyquicktips:

In IRB you can retrieve the last return value from a command by using the underscore _ sign:

$ irb
>> 2*3
=> 6
>> _ + 7
=> 13
>> _
=> 13

This also works in the Rails console:

$ script/console
>> User.first
=> #<User id: 7, first_name ...
>> user = _
=> #<User id: 7, first_name ...
>> user
=> #<User id: 7, first_name ...

This is quite useful, when you forgot to assign the return value of an expression to a variable.

Раньше, чтобы почитать про стандартные возможности руби/рельс, смотрел в стандартные доки: http://ruby-doc.org и http://api.rubyonrails.org соответственно. Но почему-то они меня раздражали, бесили и выводили из себя.

Потом я узнал про http://apidock.com. В нем есть документация и по руби, и по рельсам. Намного приятнее, намного удобнее. Комментарии очень хорошо дополняют сами описания.

В общем, и почему я раньше им не пользовался?..

Шнурки

sunchess:

Оказывается, есть куча способов завязать шнурки на кедах. Не ожидал, глаза разбежались.

Завязывание шнурков

Такое изобилие — я-то привык по-простому, миссионе… вернее, бантиком. После тщательного выбора завязал самым первым способом. Усиленно тестирую.

Очень долго искал хороший мануал по блокам в ruby, да все никак не мог найти. Оказывается то, что я искал, называется dsl in ruby, кто бы мог подумать.

Лучший мануал, впрочем, тоже нашел: код рельсов, а именно хелперы форм (потому что мне нужно активно в этих самых блоках генерировать html). Есть еще routes, но туда пока не смотрел(а надо бы).

История, что ни говори

Решил прочитать блог Ruby на Хабре с самого начала. Наткнулся на интересную, как не крути, статью про рассуждения какого-то зарубежного PHP’шника о Ruby/Rails. Статья за 25 июня 2007 года, кстати. Так вот, мудрый дядька писал:

Так же необходимо понимать что шумиха окружающая Ruby это ещё не популярность. Шумиха не постоянна. Ruby всё ещё не попал в TIOBE Top 20 — его популярность по прежнему ниже таких языков как Java, C, C++, PHP и Perl. Сейчас даже Ada и Fortran популярнее нежели Ruby.

Переходим по этой самой ссылке и понимаем, что 2.5 года спустя слова «великого и могучего» так и остались всего лишь словами.

Интересно, сам этот дядька помнит свои слова, сказанные уже довольно давно?

January 20, 2010

Яндекс умничка ;)

Экий я, оказывается, по меркам Яндекса, важный:)
Аудитория — не менее 250 читателей, во как!

January 19, 2010

Как многолик он, этот case

Все уже давно привыкли, что в ruby можно делать такие вещи:

a, b = 10, 20

При этом переменной a присваивается значение 10, а b, соответственно, 20. Но когда мы хотим использовать оператор case в таком же ключе, он посылает нас подальше. Конструкция вида

a, b = case variable
when 10: 10, 20
when 20: 20, 10
end

работать не будет.

В группе ror2ru мне подсказали, как решить эту задачу:

a, b = case variable
when 10: [10, 20]
when 20: [20, 10]
end

То есть все наши значения нужно перечислять в массиве.

Вызываем методы хелпера из контроллера

Изначально хелперы создавались для того, чтобы в них писать всякие умные методы для их использования в представлениях (views). Однако иногда, редко-редко, не чаще одного раза в год, хочется тот или иной метод хелпера вызвать в контроллере.

Хелперы, контроллеры… Нужно быть проще:

class SomeController < ApplicationController
end

module SomeHelper
end

Поэтому нет ничего проще, чем «подмешать» хелпер модуль в контроллер класс:

class SomeController < ApplicationController
include ApplicationHelper
end

January 17, 2010

gravatar_image_tag

На днях задался вопросом, каким образом на своем сайте показывать аватары пользователей (и где их вообще брать). Самое логичное было бы грузить их с gravatar.com, как это делает github, например.

Сразу нашелся плагин gravatar_image_tag (http://github.com/mdeering/gravatar_image_tag), но была у него одна очень неприятная деталь: он отказывался работать. То есть совсем. Вообще-вообще.

Дело было в том, что к массиву там применяли метод count, который для массивов не предназначен. Решилось все тем, что в файле:

vendor/plugins/gravatar_image_tag/lib/gravatar_image_tag.rb

я поменял вот это:

return nil if gravatar_params.keys.count == 0

на вот это:

return nil if gravatar_params.keys.size == 0

И да, плагин просто великолепен, нет слов, чтобы выразить радости :)

Восклицательный знак такой восклицательный

Конечно же я знал, что

Более того, я даже докадывался, что

Но скажите, кто же мог знать, что

Товарищи, я в ужасе! Куда катится этот мир?!

January 16, 2010

div-snippet в textmate

Заменил стандартный таб-триггер слова div на такое:

<div${1: ${2:class}=”${3:name}”}>
$0
</div>${4: <!— end of $3 —>}

Это позволило мне:

  • Убирать все, кроме чистого тега div
  • Менять «на лету» class на id
  • Получать после закрывающего тега комментарий «end of class_or_id_name» (что очень полезно, когда кода становится очень много)

Полет нормальный, я доволен.