浏览Ruby源代码

时间:2016-06-02 14:18:15

标签: ruby-on-rails ruby

我的主要目标是能够完全理解我正在使用的库/宝石。我尝试在Github上从头到尾阅读源代码,但这真的很难。

我认为一个更愉快,更温和的垫脚只是在我使用它时阅读每个库/ gem方法的源代码。

例如,我想知道Ruby on Rails中的redirect_to方法是如何工作的:

  1. 如何查找redirect_to方法的源代码?
    • 我知道在pry中我可以执行类似show-method method的操作,但是如何为Rails框架中的方法执行此操作?
  2. 您对如何更好地了解宝石及其API有什么建议吗?只是阅读源代码似乎很难,特别是对于框架。
  3. 谢谢!

3 个答案:

答案 0 :(得分:4)

RubyMine IDE满足了我的需求。它具有这些功能,大大降低了阅读宝石源的障碍:

  • Gems是项目树的一部分(在External Libraries伪目录中),因此您可以像编写自己的代码一样导航甚至编辑它们。

  • 单个键命令(Mac上的命令-B)从标识符(模块/类名,方法名等)导航到其声明,或者如果有多个声明则显示可供选择的列表。它适用于您的代码和gem代码。

  • 另一个命令(Mac上的option-command-O)允许您输入标识符名称以导航到上面。如果在您的代码中找不到您输入的内容,它会自动包含库代码;如果在您的代码中找到了您输入的内容,您可以再次点击密钥以包含gem代码。

  • 调试器会不断显示您正在执行的代码。您可以设置断点而无需编辑所需的代码。您可以检查实际执行的堆栈框架上方的任何堆栈框架。所有这些功能同样适用于您的代码和gem代码。

一般来说,RubyMine的所有功能都与gem代码以及项目代码一起使用。

关于理解除了阅读源代码之外的宝石的方法:大多数宝石都记录在他们的README中(我总是在Github上读取)以及gem的根目录或doc目录中的其他文档文件。一些宝石(包括Rails宝石)具有值得阅读的rdoc。但是,由于从使用gem到代码导航非常方便,我通常首先尝试,然后在读取实际代码之前读取代码中的rdoc(如果有的话)。 RubyMine还可以显示rdoc作为使用它的标识符(Mac上的F1),但我总是发现直接使用代码更容易。

答案 1 :(得分:2)

我尝试学习如何使用gem时的第一种方法是针对它编写测试。

Robert C. Martin写道:

  

学习第三方代码很难。集成第三方代码也很难。   同时做两件事是双倍的困难。如果我们采取不同的方法怎么办?代替   在我们的生产代码中试验和尝试新的东西,我们可以写一些   测试以探索我们对第三方代码的理解。 Jim Newkirk称这样的测试   学习测试。

     

在学习测试中,我们称之为第三方API,因为我们希望在我们的应用程序中使用它。   我们基本上做了一些控制实验,检查我们对该API的理解。   测试侧重于我们想要的API。

当您真正关注内部工作原理时,请阅读源代码。

希望这有帮助!

至于ActionController :: Redirecting

中定义redirect_to的位置

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/redirecting.rb

答案 2 :(得分:2)

如果您可以将代码放入控制器中,这通常会提供更多信息:

raise method(:redirect_to).source_location.inspect

这将准确显示方法的定义。

在使用像这样的大型代码库时,我通常非常依赖git

git grep 'def redirect_to'

如果没有任何结果:

git grep 'redirect_to'

您可能需要更仔细地过滤,但通常情况下,实施效果会很突出。

Ruby代码的优点是它的通常非常易读,通过它搜索通常比其他语言更令人愉快。