如何确定Tempfile是否是流?

时间:2018-08-03 08:58:31

标签: ruby roo

我对roo gem有问题。当我使用Rails应用程序上传文件时,由于我不想保留文件,而是从文件中导入电子表格数据,因此它最终在文件系统上作为Tempfile出现。

https://github.com/roo-rb/roo/blob/3ed05e1caef0ce3c5db5c19f1fa14e6f74193079/lib/roo/base.rb#L374

以上行检查我的对象是否响应搜索。这会导致问题。

(byebug) filename_or_stream.class
Tempfile

(byebug) filename_or_stream.methods.include? :seek
true

您如何建议我应该解决这个问题?

我试图抑制该错误

https://github.com/bigos/roo/commit/55ec3325ec3131fa34c3e0f5e647160cb17ef114

并能够继续我的工作,但问题仍然存在:Tempfile如何获得seek方法?

寻找寻线导致此行

https://github.com/roo-rb/roo/blob/3ed05e1caef0ce3c5db5c19f1fa14e6f74193079/lib/roo/open_office.rb#L372

这对我来说毫无意义,我仍然不知道为什么Tempfile会响应以寻求文档中没有提及任何内容。

说明问题的应用程序

https://github.com/bigos/open_example/blob/master/spec/models/open_sheet_spec.rb

可能的简单解决方案

if file.is_a? Tempfile
  @workbook = Roo::OpenOffice.new(file.path)
else
  @workbook = Roo::OpenOffice.new(file)
end

但是为什么这只是roo gem中Opensheet部分的问题?我没有在其他电子表格中注意到该问题。

0 个答案:

没有答案