2010-01-15 103 views

回答

2

哦,这是整齐。检查出rubyzip宝石:

ruby​​zip还设有 zip/ziprequire.rb模块(source),其允许 红宝石加载从拉链 档案红宝石模块。

更新:该ziprequire.rb不再存在于rubyzip宝石,但source链接似乎包含它的旧内容仍然)

像现在这样。这只是从他们的例子稍微修改:

require 'rubygems' 
require 'zip/zipfilesystem' 
require 'zip/ziprequire' 

Zip::ZipFile.open("/tmp/mylib.zip", true) do |zip| 
    zip.file.open('mylib/somefile.rb', 'w') do |file| 
    file.puts "def foo" 
    file.puts " puts 'foo was here'" 
    file.puts "end" 
    end 
end 

$:.unshift '/tmp/mylib.zip' 
require 'mylib/somefile' 

foo # => foo was here 

当然,您不必使用rubyzip库来创建压缩库。您可以使用CLI zip。

+1

确实很有趣。它看起来(从快速浏览),ziprequire.rb是不存在的。显然,[有一个问题](https://github.com/rubyzip/rubyzip/issues/51)。 [Here](https://github.com/rubyzip/rubyzip/commit/794c9463fcb2f5a0bd41f4645978e691c66b0ea6)是从“官方”RubyZip回购库中删除的实际提交。当然,它仍然可以根据需要添加到您自己的项目中... – 2013-10-10 21:05:17

+0

编辑帖子来达到目的。 – 2013-10-10 21:06:36

1

requireload只是像其他任何方法。你可以取消定义它们,重新定义它们,覆盖它们,勾住它们,将它们包裹起来做你想做的任何事情。事实上,这正是RubyGems的工作原理。

现在,我不知道是否有人已经为您实施了这个,但我实际上还记得有关ruby-talk邮件列表的一些讨论。

然而,有的距离,你可以看看在备选地点装载库代码一些例子,也许复制/适应什么他们这样做是为了你的目的:

  • http_require确实非常它听起来像:它允许你require an HTTP URI
  • Crate是一个Ruby打包工具,它将一个Ruby应用程序打包成一个单一的二进制文件和一对SQLite数据库;它修改require加载库出(加密的)SQLite数据库而不是文件系统
  • 的,当然我已经提到RubyGems
相关问题