【发布时间】:2017-02-07 11:40:19
【问题描述】:
我正在编写一个简单的 gem,它可以从文本文件和 zip 档案中加载和保存数据。因此,它有四种方法:分别为load_from_file、load_from_zip、save_to_file 和save_to_zip。问题是我不知道如何为这些方法指定加载和保存的相对路径。他们来了:
def load_from_file(filename)
File.open(filename) do |f|
f.each { |line| add(line) } # `add` is my another class method
end
end
def load_from_zip(filename)
Zip::File.open("#{filename}.zip") do |zipfile|
zipfile.each { |entry| read_zipped_file(zipfile, entry) } # my private method
end
end
def save_to_file(filename)
File.write("#{filename}.txt", data)
end
def save_to_zip(filename)
Zip::File.open("#{filename}.zip", Zip::File::CREATE) do |zipfile|
zipfile.get_output_stream('output.txt') { |f| f.print data }
end
end
private
def read_zipped_file(zipfile, entry)
zipfile.read(entry).lines.each { |line| add(line) }
end
所以我想要的基本上是允许这个gem通过系统中使用的相对路径加载和保存文件,例如我有一个位于 /home/user/my_app 的应用程序,其中包含两个文件 - app.rb 和 data.txt,我可以在不指定绝对路径的情况下从此目录中读取文件。
例子:
# app.rb
require 'my_gem'
my_gem = MyGem.new
my_gem.load_from_file('data.txt')
(抱歉英语不好)
UPD:这不是 Rails gem,我没有使用 Rails。这一切都只是纯粹的 Ruby。
【问题讨论】:
标签: ruby