2010-03-21 49 views
4

我寫過這個類,它返回Feed更新,但我認爲它可以進一步改進。這不是出問題或任何東西,但作爲一個新的Ruby開發者,我認爲這是一件好事,提高:-)快速幫助重構Ruby類

class FeedManager 
    attr_accessor :feed_object, :update, :new_entries 

    require 'feedtosis' 

    def initialize(feed_url) 
    @feed_object = Feedtosis::Client.new(feed_url) 
    fetch 
    end 

    def fetch 
    @feed_object.fetch 
    end 

    def update 
    @updates = fetch 
    end 

    def updated? 
    @updates.new_entries.count > 0 ? true : false 
    end 

    def new_entries 
    @updates.new_entries 
    end 
end 

正如你可以看到,這是相當簡單的,但我看到的是,事情並不很正確的是:

  1. 每當我通過終端調用fetch時,它會打印一個包含更新的列表,當它真的假定返回一個對象時。

因此,作爲一個例子,在終端,如果我這樣做:

client = Feedtosis::Client.new('http://stackoverflow.com/feeds') 
result = client.fetch 

然後我得到:

<Curl::Easy http://stackoverflow.com/feeds> 

這也正是我所期待的。但是,這樣做與「inniting」級同樣的事情時有:

FeedManager.new("http://stackoverflow.com/feeds") 

我得到恢復與對飼料的所有項目的數組對象。

當然,我做錯了什麼,所以任何幫助重構這個類他將不勝感激。

此外,我希望看到有關我的實施以及任何形式的評論,以使其更好的意見,歡迎。

在此先感謝

回答

1

試試這個:

class FeedManager 

    require 'feedtosis' 

    attr_accessor :feed_object  

    def initialize(feed_url) 
    self.feed_object = Feedtosis::Client.new(feed_url) 
    end  
    def fetch 
    feed_object.fetch 
    end  
    def updates (reload = true) 
    @updates = reload ? fetch : @updates 
    end  
    def updated? 
    updates(false).new_entries.count > 0 
    end  
    def new_entries 
    updates(false).new_entries 
    end 
end 

現在你可以更新如下:

result = FeedManager.new("http://stackoverflow.com/feeds").updates 

PS:我已經刪除了attr_accessor for:update和new_entries。

編輯

我加入的代碼,使有條件的緩存重新加載。

feed = FeedManager.new("http://stackoverflow.com/feeds") 
updates = feed.updates # reloads the updates 
# do something 

updates = feed.updates(false) # get the updates from cache. 
+0

不確定我;我在這裏錯過了一些東西,但我應該打電話:result = FeedManager.new(「http://stackoverflow.com/feeds」).updates每次? 此外,我是這樣做的: 結果= FeedManager.new(「http://stackoverflow.com/feeds」)和嘗試 result.updates,我得到「你有沒有對象,當你不期望它!」 – 2010-03-21 01:11:34

+0

直接調用Feedtosis :: Client.new(feed_url).fetch時,相同的URL是否有效? – 2010-03-21 02:21:20

+0

在初始化方法 – 2010-03-21 02:58:22

0

看來您所期望的初始化方法返回調用更新的結果。 Initialize基本上是Ruby中的一個構造函數,所以它會返回新的FeedManager對象。

在類定義的中間放置require語句也很「不尋常」。

+0

這應該在哪裏呢? – 2010-03-21 00:28:31

+0

您似乎不會保留您正在創建的對象。你想達到什麼目的?你只是想創建一個Feedtosis對象並獲得它的更新(然後扔掉對象)的結果,如果你應該爲腳本定義一個方便的方法。 – 2010-03-21 02:59:22

+0

我已經修復了'initialize'方法中的代碼。再試一次。 – 2010-03-21 03:52:17

0
  1. :update@updates

  2. count > 0 ? true : false可以只是count > 0

+0

不確定你的意思是: :update,@updates – 2010-03-21 00:16:35

+0

我認爲他指的是'attr_accessor'ize':update',但是你到處使用'@ updates'而不是'@ update'。 – theIV 2010-03-21 00:43:30