- PVSM.RU - https://www.pvsm.ru -
Хочу поделиться в вами несколькими трюками, которые помогут сделать работу с Ruby on Rails лучше, быстрее, а также позволят вам много зарабатывать и более лучше одеваться.
Запускаем rails console и вызываем метод app: теперь в консоли можно делать то же что и в интеграционных тестах [1]
>> app.class
=> ActionDispatch::Integration::Session
Что это даёт?
Например можно тестировать routes прямо в консоли:
>> app.pages_path
=> "/pages"
>>app.page_path(@page)
=> "/pages/345"
Или делать запросы к нашему Rails application:
>> app.get("/pages/345")
=> 200
>> app.response.body
=> "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'n ..."
Обо всех методах доступных через app можно почитать тут ActionDispatch::Integration::Session [2] и тут: ActionDispatch::Integration::RequestHelpers [3]
С помощью helper мы можем получить доступ как к встроенным в Rails хелперам:
>>helper.mail_to "me@et.you"
=> "<a href="mailto:me@et.you">me@et.you</a>
>>helper.pluralize(2,'bug')
=> "2 bugs"
так и к своим:
def give_me_blog_link
<a href='myblog.com'>Blog</a>
end
>> helper.give_me_blog_link
=> "<a href='myblog.com'>Blog</a>
Но что делать когда в нашем хелпере используется instance variable (например client)?
def os_adviser
if @client.geek?
'free bsd'
elsif @client.blond?
'mac os'
else
'windows'
end
end
Проблему можно решить воспользовавшись Object#instance_variable_set
>> helper.os_adviser :@client, Client.first
=> #<Client id: 3034, ...
>> helper.os_adviser
=> "windows"
Ок, а что если хелпер использует данные из params?
def do_you_want_meat
params['meat'] ? 'О да, стейк с кровью!' : 'Нет, спасибо, мне бы фруктов'
end
В этом нам поможет небольшой хак:
>>helper.controller = OpenStruct.new( { :params => {} } )
=> #<OpenStruct params={}>
>>helper.do_you_want_meat
=> 'Нет, спасибо, мне бы фруктов'
>>helper.controller = OpenStruct.new( { :params => { :meat => true } } )
=> #<OpenStruct params={:meat=>true}>
>>helper.do_you_want_meat
=> 'О да, стейк с кровью!'
Если вы запускаете консоль чтобы что-то протестировать на production сервере, есть опасность ненароком удалить или изменить данные в базе. Чтобы этого избежать можно воспользоваться запуском консоли с опцией --sandbox
>>rails r 'puts User.last.name'
=> 'Fedor'
>>rails c
>>user = User.last
>>user.name = "Petr"
>>user.save
>>user.name
=> "Petr"
>>exit
>>rails r 'puts User.last.name'
=> 'Fedor'
Удобная штука, интересно, появится ли это в Ruby.
>>options = {:color => 'black', :size => 'medium', :city => 'London'}
=>{:color => 'black', :size => 'medium', :city => 'London'}
>>options.except!(:city)
=>{:color => 'black', :size => 'medium'}
Обычно это делается с помощью
>>string = 'corvalol'
>>string =~ /lol/
=> 5 # позиция в строке где найдено совпадение
Альтернативный способ, на мой взгляд несколько грациознее
>>string = 'corvalol'
>>string['lol']
=> 'lol' # если найдено совпадение, возвращает его
Это только 5 фишек, которые показались мне интересными, по ссылкам ниже их гораздо больше.
confreaks.com/videos/889-railsconf2012-ten-things-you-didn-t-know-rails-could-do [4]
37signals.com/svn/posts/3176-three-quick-rails-console-tips [5]
rubyreloaded.com/trickshots/ [6]
stackoverflow.com/questions/151030/how-do-i-call-controller-view-methods-from-the-console-in-rails [7]
Автор: naezdnik
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby/10848
Ссылки в тексте:
[1] интеграционных тестах: http://guides.rubyonrails.org/testing.html#integration-testing
[2] ActionDispatch::Integration::Session: http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html
[3] ActionDispatch::Integration::RequestHelpers: http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html
[4] confreaks.com/videos/889-railsconf2012-ten-things-you-didn-t-know-rails-could-do: http://confreaks.com/videos/889-railsconf2012-ten-things-you-didn-t-know-rails-could-do
[5] 37signals.com/svn/posts/3176-three-quick-rails-console-tips: http://37signals.com/svn/posts/3176-three-quick-rails-console-tips
[6] rubyreloaded.com/trickshots/: http://rubyreloaded.com/trickshots/
[7] stackoverflow.com/questions/151030/how-do-i-call-controller-view-methods-from-the-console-in-rails: http://stackoverflow.com/questions/151030/how-do-i-call-controller-view-methods-from-the-console-in-rails
Нажмите здесь для печати.