Passenger 팀에서 보내 온 EnumFu 패치 적용

written by on September 6th, 2008 @ 10:53 AM

몇 일전에 Passenger(mod_rails) 팀의  Hongli Lai 라는 개발자가  EnumFu의 패치를 메일로 보내주었다. 패치도 물론 고마웠지만 자신들이 EnumFu를 여러 곳에서 사용하고 있다는 내용이 있어 더 반가웠다. 

 


Thank you for the excellent enum_fu plugin. We use it in many of our applications.

   ....   

 

Passenger 의 명성에 걸맞게 패치의 내용도 알차다.

 

먼저, car.status = :broken 대신에  car.status = 3   또는 car.status = '3' 등이 가능해졌다. 

이 기능은 전에 다른 사람도 요청한 적이 있었지만,  심볼을 입력 값으로 사용하려는 원래 취지에 맞지 않을까 하여 미루고 있었던 거다. 하지만 나 역시 정수 값을 직접 쓰고 싶은 경우를 가끔 경험했기 때문에 그대로 반영했다.

 

두번째, :broken 이라는 심볼이  DB에 저장될 때의 실제 값을 알고 싶으면 Car.status(:broken) 를 사용한다. 이렇게 심볼의 값을 조회하는 메소드를 정의하는 부분에 있던 중대한 오류를 수정했다.

 

수정 전 후의 코드는 아래와 같다.

기존 코드

  1.       self.class.send(:define_method, name, p1)

 

새로운 코드

  1.  
  2.         metaclass = class << self
  3.             self
  4.         end
  5.         metaclass.send(:define_method, name, p1)


이해하기 쉽게 Car.status 예를 가지고 계속 설명하면, 

기존 코드에서는 싱글턴 메소드 'status'를   Car.class 에 정의했다. 그런데 Car.class 는 'Class' 이므로, 이렇게 하면 Car뿐만 아닌 모든 클래스에 status 메소드가 생겨 버린다.  (Aw Snap!)

 

새로운 코드에서는,  이를 바로잡기 위해서 Car의 메타클래스를 구한 뒤, 이 메타클래스에 status를 정의한다. 역시 메타프로그래밍은 헷갈린다.^^

 

끝으로,  EnumFu에 대한 테스트 코드들이 추가되었다.


이번 패치 덕분에  EnumFu가 많이 진화했다. 아주 간단한 플러그인이지만 내가 만든 소스를 남들이 유용하게 사용해 준다는 것은 참 고마운일이다.

 

PS.

이 참에 EnumFu의 소스 코드 관리를  GitHub에서 하기로 했다. 위치는 http://github.com/ikspres/enum_fu 

 

Comments

  • 프리버즈 on 06 Sep 17:59

    (ikspres) 우와, 자신이 만든 플러그인을 많은 사람들 (게다가, Passenger팀~!)이 유용하게 쓰고 있으면 정말 뿌듯할거 같아요. :) by 프리버즈
  • ikspres on 06 Sep 19:55

    네. 정말 그래요.^^
  • thinkr on 06 Sep 21:27

    Enum 처리는 항상 골칫거리인데 EnumFu 덕에 훨씬 수월해 졌습니다. 게다가 버전업까지 되었으니.. 우와~.. 잘 쓰겠습니다. 그리고 GitHub로 이사한 것 축하드립니다. by thinkr
  • chang on 08 Sep 01:10

    와우, 이렇게 좋은게 있는지 몰랐네요. 저두 잘 쓸께요~ by chang
  • deepblue on 08 Sep 10:45

    다시한번 말씀드리지만, 스프링노트팀에서도 아주 유용하게 잘 사용하고 있다는거 ^^
  • wow gold on 30 Sep 00:05

    I know some <a href=http://www.wowgoldshopping.com>wow gold</a> in wow,i love wow,love <a href=http://www.wowgold-shopping.com>wow gold</a>,love wowgoldshopping.com,too. by wow gold
  • Tandy on 01 Oct 22:47

    只需10元,就能让你的广告遍布各个网站! 支持图片/超链发送!支持分类/地域网站发送! 10元,就可能换来意想不到的效果,为什么不尝试下呢! QQ:224549200(注明“广告”) by Tandy
  • test on 07 Oct 23:00

    1 by test

Post a comment