Задача состоит в том, чтобы проверить, существует ли страница контактов и перейти к ней. Для сайтов, не находящихся на английском языке, метод ищет английскую страницу, а затем перезапускается, чтобы проверить контактную страницу.Каков правильный рубиновый способ переделать условный?
Мой условные отлично работает, но я полагал, что должен быть лучшим способом сделать это:
# First, I set the @url variable during Booleans.
# Checks are either to see if a link exists or if a page exists,
# (aka no 404 error).
#
# Here are two examples:
# Boolean, returns true if contact link is present.
def contact_link?
@url = link_with_href('contact')
[email protected]?
end
# True if contact page '../contact' does NOT get a 404 error.
def contact_page?
@url = page.uri.merge('../contact').to_s
begin
true if Mechanize.new.get(@url)
rescue Mechanize::ResponseCodeError
false
end
end
# #
# Now go to the correct page, based off of checks.
#
def go_to_contact_page
1.times do
case # No redo necessary.
when contact_link? # True if hyperlink exists
get(@url)
when contact_page? # False if 404 error
get(@url)
else # Redo is now necessary.
if english_link? # True if hyperlink exists
get(@url)
redo
elsif en_page? # False if 404 error
get(@url)
redo
elsif english_page? # False if 404 error
redo
end
end
end
end
Есть несколько вещей, чтобы обратить ваше внимание:
ли
1.times do
лучший способ сделать одинredo
? Будет лиbegin
лучше?Понимая, что в каждой из этих проверок задана переменная
@url
, в условной ветви есть избыточность вget(@url)
. Есть ли более краткий путь?Я пишу
redo
три раза который тоже похоже излишний. Есть ли способ вызвать его один раз и все еще установить переменную@url
?
Спасибо за помощь!
Не уверен, что я полностью понимаю вопрос, но вы можете объединить дела в 'case' заявление с запятой (например,' когда CONTACT_LINK ?, contact_page? '). Вам также не нужно 'else' перед блоком' if english_link? '. Это может быть учтено в вашем случае stat –