$ bundle gem a
create a/Gemfile
create a/Rakefile
create a/.gitignore
create a/a.gemspec
create a/lib/a.rb
create a/lib/a/version.rb
Initializating git repo in /Users/camel/a
打开 a.gemspec
,这个文件里面都是这个 gem 的一些说明。
找到
s.summary = %q{TODO: Write a gem summary}
s.description = %q{TODO: Write a gem description}
去掉其中的 TODO,可先改为 (任意写)
s.summary = %q{"just for test"}
s.description = %q{"just for test"}
lib 是 gem 的工作目录,代码尽量都放到 lib/目录下。
编写a.rb
require "new_gem/version"
module A
class B
def self.say(what)
puts what
end
end
end
然后提交到版本库
git@git-virtual-machine:~/a$ git add .
git@git-virtual-machine:~/a$ git commit -am 'commit'
提交成功后生成 gem 包
git@git-virtual-machine:~/a$ gem build a.gemspec
WARNING: no homepage specified
WARNING: description and summary are identical
Successfully built RubyGem
Name: a
Version: 0.0.1
File: a-0.0.1.gem
把 gem 包安装到本地
git@git-virtual-machine:~/a$sudo gem install a-0.0.1.gem -l
测试是否成功
git@git-virtual-machine:~/a$ irb
irb(main):001:0> require 'a'
=> true
irb(main):002:0> A::B.say('hello')
hello
=> nil
irb(main):003:0>quit
如果跟随视频安装报的错误信息是
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /usr/local/lib/ruby/gems/1.9.1 directory.
要用sudo
命令安装
git@git-virtual-machine:~/a$sudo gem install a-0.0.1.gem -l
以上说明创建 gem 已经成功,接下来给 gem 创建另一个功能,即:在控制台调用方法输出
在bin
目录下创建一个say
的普通文件:
require 'a'
A::B.say(ARGV[0])
git@git-virtual-machine:~/a$ git add .
git@git-virtual-machine:~/a$ git commit -am 'create a file'
git@git-virtual-machine:~/a$ gem build a.gemspec
进入 version.rb 修改 gem 版本
module A
VERSION = "0.0.2"
end
接下来再次创建和安装新版本的 gem
git@git-virtual-machine:~/a$ gem build a.gemspec
git@git-virtual-machine:~/a$ sudo install a-0.0.2.gem -l
测试是否成功:
git@git-virtual-machine:~/a$ irb
irb(main):001:0> require 'a'
=> true
成功以后可以再控制台随意输出了
git@git-virtual-machine:~/a$ say hello
hello
git@git-virtual-machine:~/a$ say hehe
hehe
当然你可以把他 push 到 github 上
要创建一个基于 Rails 3.1 的 engine,你需要运行 plugin 创建器并且传递 --full 和 --mountable 给它。要创建初始的“blorgh”engine 你将需要在终端中运行如下命令:
$ rails plugin new blorgh --full --mountable