2012-07-27 59 views
0

因此,我正在採取我的第一步使用Presenters for rails應用程序,而我只是在重構一些代碼。我有幾個顯示電話號碼(即電話號碼,手機號碼和傳真號碼)格式良好或顯示「沒有給定」的字段。很明顯,我原本是這樣認爲的,但把邏輯轉移到我的主持人身上。一旦那裏我發現這一切都是一樣的,所以它重構到它使用的方法名稱和發送功能的私有方法:依賴於__method__的重構方法

class CustomerPresenter < BasePresenter 
    presents :customer 

    def phone 
    format_number(__method__) 
    end 

    def cell 
    format_number(__method__) 
    end 

    def fax 
    format_number(__method__) 
    end 

private 

    def format_number(method) 
    hande_none customer.send(method) do 
     h.number_to_phone(customer.send(method), :area_code => true) 
    end 
    end 
end 

,但這段代碼似乎仍然沒有幹。由於format_number使用方法名,所以我必須定義三個獨立的方法。我很好奇,如果在這裏我還能做更多的事情。

p.s. hande_none只是返回塊,如果有什麼或返回「沒有給出」

回答

0

我通常避免混合實際的getter /方法/屬性名稱與用於格式化它們的方法。

這就是爲什麼我會用*_formatted後綴:與一般的後綴,你可以有一個簡單的method_missing這將導致你喜歡的東西:

class CustomerPresenter < BasePresenter 
    presents :customer 

    private 

    def format_number(method) 
    hande_none customer.send(method) do 
     h.number_to_phone(customer.send(method), :area_code => true) 
    end 
    end 

    def method_missing(method_name, *args, &block) 
    case method_name 
    when /(.*)_formatted$/ 
     #here you could create the method on the fly to avoid method missing next time 
     return format_number($1) 
    end  
    super(method_name, *args, &block) 
    end 
end 

基本上,我在BasePresenter爲*_currency_format這已經