Rails 1.2 RC1의 Active Support에 새로 추가된 기능들

오늘은 Rails 1.2 RC1의 ActionPack에 새로 추가된 기능들에 이어서 Active Support에 추가된 기능들을 알아보겠습니다. Active Support는 Rails 코딩에 있어서 유용한 메소드를 제공해주는 일종의 helper library인데요, 일전에 유용성을 알려드린 MultiByte가 이 곳 소속이죠.

1. Unloadable
Rails에서 Model을 만들 때 DB table이 없는 경우에는 서버 구동 상태가 development 환경이라 하더라도 Rails가 model 코드의 변경사항을 매번 갱신하지 못합니다. request가 들어올 때 마다 DB table이름을 기준으로 모델 코드를 reload하기 때문이죠. 그래서 model에 reloadable을 지정해 줄 수 있었습니다. Rails 1.2에서는 반대로 unloadable이라는 메소드가 추가되었군요.
CONFIG.unloadable
이라고 써주면 매 request마다 모델 객체를 unload 해줄 수 있습니다.


2. alias_attribute
루비에는 alias_method를 통해 메소드를 다른 이름으로도 호출할 수 있게 합니다. Rails 1.2에서는 이와 비슷한 개념으로 Model의 어트리뷰트를 다른 이름으로 호출할 수 있게 alias_attribute라는 것이 생겼습니다.
class Email < ActiveRecord::Base
  alias_attribute :subject, :title
end

e = Email.find(1)
e.title    # => "Superstars"
e.subject  # => "Superstars"
e.subject? # => true
e.subject = "Megastars"
e.title    # => "Megastars"
이렇게 e.title이라는 호출을 통해 e.subject를 사용할 수 있게 된 것이지요. 만약 이 기능을 쓰지 않는다면 다음과 같이 길게 코딩해야 했을 것입니다.
class Email < ActiveRecord::Base
  # alias_attribute :subject, :title
  def title
    self.subject
  end

  def title=(value)
    self.subject = value
  end
end
마치 attr_accessor를 사용하지 않고 setter, getter를 만드는 것과 유사한 모습이죠?


3. sum
inflect라는 메소드를 통해 조금은 어색하게 합을 구한 경험이 있으신가요?
payments.inject(0) { |sum, p| sum + p.price }
이렇게 코딩하는 것 말이죠.
Rails 1.2에서는 sum이라는 메소드를 통해 다음처럼 코딩할 수 있습니다.
[1, 2, 3].sum
payments.sum { |p| p.price * p.tax_rate }
단순하게 price의 합을 구하는 것이라면 Proc를 이용해서
payments.sum(&:price)
이렇게 할 수도 있지요. 이건
payments.sum { |p| p.price }
와 같은 기능을 합니다.


4. to_s(:db)
SQL작성을 위해 id 숫자들을 콤마를 붙이시려면 to_s(:db)를 사용하세요.
Purchase.find(:all, :conditions => "product_id IN (#{shops.products.to_s(:db)})"
이렇게 말이죠.


5. alias_method_chain
alias_method :foo_without_feature, :foo
alias_method :foo, :foo_with_feature

alias_method_chain :foo, :feature
로 줄여 쓸 수 있다고 하는데 어떻게 활용해야 할 지는 잘 모르겠습니다.


6. split
split 메소드를 통해서 배열을 쪼갤 수 있습니다. 예제를 보시죠.
[1, 2, 3, 4, 5].split(3) => [[1, 2], [4, 5]]
(1..10).to_a.split { |i| i % 3 == 0 }   # => [[1, 2], [4, 5], [7, 8], [10]]
:)


7. from_xml
Rails 1.2에서는 xml를 해시로 쉽게 파싱할 수 있습니다.
Hash.from_xml <<-EOT
  <note>
    <title>This is a note</title>
    <created-at type="date">2004-10-10</created-at>
  </note>
EOT
와 같이 하시면
{ :note => { :title => "This is a note", :created_at => Date.new(2004, 10, 10) } }
와 같은 해시를 얻으실 수 있습니다. 예전에는 xml export를 rxml 템플릿을 이용해서 편하게 할 수 있었는데, 이제는 import까지 편리하게 코딩할 수 있습니다.


8. Builder::XmlMarkup 2.0
앞에 말씀드린 xml export에는 Builder::XmlMarkup가 사용되는데 이것이 2.0으로 업그레이드 되었네요. UTF8에 대한 지원이 더 강화된 것 같습니다. 그리고 attribute 값들도 escape된 문자열로 받아보게 되었군요.


새로워진 기능들과 함께 즐거운 Rails 코딩을~ :)


목차
  1. Rails 1.2 RC1의 ActiveRecord에 새로 추가된 기능들
  2. Rails 1.2 RC1의 ActionPack에 새로 추가된 기능들
  3. Rails 1.2 RC1의 ActiveSupport에 새로 추가된 기능들  
by 정목 | 2006/12/01 23:53 | Ruby & Rails | 트랙백 | 덧글(1)
트랙백 주소 : http://niceview.egloos.com/tb/2850671
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented at 2007/01/13 18:49
비공개 덧글입니다.

:         :

:

비공개 덧글