오늘은 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이라는 메소드가 추가되었군요.
2. alias_attribute
루비에는 alias_method를 통해 메소드를 다른 이름으로도 호출할 수 있게 합니다. Rails 1.2에서는 이와 비슷한 개념으로 Model의 어트리뷰트를 다른 이름으로 호출할 수 있게 alias_attribute라는 것이 생겼습니다.
3. sum
inflect라는 메소드를 통해 조금은 어색하게 합을 구한 경험이 있으신가요?
Rails 1.2에서는 sum이라는 메소드를 통해 다음처럼 코딩할 수 있습니다.
4. to_s(:db)
SQL작성을 위해 id 숫자들을 콤마를 붙이시려면 to_s(:db)를 사용하세요.
5. alias_method_chain
6. split
split 메소드를 통해서 배열을 쪼갤 수 있습니다. 예제를 보시죠.
7. from_xml
Rails 1.2에서는 xml를 해시로 쉽게 파싱할 수 있습니다.
8. Builder::XmlMarkup 2.0
앞에 말씀드린 xml export에는 Builder::XmlMarkup가 사용되는데 이것이 2.0으로 업그레이드 되었네요. UTF8에 대한 지원이 더 강화된 것 같습니다. 그리고 attribute 값들도 escape된 문자열로 받아보게 되었군요.
새로워진 기능들과 함께 즐거운 Rails 코딩을~ :)
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이렇게 e.title이라는 호출을 통해 e.subject를 사용할 수 있게 된 것이지요. 만약 이 기능을 쓰지 않는다면 다음과 같이 길게 코딩해야 했을 것입니다.
alias_attribute :subject, :title
end
e = Email.find(1)
e.title # => "Superstars"
e.subject # => "Superstars"
e.subject? # => true
e.subject = "Megastars"
e.title # => "Megastars"
class Email < ActiveRecord::Base마치 attr_accessor를 사용하지 않고 setter, getter를 만드는 것과 유사한 모습이죠?
# alias_attribute :subject, :title
def title
self.subject
end
def title=(value)
self.subject = value
end
end
3. sum
inflect라는 메소드를 통해 조금은 어색하게 합을 구한 경험이 있으신가요?
payments.inject(0) { |sum, p| sum + p.price }이렇게 코딩하는 것 말이죠.
Rails 1.2에서는 sum이라는 메소드를 통해 다음처럼 코딩할 수 있습니다.
[1, 2, 3].sum단순하게 price의 합을 구하는 것이라면 Proc를 이용해서
payments.sum { |p| p.price * p.tax_rate }
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 코딩을~ :)
목차
- Rails 1.2 RC1의 ActiveRecord에 새로 추가된 기능들
- Rails 1.2 RC1의 ActionPack에 새로 추가된 기능들
- Rails 1.2 RC1의 ActiveSupport에 새로 추가된 기능들





