分享 初学者连载系列之二十:如何建立自己的 Rubygems

kevinhua · 2012年04月07日 · 3032 次阅读

系列文章原载于自己的博客,TOPI.CO (http://topi.co) ,某天不小心就 push 错啦,懒得从头再来,上传到 Ruby-China 来,一是方便自己回顾,另外也方便跟我一样的初学者

###简单的示例:

以创建 topico-0.0.1.gem 为例:

####建立文件夹

.
├── lib
│   └── topico.rb
└── topico.gemspec

注意:lib 目录下必须有个和你 gem 名字一样的 rb 文件。

####编写代码 lib\topico.rb

class Topico
  def self.hello
    puts "Hello, RubyGems!"
  end
end

####编辑 GemSpec 文件 topico.gemspec

Gem::Specification.new do |s|
  s.name        = 'topico'
  s.version     = '0.0.1'
  s.date        = '2012-03-11'
  s.summary     = 'Greeting from Topico'
  s.description = 'Topico shows a greeting to RubyGems'
  s.authors     = 'Author Name'
  s.email       = '[email protected]'
  s.files       = ["lib/topico.rb"]
  s.homepage    = 'http://rubygems.org/gems/topico'
end

这里仅列出了较为常见的属性。

####编译生成 gem

$ gem build topico.gemspec

系统会提示信息:

Successfully built RubyGem
Name: topico
Version: 0.0.1
File: topico-0.0.1.gem

编译后可以查看文件夹结构 tree

.
├── lib
│   └── topico.rb
├── topico-0.0.1.gem
└── topico.gemspec

注意新生成的topico-0.0.1.gem

####安装并测试 gem

安装 topico-0.0.1.gem

$ gem install ./topico-0.0.1.gem

系统会提示:

Successfully installed topico-0.0.1
1 gem installed
Installing ri documentation for topico-0.0.1...
Installing RDoc documentation for topico-0.0.1...

在 irb 中测试使用 irb

irb(main):001:0> require 'topico'
=> true
irb(main):002:0> Topico.hello
Hello, RubyGems!
=> nil

####发布到 RugyGems 网站

先设置 RubyGems 的用户名和密码:

$ curl -u username https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
Enter host password for user 'username':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0    56    0    56    0     0     25      0 --:--:--  0:00:02 --:--:--   144

设置成功后发布:

$ gem push topico-0.0.1.gem
Pushing gem to https://rubygems.org...
Successfully registered gem: topico (0.0.1)

发布成功,这样大家都可以使用你的 Rubygem 啦。

###稍微复杂一些的示例

下面看一下如何组织多个 ruby 文件。

####目录结构

.
├── lib
│   ├── ext
│   │   └── calculation.rb
│   └── topico.rb
└── topico.gemspec

####编写 GemSpec

s.files一行,修改:

s.files       = ["lib/topico.rb", "lib/ext/calculation.rb"]

重新 gem build 即可。

###如何在 Gem 中包含可执行该件

####在插件目录下,建立 bin 文件夹:

生成可执行该件,并且将权限修改为可运行。

$ mkdir bin
$ touch bin/greeting
$ chmod a+x bin/greeting

####修改可执行文件内容

#!/usr/bin/env ruby

require 'topico'
puts Topico.hello

####修改 GemSpec,添加一行s.executables

s.executables << 'greeting'

本文参考:如何创建自己的 Ruby Gem 包

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号