原文链接:http://www.victorareba.com/tutorials/create-ruby-gem-by-example
毫无疑问,包管理器在rails应用软件的开发上扮演着至关重要的角色。关于这点,我们只要想一想Device,ActiveAdmin和其他的Ruby Gem包就可以知道。然而,虽然我们每天都在使用它们,但是很少有开发人员去创建他们自己的Gems。这可能是因为在某些实际的创建过程中缺乏清晰的文档,但是从某些方面说,一个RoR的开发人员可能已经至少有一次修改过或者创建过一个gem来完成他的工作任务。今天,我会带你一起创建一个范例Gem包。这是一个基于The TVDB来封装的API Gem包。你可以在这里查看Gem TheTVDB的源代码。
开始
我们会使用bundler这个非常流行的管理项目依赖性的工具。安装命令如下:
$ gem install bundler
bundler安装完成后,我们将创建一个gem,就叫它thetvdb吧:
$ bundle gem thetvdb
然后进入这个gem目录
$ cd thetvdb
列出gem文件夹中的文件和文件夹,你会见到如下内容:
Gemspec
现在让我们来看看有趣的gemspec文件,在我的这个例子中的文件名是thetvdb.gemspec,它定义了gem的配置。我将会加入关于thetvdb gem的元数据。

版本控制
gem的版本信息会保留在lib目录里以gem名称命名的目录下的version.rb脚本里(在我们的例子里是lib/thetvdb/version.rb)。版本号是由3个用点号分隔的数字字符串组成,格式为“X.X.X”
功能性
现在我们介绍到gem的功能性。首先,现在我将要继续添加两个从属物,那就是我们将要利用其余的i.e客户端和引入nokogiri到Gemfile。

然后运行bundler
$ bundle install
在lib/thetvdb.rb的文件里调用这两个依赖包。注意,我们需要指定gem版本。
接下来我会在/lib/thetvdb目录下创建client.rb文件。这个文件会包装API的查询。最后,如下完成剩余的代码。
get_show方法返回节目单以及详细介绍
注意ruby常数API_KEY,我把它作为一个口令牌来解析。在这个时候我们还没有声明这个常数。我们需要用户在安装gem的时候生成一个 initizlier文件,然后添加他们自己的TVDB api密钥。完成这个步骤后,我们需要在lib/目录下创建一个名为generators的目录,然后在这个目录里创建 thetvdb_genrator.rb的文件。添加如下代码。
第二行source_root指向我们存放的generator模板的地方。在generators目录下创建templates目录,并在这个目录下创建一个thetvdb.rb文件,代码如下。
最后,包含client.rb在我们的/lib/theevdb.rb这个主文件里,并添加如下代码。
构建
我们使用这个命令来构建gem
$ gem build thetvdb.gemspec
完成构建之后我们就可以推到ruby gems网站了
或者如果你想现在本地单机测试一下,你可以安装这个gem
$ gem install thetvdb-ruby-0.1.0.gem
测试
测试如果我们的gem是正常运作,那就创建一个rail应用软件,然后添加这个gem到Gemfile
然后运行bundler
$ bundle install
为TVDb API创建初始化文件
$ rails generate thetvdb
将你的API密钥放在初始化的thetvdb.rb文件里。如果你还没有API密钥,可以使用我这个。
在某些controller的action中,我通过调用Thetvdb的get_show方法搜索我最喜爱的电视节目“极速前进”。
在载入本地服务时,我收到了JSON格式的节目单和节目介绍。


