BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

RubyGems新增对Plugins的支持

| 作者 Mirko Stocker 关注 1 他的粉丝 ,译者 杨晨 关注 0 他的粉丝 发布于 2009年5月5日. 估计阅读时间: 3 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

最近发布的RubyGems1.3.2版本绝不仅仅只是一个Bug修复版,它还包括了一些新的功能:

在RubyGems 1.3.2中,RubyGems可以加载安装在gems或者$LOAD_PATH中的插件。插件的名字必须以‘rubygems_plugin’的形式命名,然后Gem::find_files才能找到这个插件并且加载。

Ryan Davis介绍了一个例子:Graph plugin生成了一个所有已安装的Gems的依赖和信息图(过时的,或者即将需要的依赖)。

我们采访了RubyGems的维护者Eric Hodel,来了解关于RubyGems插件的更多细节:

这个特性要求RubyGems的开发者加入很多人们希望加入的功能,有些功能是可以作为一个单独的包来完成。在安装的时候程序也可以做一些事情,或者要求用户来手动进行干涉。

这个插件最开始是一个Neil Wilson编写的补丁,这个插件能够将安装的钩子添加到Debian的RubyGems中,使得两者更加方便地集成。使用他的插件,我们需要添加两个特定的文件,这样RubyGems就能够在启动的时候尝试请求ruby包管理器的rubygems/defaults/operating_system.rb和ruby实现器的rubygems/defaults/#{RUBY_ENGINE}.rb来添加特定功能。例如,Rubinius能够在gem中预编译所有的.rb文件以减少启动时间。

大约在同一时间,我加入了Gem.find_files允许gem作者方便地构建他们自己的插件系统。RDoc就是使用这个来自动地加载其插件。

由于它在RDoc上表现得非常优秀,所以我决定在RubyGems中也加入相同的功能。

我不会试图让插件能够广泛地挂载到RubyGems每一个可能的地方。我确定开发者非常希望能够挂载到那些现在不易存取的领域,我希望他们能够提交一些新特性请求,帮助我来改进RubyGems。对我来说,为一个插件改进API比维护一个全新的特性容易得多。

我的愿望是富有创造力的开发者能够提供无需我在RubyGems提供并且维护的令人惊喜的有用功能。

除了Graph插件,也有一个叫做rubypan的插件,它在rubypan.org上寻找gem。它们能够工作在“一个能够创建OS X字典的插件”上,这个插件所依赖的ri数据能够在你安装或者卸载gem的时候自动更新。

插件作者能够将插件挂载到RubyGems的安装或者卸载前后的过程,详细见Gem文档。编写一个自己的command插件是非常简单的:编写一个Command的子类,然后将其注册到Gem::CommandManager

你肯错过RubyGems中插件提供的特性吗?

查看英文原文:RubyGems Gets Plugins

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT