代码重构使用路径名并写入文件

时间:2010-02-11 21:13:03

标签: ruby-on-rails

我在铁轨上使用红宝石。下面给出的代码工作。但是我想知道它是否可以写得更好。

  # Usage: write 'hello world' to tmp/hello.txt file
  # Util.write_to_file('hello world', 'a+', 'tmp', 'hello.txt')
  def self.write_to_file(data, mode, *args)
    input = args
    filename = input.pop
    dir = Rails.root.join(*input).cleanpath.to_s
    FileUtils.mkdir_p(dir)
    file = File.join(dir, filename)
    File.open(file, mode) {|f| f.puts(data) }
  end

2 个答案:

答案 0 :(得分:2)

您多久更换一次模式?如果不经常,我会直接把它放在方法中,并完成其余的工作:

def self.write_to_file(data, *args)
  file = Rails.root.join(*args)

  FileUtils.mkdir_p(file.dirname)
  File.open(file, "a+") { |f| f.puts(data) }
end

答案 1 :(得分:0)

您可以利用现有的API,而不必自己完成所有脏工作,这样可以清理很多事情:

def self.write_to_file(data, mode, *path)
  path = File.expand_path(File.join(path.flatten), Rails.root)
  FileUtils.mkdir_p(File.dirname(path))
  File.open(path, mode) do |fh|
    fh.print(data)
  end
end

这里有几点需要注意。

  • File.expand_path将解析路径中的所有“../”部分。
  • File.dirname非常适合确定任意文件路径的目录。
  • 使用File#print将数据写入文件。 File#puts附加一个换行符。