понедельник, 7 марта 2011 г.

github_cloner

Написал на руби скрипт, который клонирует все репозитории пользователя с гитхаба в одно место. Просто иногда хочется, что б все добро находилось еще и локально, а клонировать их поотдельности не ок. Код забирать тут - https://github.com/nashby/github_cloner

Устанавливаем:

gem install github_cloner

Смотрим опции:

github_cloner --help

четверг, 17 февраля 2011 г.

Ruby instance variables to hash

class Gift
def initialize
@name = "book"
@price = 15.95
end
end

gift = Gift.new
hash = {}
gift.instance_variables.each {|var| hash[var.to_s.delete("@")] = gift.instance_variable_get(var) }
p hash # => {"name"=>"book", "price"=>15.95}

пятница, 11 февраля 2011 г.

Паук, ползущий по рельсам, или Tarantula

Вот что написано про этот джем на github:

Tarantula is a big fuzzy spider. It crawls your Rails application,
fuzzing data to see what breaks.

Услышал я про него из одной вакансии, в которй была написана одна из обязанностей:

покрытие приложение тестами rspeck и использование tarantula в большей степени.

Ну и решил попробовать, что это такое.

Как оказалось, с rails3 он работать не захотел, и я решил попробовать исправить это. Вот что получилось - https://github.com/nashby/tarantula-rails3. Стандартный тест запустился без ошибок. Дальше пока не проверял.

Там я заюзал очень крутую штуку под названием Railtie API. С его помощью теперь rake таски добавляются в приложение сразу после установки джема bundler'ом, что мега удобно.

Ну в общем из описания джема на гитхабе можно почитать, чем он занимается. Этот паук ползает по приложению, переходит по ссылкам и смотрит, что ломается, а что нет. Пишет это все в приятный html лог. Так же в тестах можно проверять на SQL injection и XSS уязвимости.

четверг, 10 февраля 2011 г.

Rails 3 + jQuery

Добавляем в Gemfile:

gem 'jquery-rails'
и потом
rails generate jquery:install
Если все прошло без ошибок, то конец. Если появляется ошибка:
fetching  jQuery UJS adapter (github HEAD)
C:/Ruby192/lib/ruby/1.9.1/net/http.rb:677:in `connect': SSL_connect returned=1 e
rrno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL
::SSL::SSLError)
то забиваем на генератор и копируем руками https://github.com/rails/jquery-ujs/raw/master/src/rails.js в папку javascript и откомменчиваем строку
config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
в application.rb

Все пишут об этой ошибке где только можно. Ошибка возникает в get методе обертки open-uri над net/http, net/https, etc. Решается так - http://snippets.aktagon.com/snippets/370-Hack-for-using-OpenURI-with-SSL.

понедельник, 7 февраля 2011 г.

Вопросы на интервью для Ruby on Rails программиста

Нашел пост некого индийского rails программиста, который постит вопросы с интервью. Хоть там и не написано, откуда он их взял и реально ли их кто-то у него (или он сам) спрашивает, но выглядят они более менее вменяемо (upd: по мне, так чушь полная) - http://railsbuilder.blogspot.com/2009/04/ruby-on-rails-interview-questions.html

Ну и что бы самому узнать что-то новое, решил его перевести ну и добавить что-нибудь от себя:

1. Почему Ruby on Rails?

В использовании ruby on rails есть много плюсов:

  1. DRY(don't repeat yourself) Principal
  2. Convention over Configuration
  3. Gems and Plugins
  4. Scaffolding
  5. Pure OOP Concept
  6. REST Support
  7. Rack support
  8. Action Mailer
  9. RPC support
  10. Rexml Support (посмотреть тесты производительности других xml бибилотеки можно тут. Как видно, rexml далеко не крут.)
  11. etc...

2. В чем разница между Symbol и String.

У автора написано как-то мало. Подробней можно почитать тут - http://rubydev.ru/2011/01/ruby_symbols

3. Что такое request.xhr?

С помощью request.xhr можно проверить, action вызван с комощью аякса или нет . Всегда возвращает тип Boolean.

 def name
# Is this an XmlHttpRequest request?
if (request.xhr?)
render :text => @name.to_s
else
# No? Then render an action.
render :action => 'view_attribute', :attr => @name
end
end

4. Что можно определить в моделях?

Например:

  1. Validations (validates_presence_of, numeracility_of, format_of etc.)
  2. Relationships (has_one, has_many, HABTM etc.)
  3. Callbacks (before_save, after_save, before_create etc.)
  4. Какие-нибудь настройки плагинов
  5. Чистые SQL запросы, без AR.

5. Что такое ORM в Rails?

ORM расшифровывается как Object-relationship mapping. Это значит, что рубишный класс - это обертка для таблицы с БД, а поля класса - обертка для полей в этой таблице. После объяснен

6. Какие типы ассоциаций поддерживают модели?

Когда у вас в проекте более, чем одна модель, вам надо создавать связи между ними. Делается это с помощью ассоциаций. AR поддерживает 3 типа ассоциаций:

  • one-to-one
  • one-to-many
  • many-to-many

Делается это с помощью has_one, has_many, belongs_to, and has_and_belongs_to_many. Подробней - http://edgeguides.rubyonrails.org/association_basics.html

После первого беглого просмотра поста этого индуса мне показалось, что там бдут крутые вопросы ("ну 50 штук же, как они могут быть унылые", подумал я). Но они оказались мега унылые. Я не знаю, зачем я написал эти 6 вопросов тут. Оставлю их, на случай, если они вдруг кому-то плкажутся нормальными и информативными.


воскресенье, 6 февраля 2011 г.

uninitialized constant Gem::SilentUI (NameError)

Если вдруг появилась такая ошибка при работе bundler'a, то это значит, что вы обновили RubyGems до версии 1.5.0 и забыли обновить Bundler. В версии 1.0.10 это исправлено.

четверг, 3 февраля 2011 г.

Статус пользователя в Skype, ICQ, Yahoo, etc. из ruby

Сваял тут минимальную библиотеку для получения статуса пользователя в мессенджерах. Пока это Skype (для которого в настройках клиента надо включить возможность доступа к сатуса из веба. Тупость ппц. Как это сделать, можно прочитать на гитхабе библиотеки), ICQ и Yahoo. Пока только эти три, т.к у них самый простой апи для этого дела. Во всяких AIMах, чтоб получить доступ к апи, надо зарегиться, но и после этого там ничего не понятно и какой-то ад. Подробности можно почитать на гитхабе.