2012-11-20 23 views
0

我試圖根據時間戳檢索稅率。對於我在Time類中定義「tax_rate」的地方做一個簡單的mixin沒有任何意義。將「tax_rate」放入「政府」類(或模塊?我不知道我是新手)是否更有意義,並且只需將時間類的方法提供給當前時間如果使用它自己的話。Ruby通過另一個延長時間類

例子:

Time.now.tax_rate == 0.13
10.years_ago.tax_rate == 0.10
Government.tax_rate == 0.13(假定Time.now)

當所述方法TAX_RATE如下:

def self.tax_rate 
    t = self || Time.now # I know this part won't work properly, I'll fix it later. I want it to default to using the current Time object or if the method is used on its own, the current time. 
    return 0.10 if t < Time.parse("July 1, 2001") 
    return 0.12 if t < Time.parse("July 1, 2010") 
    0.13 
end 

我基本上需要在diff中引用稅率在我的rails項目中的不同類,我覺得把它直接放入其中一個模型中並不合適。它需要是獨立的。

+0

那又如何?你的問題是什麼? – sawa

+0

我的問題是我該怎麼做?我做一個叫做「政府」的班級嗎?我如何指定時間課程可以使用某些方法? – JakeTheSnake

回答

1

爲什麼不只是有一個TaxRate模塊?

module TaxRate 
    def self.get t = Time.now 
    t = Time.parse(t) if t.kind_of?(String) 
    case 
    when t < Time.parse("July 1, 2001") then 0.10 
    when t < Time.parse("July 1, 2010") then 0.12 
    else 0.13 
    end 
    end 
end 

TaxRate.get #=> 0.13 
TaxRate.get(Time.now) #=> 0.13 
TaxRate.get("July 1, 2000") #=> 0.10 
TaxRate.get("July 1, 2012") #=> 0.13 
TaxRate.get(10.years_ago) #=> 1.10 

如果你想在Time定義tax_rate,我認爲這是不自然的,那麼,只是猴子補丁Time

class Time 
    def tax_rate 
    case 
    when self < Time.parse("July 1, 2001") then 0.10 
    when self < Time.parse("July 1, 2010") then 0.12 
    else 0.13 
    end 
    end 
end 

Time.now.tax_rate #=> 0.13 
10.years_ago.tax_rate #=> 0.10 
+0

更多的只是編碼偏好,我寧願得到日期的tax_rate而不是始終使用日期作爲參數。我想我會不得不做一個單獨的mixin引用這個模塊?有沒有辦法從模塊內部做到這一點? – JakeTheSnake