我目前正致力于规范使用google_drive
gem填充数据库的rake任务。 gem允许用户访问电子表格ws
,如下所示:
# Gets content of A2 cell.
p ws[2, 1] #==> "hoge"
我尝试使用规范的功能如下所示:
def get_tags(ws, row)
tags = []
[1, 21, 22, 23, 26, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40].each do |col|
tags << ws[row, col] unless ws[row, col].blank?
end
tags
end
相当自我解释,它会传递一行,然后将列数据添加到数组中指定的每列的tags
。
我的ws
数组由以下内容组成:
ws = [[nil, 'Good', 'Tultex', '0241', 'Men\s Blend Tee',
'XS - 3XL', '$3.40', '$4.50', '$4.50', '--', '--', '--',
'TSC', 'y', 'Adult Unisex', 'Tee Shirt', 'Short Sleeve',
'Crewneck', '3.2', 'Cotton/Poly (35/36)', 'Fitted', '11',
'0240 (ladies)', '', 'Std Fitted Crew', 'Tees and Tanks',
'Nicer - Fashion Fitted', 'Blend', '', '', '', 'Fashionable',
'', '', '']]
因此,我需要get_tags
才能返回此内容:
resultant = ['Good', 'Tee Shirt', 'Short Sleeve', 'Crew Neck',
'Standard', '', 'Tees and Tanks', 'Least Expensive',
'Regular Cotton', '', '', '', '', '', '', 'Least Expensive']
我的问题是我不知道如何指定一个数组来接受ws
所做的索引类型(ws[val, val]
),因为它通常是一个范围索引。我尝试创建一个二维数组但显然没有用。还尝试通过以下方式将其删除:
allow(ws).to receive(:[]) do |arg1, arg2|
ws[arg1][arg2]
end
这创建了一个无限循环的粗俗,所以我尝试将ws
存储到另一个名为temp
的数组中并执行此操作(几乎相同的事情):
allow(ws).to receive(:[]) do |arg1, arg2|
temp[arg1][arg2]
end
但我仍然以相同的无限短截循环结束。 关于下一步采取什么步骤的任何建议将不胜感激!在此先感谢:)
答案 0 :(得分:1)
如何创建一个处理所需接口的类:
class DBStub
def initialize(data_store)
@data_store = data_store
end
def [](arg1, arg2)
@data_store[arg1][arg2]
end
end
ws = DBStub.new(temp)
答案 1 :(得分:0)
您期望在ws中有什么价值?如果您不关心价值观是什么,只是想测试一下,他们可以做的就是
allow(ws).to receive(:[]) { rand(1000) }