Gem [翻译] 实例演示如何创建 Ruby Gem

ashley · 2015年10月22日 · 最后由 ashley 回复于 2015年10月30日 · 3273 次阅读

最近抽空重新修改了前几天发出来的这篇翻译,有不准确的地方继续提出~~ 原文链接: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 格式的节目单和节目介绍。

建议直接贴代码。

贴代码,不要用图片

👍 不过有个别词有些生硬

第二行 source_root 指向我们的发电机模板将被放置。继续创建一个内发电机 DIR 文件夹模板

例如上面将“generator”翻译成发电机,个人感觉“生成器”可能更合适些。

#5 楼 @reyesyang ,英文水平有限,实在感谢!

收到很多很有用的意见,重新修改了一遍翻译,谢谢👌

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