gpt4 book ai didi

ruby-on-rails - 快速帮助重构 Ruby 类

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:43 26 4
gpt4 key购买 nike

我已经编写了返回提要更新的此类,但我认为它可以进一步改进。这不是小故障或任何问题,但作为新的 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")

我正在获取以数组形式返回的对象,其中包含提要中的所有项目。

当然我做错了什么,所以他将不胜感激重构这个类的任何帮助。

此外,我希望看到有关我的实现的评论,以及任何可以使它变得更好的评论。

提前致谢

最佳答案

试试这个:

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:我已经删除了 :update 和 :new_entries 的 attr_accessor。

编辑

我添加了代码以启用条件缓存重新加载。

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

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

关于ruby-on-rails - 快速帮助重构 Ruby 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2485259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com