我写过这个返回Feed更新的类,但我认为可以进一步改进。这不是什么微不足道的事情,但作为一个新的红宝石开发者,我认为改进总是好的: - )
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
正如你所看到的,它很简单,但我看到的东西并不完全正确:
举个例子,如果我做了类似的事情,在终端中。
client = Feedtosis::Client.new('http://stackoverflow.com/feeds')
result = client.fetch
然后我得到:
<Curl::Easy http://stackoverflow.com/feeds>
这正是我所期待的。但是,当用“inniting”类做同样的事情时:
FeedManager.new("http://stackoverflow.com/feeds")
我将对象作为数组返回,其中包含Feed上的所有项目。
当然我做错了,所以任何帮助重构这门课的人都会非常感激。
此外,我希望看到有关我的实施的评论,以及任何形式的评论,以使其更好,欢迎。
提前致谢
答案 0 :(得分: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: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.
答案 1 :(得分:0)
您希望initialize方法返回调用update的结果。 Initialize基本上是Ruby中的构造函数,因此它将返回新的FeedManager对象。
在类定义的中间放置一个require语句也非常“不寻常”。
答案 2 :(得分:0)
:update
,@updates
count > 0 ? true : false
可以只是count > 0