2010-01-15 5 views

Répondre

2

Oh, c'est propre. Consultez le rubyzip bijou:

rubyzip propose également le zip/ziprequire.rb module (source) qui permet ruby ​​ de charger des modules de rubis de zip archives.

(Mise à jour: Le ziprequire.rb n'est plus présent dans la gemme rubyzip, mais le lien source semble contenir son ancien contenu quand même.)

souhaiterai. Ceci est légèrement modifié par rapport à leur exemple:

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 

Vous ne devez pas utiliser la bibliothèque de rubyzip pour créer la bibliothèque zippée, bien sûr. Vous pouvez utiliser le zip CLI pour cela.

+1

Intéressant en effet. Il semble (d'un coup d'oeil rapide) que ziprequire.rb n'est plus là. Apparemment, [il y a un problème] (https://github.com/rubyzip/rubyzip/issues/51) à ce sujet. [Ici] (https://github.com/rubyzip/rubyzip/commit/794c9463fcb2f5a0bd41f4645978e691c66b0ea6) est le commit actuel dans lequel a été retiré le repo "officiel" de RubyZip. Bien sûr, il peut toujours être ajouté dans votre propre projet (s) au besoin ... –

+0

Edited post à cette offre. –

1

require et load sont juste des méthodes comme les autres. Vous pouvez les défaire, les redéfinir, les ignorer, les accrocher, les envelopper pour faire tout ce que vous voulez. En fait, c'est exactement comme ça que fonctionne RubyGems.

Maintenant, je ne sais pas si quelqu'un a déjà implémenté ce pour vous, mais je me souviens de certaines discussions à ce sujet sur la mailinglist ruby-talk.

Cependant, il sont quelques exemples de code de la bibliothèque de chargement à partir d'autres emplacements que vous pouvez regarder, et peut-être copier/adapter ce qu'ils font à votre objectif:

  • http_require fait à peu près ce que cela ressemble: il vous permet de
  • Crate est un outil de conditionnement Ruby qui emballe une application Ruby dans un seul binaire et un couple de bases de données SQLite; il modifie require pour charger les bibliothèques à partir d'un (crypté) base de données SQLite au lieu du système de fichiers
  • et bien sûr je l'ai déjà mentionné RubyGems
Questions connexes