是否可以让我的 gem 写入它的根 gem 目录?

Is it possible to have my gem write to it's root gem directory?

我正在尝试通过写入 gem 中包含的文件来改进我的 gem 的收藏夹功能。我当前的版本有效,但它要求用户在当前工作目录中创建文件才能正常工作。

我目前正在使用 FileUtils 来写入文件,但不知道是否 1. 这甚至可能认为可能会有权限问题,以及 2. 如果有可能如何成功获得路径目标跨不同的平台和环境。

当前代码:在我的可执行文件中

#creator    
if !File.exist?('usr')

  FileUtils::mkdir 'usr'

  FileUtils::touch 'usr/favorites.txt'

end


#writer
File.open("../ruby_doc_favorites.txt", "a"){|l| l.puts "some string"}

我想要...

File.open("[dynamic_path_to_gem_directory]", "a"){|l| l.puts "some string"}

获取 gem 文件夹的一种方法如下:

def gem_folder(gem_name, version)
  "#{Gem.path[1]}/gems/#{gem_name}-#{version}"
end

每次更改 gem 时都需要更改版本,但您可能已经这样做了。

不幸的是,我不能保证这会以 cross-platform 的方式工作。

示例:

gem_folder('pry', '0.11.3')
# => "/Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pry-0.11.3"

# check find_files as a reference
Gem.find_files("pry")[0]
# => "/Users/max/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pry-0.11.3/lib/pry.rb"

您可以为 gem 硬编码 gem 名称和版本。