创​建​自​己​的​r​u​b​y​语​言​g​e​m​包

开发环境:ubuntu 12.04;    Ruby 2.1.2

创建 gem 文件

richard@richard:~/gemtest$ bundle gem mygem
create mygem/Gemfile
create mygem/Rakefile
create mygem/LICENSE.txt
create mygem/README.md
create mygem/.gitignore
create mygem/mygem.gemspec
create mygem/lib/mygem.rb
create mygem/lib/mygem/version.rb
Initializing git repo in /home/richard/gemtest/mygem

 

结构如下:

richard@richard:~/gemtest/mygem$ tree
.
├── Gemfile
├── lib
│   ├── mygem
│   │   └── version.rb
│   └── mygem.rb
├── LICENSE.txt
├── mygem.gemspec
├── Rakefile
└── README.md
 
2 directories, 7 files

 

编码

打开 mygem.gemspec ,这个文件里面都是这个 gem 的一些说明。 找到

spec.summary = %q{TODO: Write a gem summary}
spec.description = %q{TODO: Write a gem description}

去掉其中的TODO,可先改为(任意写)

spec.summary = %q{"just for test"}
spec.description = %q{"just for test"}

lib是gem的工作目录,代码尽量都放到lib/目录下。 然后我们在mygem文件夹下建立gemtest.rb和mtest.rb文件。 gemtest.rb内容如下:声明了一个类和方法

class Gemtest
  def initialize(name,address)
    @name=name
    @address=address
  end

  def speak
    puts "#{@name} speak me: I am address #{@address}."
  end
end

mtest.rb内容如下: 声明了一个模块和方法

module Mtest
  def speak
    puts "module test"
  end
end

lib的根目录下有一个mygem.rb文件,这个文件用来引入你在lib/mygem文件夹下建的所有rb文件。 mygem.rb 文件的内容为

require "mygem/version"

require 'mygem/gemtest'

require 'mygem/mtest' 

打开 mygem.gemspec ,找到

spec.files = `git ls-files -z`.split("\x0")

把新加的文件添加进去,不然会找不到文件,在调用gem的时候报错

方法一,把所有要用的文件加入这个数组

spec.files = ["lib/mygem.rb","lib/mygem/gemtest.rb","lib/mygem/mtest.rb","lib/mygem/version.rb"]

方法二,不改动gemspec文件中的配置,把新增的文件添加到git 中:

richard@richard:~/gemtest/mygem$ git add lib

虽然add之后没有commit,也不知道文件添加到什么地放,但是经过测试,是可以识别到文件的。

richard@richard:~/gemtest/mygem$ git ls-files
.gitignore
Gemfile
LICENSE.txt
README.md
Rakefile
lib/mygem.rb
lib/mygem/gemtest.rb
lib/mygem/mtest.rb
lib/mygem/version.rb
mygem.gemspec
richard@richard:~/gemtest/mygem$ 

打包 gem 文件

mygem/version.rb文件是描述当前版本的。如过升级了你的gem,打包之前,确认版本号是否需要变动。

在项目根目录下,即mygem目录下运行命令:

richard@richard:~/gemtest/mygem$ rake build 
mygem 0.0.1 built to pkg/mygem-0.0.1.gem.

会在pkg文件夹下生产gem安装包mygem-0.0.1.gem. 或者使用 gem build mygem.gemspec 会直接在跟目录里生成 mygem-0.0.1.gem.

安装gem 包

安装到本地 加上 --local 运行命令:

richard@richard:~/gemtest/mygem$ gem install pkg/mygem-0.0.1.gem --local
Successfully installed mygem-0.0.1
Parsing documentation for mygem-0.0.1
Done installing documentation for mygem after 0 seconds
1 gem installed

测试是否成功

richard@richard:~/gemtest/mygem$ irb
2.1.2 :001 > require 'mygem'  
 => true 
2.1.2 :002 > a=Gemtest.new("aa","bb")
 => #<Gemtest:0x0000000224ec10 @name="aa", @address="bb"> 
2.1.2 :003 > a.speak
aa speak me: I am address bb.
 => nil 
2.1.2 :004 > include Mtest
 => Object 
2.1.2 :005 > speak
module test
 => nil 
2.1.2 :006 > quit

ok成功

posted on 2014-07-01 09:47  许利强  阅读(337)  评论(0编辑  收藏  举报

导航