需要帮助将Ruby代码分解为方法

时间:2011-05-03 03:48:47

标签: ruby oop methods rspec

我正在编写一个程序来更好地学习编程,我希望使用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

代码是一个SERP检查器,需要一个网址和关键字,并检查它们在搜索引擎中的位置。

对于网址,它只是用户希望检查的网站的网址...换句话说,这将是他们希望在Google中检查其网站的关键字..用户可以填写输入形式如此:

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

2 个答案:

答案 0 :(得分:1)

您的代码采用草率字符串并将其转换为干净的数组。首先清理字符串,然后抛光数组。您可以为这些操作定义方法。

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 )

答案 1 :(得分:1)

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不为空时,您想要返回两个变量。在这种情况下使用数组。