Ruby On Raisl 2.1新特性介绍

第3章: ActiveSupport

By Dong Bin, 2008/06/17

摘要:

Active Support 是一个非常有用的类集合,以及对 Ruby on Rails 应用非常有用的核心库扩展集合。

ACTIVESUPPORT::COREEXTENSIONS::DATE::CALCULATIONS


Time#end_of_day

返回当前日期和时间 11:59:59 PM.

Time#end_of_week

返回周末时间 (Sunday 11:59:59 PM).

Time#end_of_quarter

返回一个 Date 对象,代表本季度最后一天。换句话说,它根据当前日期返回三月,六月,九月或者十二月的最后一天。

Time#end_of_year

返回十二月 31 日 11:59:59 PM

Time#in_time_zone

本方法类似于 Time#localtime, 除了它使用 Time.zone 而不是 底层操作系统的时区。你可以传入 TimeZone 或者 String 作为参数。看下面的例子:
  Time.zone = 'Hawaii'
  Time.utc(2000).in_time_zone
  # => Fri, 31 Dec 1999 14:00:00 HST -10:00
  Time.utc(2000).in_time_zone('Alaska')
  # => Fri, 31 Dec 1999 15:00:00 AKST -09:00

Time#days_in_month

方法 days_in_month 中的一个 bug 被修正了, 当没有指定年的时候,对于2月它返回错误的天数。
这个改变使得在没有指定年的情况下,当前年在方法调用的作为默认值。假设你处于闰年,看下面的例子:
  Loading development environment (Rails 2.0.2)
  >> Time.days_in_month(2)
  => 28
  Loading development environment (Rails 2.1.0)
  >> Time.days_in_month(2)
  => 29

DateTime#to_f

DateTime 类得到了一个新的方法名为 called to_f,它把日期以浮点数的形式返回。这个浮点数代表从 Unix 纪元(1970,1月1日 午夜)开始的秒数。

Date.current

Date 类得到了一个新方法名为 current 来代替 Date.today, 因为它考虑到 config.time_zone 中设置的时区,如果它设置了, 返回 Time.zone.today. 如果没有设置, 它返回 Date.today.

FRAGMENT_EXIST?

两个新方法被加入到 cache_store 中: fragment_exist? 和 exist?.

方法 fragment_exist? 顾名思义, 它检验一个 key 所指定的缓存片段是否存在。基本上代替了著名的:
  read_fragment(path).nil?
exist? 方法被加入到 cache_store, 而 fragment_exist? 是一个你能够在 Controller 中使用的 helper。

UTC OR GMT?

这是一个修正,但是很有趣。迄今为止,Rails 使用 UTC 缩写很频繁,但是当 TimeZone 的 to_s 方法被调用的时候,它打印 GMT,而不是 UTC。这是因为 GMT 缩写 在对于最终用户最熟悉。 如果你观察 Windows 控制面板,其中你可以选择时区,你会注意到缩写是 GMT。Google 和 Yahoo 也在他们的产品中使用 GMT。
    TimeZone['Moscow'].to_s #=> "(GMT+03:00) Moscow"

JSON ESCAPE

json_escape 方法行为类似 html_escape。在我们想要在HTML页面中显示 JSON 字符串的时候非常有用。例如,在一个文档处理中:
   puts json_escape("is a > 0 & a < 10?")
   # => is a \u003E 0 \u0026 a \u003C 10?
我们也能使用简写 j 在 ERB 中:
    <%= j @person.to_json %>
如果你想所有的 JSON 代码默认都被 'escaped', 在你的 environment.rb 文件中包含下面的代码:
    ActiveSupport.escape_html_entities_in_json = true

MEM_CACHE_STORE NOW ACCEPTS OPTIONS

Memcache-Client 被包含在 ActiveSupport::Cache 中使得事情变得比以前更容易了, 但是它也剥夺了灵活性,它除了 memcached 服务器的 IP 之外什么都不允许我们配置。Jonathan Weiss 提交给Rails一个补丁,允许额外的选项比如:
   ActiveSupport::Cache.lookup_store :mem_cache_store, "localhost"
   ActiveSupport::Cache.lookup_store :mem_cache_store, "localhost", '192.168.1.1',
       :namespace => 'foo'
或者
   config.action_controller.fragment_cache_store = :mem_cache_store, 'localhost',
       {:compression => true, :debug => true, :namespace =>'foo'}

TIME.CURRENT

Time 类中的新方法. current 方法返回值依赖 config.time_zone, 如果之前指定过,方法返回 Time.zone.now,否则返回 Time.now.
   # return value depends on config.time_zone
   Time.current
sinceago 方法也改变了他们的返回值, 如果 config.time_zone 已经指定,它返回一个 TimeWithZone.
它让 Time.current 方法 作为新的默认方法来获取当前时间。代替了 Time.now (这个方法仍然存在,但是它不考虑指定的时区).
datetime_select 方法, select_datetimeselect_time 也已被更新以默认返回 Time.current.

REMOVING WHITESPACES WITH SQUISH METHOD

两个新方法被加入到 String 对象中,squish 和 squish!.
这两个方法和 strip 方法一样。它删除文本前后的空格,它也删除文本中间无用的空格。看这个例子 :
  “    A    text      full    of       spaces      “.strip
  #=> “A       text        full        of        spaces”

“   A   text  full   of   spaces  ".squish
#=> “A text full of spaces”