Нужна помощь в разбиении кода Ruby на методы - PullRequest
0 голосов
/ 03 мая 2011

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

Мне не нужен кто-то, чтобы писать код для меня, новозможно, объяснить, как я могу разбить это.Я новичок в программировании, и подобные вещи (разбивка вещей на методы) для меня действительно сложная концепция.

Вот что у меня есть:

  if params[:url] != ''
    url = params[:url] #line created so I can return url more easily (or, in general)
    words = params[:word].gsub("\n", ",").delete("\r").split(",") #.delete redundant?
    words.reject!(&:empty?)
    words.each(&:lstrip!)
    return "#{words}", "#{url}" #so that I can return url, not sure how to do that yet
  end

Код - это выдачаchecker, он берет URL и ключевые слова и проверяет их местоположение в поисковых системах.

Для URL это будет просто URL веб-сайта, который пользователь хочет проверить ... для слова, это будетключевые слова, по которым они хотят проверить свой сайт в Google .. пользователь может заполнить форму ввода следующим образом:

Corn on the cob,
Fibonacci,
StackOverflow
Chat, Meta, About
Badges
Tags,,
Unanswered
Ask Question

Ответы [ 2 ]

1 голос
/ 03 мая 2011
def foo params
  url = params[:url]
  url.empty? ? nil : [params[:word].scan(/[^\s\r,]+/), url]
end
  • Вы присваиваете url = params[:url].Если вы собираетесь это сделать, вы должны сделать это раньше других мест, где вы ссылаетесь на то же самое, чтобы уменьшить количество звонков [] на param.
  • У вас есть несколько условий для слов, чтобыбыть извлеченным.(a) Либо разделить на «\ n», «,», «\ r», (b) слово не должно быть длиной 0, (c) белые символы должны быть удалены.Все это можно сложить как scan(/[^\s\r,]+/).
  • . Вы хотите вернуть две переменные, когда url не пуст.Используйте массив в этом случае.
1 голос
/ 03 мая 2011

Ваш код берет неаккуратную строку и превращает ее в чистый массив.Сначала вы очищаете строку, а затем полируете массив.Вы можете определить методы для этих действий.

def clean_up_words(str)
 #code to clean str
  str
end

def clean_up_list(arr)
  #code to clean arr
  arr
end

dirty_list = clean_up_words( params[:word]).split(',') 
clean_list = clean_up_list( dirty_list )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...