← All posts tagged Ruby

Появилась необходимость в создании метода Array#to_hash, который из индексного массива делал бы ассоциативный.

["первый", "второй", nil, "третий"].to_hash
#-> {0 => "первый", 1 => "второй", 3 => "третий"}

PS. Встроенной реализации не нашел и потому пришлось делать велосипед.

Мигрировал с Redmine 1.4 на Redmine 2.2 и у меня перестала работать рассылка (самописная в виде плагина). На все попытки отправить сообщение мне выдается ошибка «could not get 3xx (550)». Уже все пальцы стер пытаясь нагуглить причину.

ЗЫ. Использую smtp от Google Apps

Решил попробовать библиотеку github.com для управления событиями в Календаре от Google.

Запускаю в irb тестовый пример — работает. Делаю тоже самое в консоли Rails и код зависает на Google::Calendar.new. Ни каких ошибок, а просто висит!

Пробовал передавать в Google::Calendar.new не все параметры — нормально обрабатываются ошибки. На валидных данных — зависает. Куда копать?

В модели есть валидация, которая мне уж очень мешает. Удалить ее напрямую не могу, так как пишу плагин-патч. Как вообще можно удалить валидацию из модели?

Разместил резюме год назад на superjob и до сих пор приходят предложения поработать. На этот раз AT Comsalting ищет человека на проект Электронный загс. Есть желающие попробоваться?

Уже полчаса не могу составить запрос выборки по дате (выбрать все записи от даты А до даты Б).

"date > :from AND date < :to" выдает какую-то невнятную ошибку PostrgreSQL (PG::Error: ERROR: missing FROM-clause entry for table "due_date >= :from AND due_date <= :to)")

Получается, название таблицы обязательно надо указывать?

Плагин will_paginate не умеет делать ссылки для ajax, даже когда request.xhr? #-> true

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

Файл config/initializers/will_paginate_patch.rb

WillPaginate::ActionView::LinkRenderer.class_eval do
def link(text, target, attributes)
super(text, target, attributes.merge("data-remote" => @template.request.xhr?))
end
end

Есть четыре таблицы, которые связаны как has_many: 1->2->3->4. Параметр through позволяет добавить только сквозные связи 1->3 и 2->4. А как сделать сквозную связь 1->4? Кто как решает эту проблему?

Hook'и в Spree 1.0 признаны устаревшими (depricated), но пока еще поддерживаются. Рекомендуется использовать явный вызов Deface::Override. Оно и к лучшему... у Deface возможностей гораздо больше.

По вопросу #1778078 буду сам себе отвечать. Hook'и по прежнему работают. Список hook'ов можно посмотреть, если вызвать Spree::ThemeSupport::HookListener.migratable_hooks

Посмотрел внутрь, а там все тот же старый-добрый Deface. Можете сами посмотреть: github.com

Проблема описанная в #1769963 решается тем, что роуты надо задавать по особому. В конец файла routes.rb нужно добавить следующий код:

Spree::Core::Engine.routes.append do
# маршрут, который ходите добавить
end

После этого все таинственным образом начинает работать.

У кого есть опыт работы с Spree? Как там правильно роуты добавлять? А то роуты добавляю, а методы вроде _url и _path отсутствуют (хотя сервер на адреса по роутам нормально отвечает). Куда копать?

Кто как получает письма для ActionMailer? Сейчас предполагаю создать rake-задачку, которая будет вызываться с какой-то периодичностью и будет использовать Net::POP3 из стандартной библиотеки. Моветон?

Zippy — удобная библиотека для работы с zip-архивами.

Zippy.create 'funny.zip' do |zip|
zip['README'] = 'Fun pics 4 u'
Dir['pictures/*.jpg'].each do |filename|
zip[filename] = File.open(filename)
end
end

Почему у меня данный код выполняется два раза?

require 'threads'
paths = ["1","2","3"]
count = 0
paths.each{ |path|
count += 1
Thread.fork(path){ |url| sleep rand; p url }.join
}
p count

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