第一次造轮子。
写在前面
用了很多前辈们造的轮子,没准你也想自己造个轮子,用实际行动来为open source添砖加瓦。
即便刚开始做出来的不甚理想,甚至是破砖破瓦,不过能自己做一个gem,这本身就是一件很cool的事了:P
那么一个简单的gem包括哪些文件呢?基本的框架是怎样的?如何快速创建一个gem?
创建
准备工作:命名
借用Phil Karlton的话:There are only two hard things in Computer Science: cache invalidation and naming things.
So first of all, naming your gem. 记得去rubygems搜索下,确保你的gem名唯一。
好,开始正式创建你的gem。
如果你认真去看guides rubygems, 会发现步骤其实还挺多,这里我们直接抄近道。
一个gem的基本pattern长这样:【该gem名为ice_bear,呃,谁会不喜欢ice bear?】
以下以ice_bear gem的创建为例,四步走:
创建gem
终端运行:
bundle gem ice_bear
如果是第一次创建gem,会问你要不要生成test文件(rspec/minitest),是否想要添加license等,根据需要回复即可。
这里选择rspec,会生成如下文件:
如果是第一次生成gem,是没有README.md的,需要自己手动添加。
放到GitHub上,open source
默认添加了version control,所以cd 到ice_bear 目录后,不需要git init.
终端运行:
cd ice_bear git add . git commit -m "my first gem ice_bear" git remote add origin https://github.com/XXX/ice_bear git push -u origin master
修改文件:
ice_bear_gemspec
:三处需要修改:spec.summary,spec.description,spec.homepage
其中在spec.homepage 列添加你的public repo URL, 也就是你push到GitHub的repos 地址:
Gem::Specification.new do |spec| ...... spec.summary = 'ice bear would have been less charming' spec.description = <<-TEXT Ice Bear is the youngest of the trio but is undoubtedly the strongest and, in some respects, the most mature. TEXT spec.homepage = "https://github.com/xxxx/ice_bear" ...... end
这里description部分太长,故用
<<-TEXT TEXT
【类似heredoc】包起来了。最近进度push到GitHub:
git commit -am "update ice_bear_gemspec" git push
运行测试文件,确保正常
本地运行
bundle exec rspec
,得到如下结果:IceBear has a version number does something useful (FAILED - 1) Failures: 1) IceBear does something useful Failure/Error: expect(false).to eq(true) expected: true got: false (compared using ==) # ./spec/ice_bear_spec.rb:7:in `block (2 levels) in <top (required)>' Finished in 0.08058 seconds (files took 0.55356 seconds to load) 2 examples, 1 failure Failed examples: rspec ./spec/ice_bear_spec.rb:6 # IceBear does something useful
查看测试文件:
ice_bear_spec.rb
:RSpec.describe IceBear do it "has a version number" do expect(IceBear::VERSION).not_to be nil end it "does something useful" do expect(false).to eq(true) end end
与预期相同,OK!gem 搭建成功,下一步,make your gem useful :P
关于发布
gem 完成后,确保你有RubyGems.org的账号,终端运行:
gem push ice_bear_0.1.0.gem
其中0.1.0是你gem的版本号,输入账号和密码即可。当然你也可以修改一些其他设置,比如set up a private gem server,具体参见publishing your gem。