2010-01-15 114 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