2009 年 8 月 13 日,星期四

Edge Rails 的新功能:BugMash 版

作者:Nathaniel Bibler

又一周,又一次 Edge Rails 的更新。我的天,你可真不让我省心,是吧?这个周末,如果你还没听说过,那就是首次 Rails 和 RailsBridge BugMash。如果我的计算没错,过去六天里,Rails master 大约有 300 次提交,其中大部分是在周末完成的。这简直是严峻的考验!这里有很多真正的好东西,让我们开始吧。

我想要的只是一个小小的验证

ActiveRecord(或者更准确地说,ActiveModel)在这个周末得到了很多关于验证的优化。

  • 感谢 James Hill,你现在可以从自定义方法读取你的验证。这样你就可以更轻松地验证非列(实例变量)数据了。
  • Adam Keys 在 validates_length_of 中添加了对排他范围的支持。所以,validates_length_of :name, :within => (5...10) 实际上会将有效长度限制在 5 到 9 之间。
  • 感谢 Zac Williams,validates_length_of :name, :maximum => 10 现在默认会允许 nil通过验证。
  • 如果不能 validates_format_of :without => /.../,那么 validates_format_of 有什么用呢?嗯,作用不大,我告诉你… Elliot Winkler 提供了一个补丁来解决这个问题。
  • 最后,但同样重要的是 Jeff Dean 提交了一个很棒的补丁,它现在为我们带来了:validates_with。这个小巧的改进现在允许你将验证代码放入外部类中。我的朋友们,这意味着更好的职责封装,我敢打赌,可读性会更好,甚至可以在你的应用程序或 gem 中共享验证逻辑。干得好,Jeff。

我们变得更加资源丰富

ActiveResource 在这个周末收到了不少更新。而且,我相信很多人会为其中的一些更新感到庆幸。

  • 感谢 Marshall Huss,ActiveResource 现在支持 HTTP 代理。这在大型企业和其他有防火墙或隔离的环境中会非常有用。
  • Roy Nicholson 为 ActiveResource 添加了 SSL 选项。这允许你使用 X509 证书、SSL 超时、对等验证等。
  • Jatinder Singh 为 ActiveResource.exists? 进行了一些优化。所谓的优化,我确实是说它现在能正常工作了。而不是抛出 Net::HTTP 错误。
  • Fabien Jakimowicz 添加了 JSON 错误报告支持。所以,现在无论你使用的是 XML 还是 JSON,错误都会被正确地报告给你。

人多力量大

感谢 Dan Cheail,我们终于得到了一个grouped_collection_select 辅助方法。我是说,拜托,你不可能告诉我你不会喜欢这个。

class Continent < ActiveRecord::Base
class Country < ActiveRecord::Base
class City < ActiveRecord::Base

<%= grouped_collection_select(:city, :country_id, @continents, :countries, :name, :id, :name) %>

<select name="city[country_id]">
  <optgroup label="Africa">
    <option value="1">South Africa</option>
<option value="3">Somalia</option>
  </optgroup>
<optgroup label="Europe">
<option value="7" selected="selected">Denmark</option>
    <option value="2">Ireland</option>
</optgroup>
</select>

我拥有大量的路由

这个周末,Mike Breen 为 rake routes 提交了一个小的但非常有用的补丁。现在你可以通过传递 CONTROLLER=foo 来过滤列出的结果。这。就是。太棒了。我个人已经到了手指会自动地在输入 rake routes 时追加“| grep foo”的部分的程度了……显然我有极客肌肉记忆。*叹气*

言简意赅

我将在这里结束 BugMash 部分,只提几个值得一提的提交。当然,这并不是 BugMash 的全部,我可能可以再写一篇同样长的文章来介绍更多修复的 bug 和新增的功能,但总得有个结束,对吧?

  • Rizwan Reza 添加了支持,通过 textilize 辅助方法可以定义自定义 RedCloth 选项。所以,现在 textilize("Testing <b>HTML</b>", :filter_html) 实际上会过滤 HTML!
  • 你现在可以redirect_to(User) - 请注意,这里 User 是一个类而不是一个实例 - 作为 redirect_to(users_url) 的同义词。感谢 Niklas Holmgren 实现此功能。
  • 由于 Eric Davis 的贡献,已发送的邮件现在可以保存到磁盘。当使用新的 :file 传递方法时,你甚至可以定义自己的自定义 :location 来进行目录存储。
  • 最后,虽然这不一定与 BugMash 有关,但 José Valim - 在数十次其他提交中 - 添加了model.destroyed?。这个巧妙的方法只有在你当前查看的实例已成功销毁时才会返回 true

现在我们处理完了这些,这里有几个与 BugMash 无关但已得到解决的话题。

访问 Oracle

知道路和走在路上是有区别的。本周,Rails 在这方面有一些更新,主要围绕着测试,增加了改进的 Oracle 数据库支持。这项工作很大一部分似乎来自一个人,Raimonds Simanovskis。我知道当我们谈论 Rails 的数据库时,总是会想到四大 - SQLite、MySQL、PostgreSQL,以及那个不愿提及的另一个 - 所以很高兴能更多地关注到房间里那只 800 磅重的大猩猩。

这次更新修复了由于偏移量和限制导致的测试用例失败、空字符串存储为 null、ActiveRecord.sum 的数字结果、Oracle 在连接时未使用的 'AS' 关键字,以及许多其他问题。

AbstractController::Responder

José Valim 和 Yehuda Katz(以及许多其他人,我敢肯定)在重构 Rails 渲染器方面做了出色的工作。事实上,大部分渲染代码找到了一个共同的对象——AbstractController::Responder。当然,这可能不是它最终的归宿,但值得注意的是,一旦将很多渲染逻辑整合在一起,核心团队就能够快速识别和重构逻辑,看到显著的速度提升。曾几何时,Yehuda 甚至提到一项经过测试的基准显示,“部分渲染速度比 Rails 2.3 快 10%”。

我知道在 RailsEnvy 播客中,我曾嘲笑 Rails 3.0 发布所需的时间,但重要的是要注意,这些人正在做一些非常棒的工作。我看到了大量的测试和基准测试以及非常智能的重构。我们确实还有很多美好的事物即将到来。

我敢肯定我遗漏了本周几项重要和/或有趣的提交。所以,如果其中一项是你的,我先表示歉意。我和社区的其他成员非常感谢你们这个周末付出的努力,Rails 因此变得更好了。所以,非常感谢,非常感谢,非常感谢所有参与 BugMash 的朋友们。而且,如果你错过了这一轮的提交,我们当然欢迎你参加下一轮。

如果你更喜欢简短的音频摘要,你应该看看 Envy Labs 新推出的播客 Ruby5;这是一个每周两次、时长 5 分钟的播客,涵盖 Ruby 和 Ruby on Rails 新闻。

照片:Diego_3336 的布鲁克林大桥虚拟之旅