创建自定义的Ruby gem包的教程
编写一个最简单的例子
1.建好如下文件夹
注意:lib目录下必须有个和你gem名字一样的rb文件。
$cdhola $tree . ├──hola.gemspec └──lib └──hola.rb
2.编写代码
.hola.rb
%catlib/hola.rb classHola defself.hi puts"Helloworld!" end end
.hola.gemspec
%cathola.gemspec Gem::Specification.newdo|s| s.name='hola' s.version='0.0.0' s.date='2010-04-28' s.summary="Hola!" s.description="Asimplehelloworldgem" s.authors=["NickQuaranto"] s.email='nick@quaran.to' s.files=["lib/hola.rb"] s.homepage= 'http://rubygems.org/gems/hola' end
这里面可以设置很多属性。我会专门写篇文章介绍。
上面字段的意思,比较简单。相信大家都能理解。
3.编译生成gem
%gembuildhola.gemspec SuccessfullybuiltRubyGem Name:hola Version:0.0.0 File:hola-0.0.0.gem %geminstall./hola-0.0.0.gem Successfullyinstalledhola-0.0.0 1geminstalled
4.测试使用
%irb >>require'hola' =>true >>Hola.hi Helloworld!
注意:在ruby1.9.2之前到版本里面,需要先require'rubygem',才能使用我们写的gem.
5.发布到rubygems网站
$curl-utomhttps://rubygems.org/api/v1/api_key.yaml> ~/.gem/credentials Enterhostpasswordforuser'tom':
设定完之后发布
%gempushhola-0.0.0.gem PushinggemtoRubyGems.org... Successfullyregisteredgem:hola(0.0.0)
发布成功。
这样任何一个人都可以使用你写的gem了。
稍微复杂的rubygem例子
上面的例子只有一个ruby文件,一般gem应该没有这么简单的。
下面说下有多个ruby文件该怎么写。
1.目录结构
多了个hola目录和translator.rb文件
%tree . ├──hola.gemspec └──lib ├──hola │└──translator.rb └──hola.rb
2.代码
lib/hola/translator.rb
%catlib/hola/translator.rb classHola::Translator definitialize(language) @language=language end defhi case@language when:spanish "holamundo" else "helloworld" end end end
lib/hola.rb
%catlib/hola.rb classHola defself.hi(language=:english) translator=Translator.new(language) translator.hi end end require'hola/translator'
.hola.gemspec
%cathola.gemspec Gem::Specification.newdo|s| s.name='hola' s.version='0.0.0' s.date='2010-04-28' s.summary="Hola!" s.description="Asimplehelloworldgem" s.authors=["NickQuaranto"] s.email='nick@quaran.to' s.files=["lib/hola.rb","lib/hola/translator.rb"] s.homepage= 'http://rubygems.org/gems/hola' end
红色是和上面不一样的地方。
其他步骤和上面一样了。很简单吧!
最后说下怎么写个gem包含可执行文件的例子。
这个也很简单。像rake就是典型的包含可执行文件的gem.
1.在刚才工程目录下建个bin文件夹
生成可执行文件,并且修改权限为可运行。
%mkdirbin %touchbin/hola %chmoda+xbin/hola
2.修改可执行文件内容
bin/hola
#!/usr/bin/envruby require'hola' putsHola.hi(ARGV[0])
测试下
%ruby-Ilib./bin/hola helloworld %ruby-Ilib./bin/holaspanish holamundo
3.最后修改gemspec
%head-4hola.gemspec Gem::Specification.newdo|s| s.name='hola' s.version='0.0.1' s.executables<<'hola'
其他就和上面一样了。很简单吧。