构建一个 Ruby Gem 第一章 简介

在我们开始之前先做一下后勤工作……这本书假定你可以舒服的编写 Ruby 代码。如果不是这种情况,不用担心……有很多书和代码可以帮助你。你只要知道,这里有一些主题会深入一些更复杂的话题比如 Ruby 加载模式和命名空间。

就我个人而言,通过例子学习是最好的学习方式。我发现的最有价值的书和文章都会在涉及到一个话题后立刻展示真正的代码。我会在适当的情况下也这样做。我也会不留余力的从流行的 Ruby gems 中对比和高亮代码只要这是有意义的。我所希望的是这些 gems 可以给你提供些灵感并且最后展示给你看如何让你的想法可以被转化成可以工作的 Ruby gems。

让我们以这种方式开始吧……

什么是一个 gem?

一个 Ruby gem 是一个可以复用的打包好的 Ruby 应用程序或者类库,它专注于特定的功能。Ruby gems 可以做很多事情比如和 Twitter 交互构建 web 应用程序,或者管理后台任务,等等。

Rubygems.org 是一个被社区认可的 Ruby gems 的托管站点。如果你用 Rails 工作过,你很可能用过 bundle install 命令来安装在一个 Gemfile 列表中 gems。在大多数情况下,它们是从 Rubygems.org 被下载和安装的。

对于 Ruby 来说很幸运的是,它的开源社区是强而广泛的。对于一个普通的应用需要的一个小功能很少会不能找到已有的 gem 去引用。然而,不要因为这种情况阻碍了你构建下一个伟大的 gem。

为什么构建一个 gem?

拿 Twitter 来举例……如果我们写了 3 个不同的应用都需要发一条推文作为一个用户行为的结果,把那些发送推文的代码写在 3 个不同的地方是很操蛋的。即使只写一次然后复制/粘贴到每个应用中也是很容易出错的。提取这些代码到一个新的 gem 是一件一劳永逸的事情。用这种方法,我们的应用会得到同一组方法和功能。但是不要担心,这个 Twitter 的 gem 已经被写好了,所以我们又少做了一件事!

一种更加复杂的情况牵涉到把一个庞大的应用拆分为微服务(由更小的致力于特定的功能的应用组成)。我们可以考虑这样做如果我们的应用程序变得庞大并且独立的组件开始变得越来越复杂。服务的基本原则和管理超出了本书的范围,但是我想说,还有一些其他理由让我们从我们的应用程序中提取代码到 gems 中。

我写了关于在我的应用中最流行的 ruby gems,再次看看这个列表, 我从这些 gems 的中得到的好处是巨大的。这是为什么使用 rails 构建 web 应用能让你快速迭代一个原因。

根据 Rubygems.org 的数据, 从 2009年7月开始已经有 66,783个 gems 被创建了,一共被下载了几乎 24 亿次。有大量的下载和大量的 gems!开源世界是对于 Ruby gems 和你的 ruby 应用程序都是一个很好的地方。花一些时间来简化你的应用并且让其他人能从你的的代码中获益,通过创建一个开源的 Ruby gem。

公开或私有?


我们将要构建的 Ruby gem (作为本书的一部分) 是开源的。然而,正如上面提到的,有些情况下把一个大的应用拆分成小的 gems 是一个好主意,在这种情况下,把这些小的 gem 作为你组织的私有 gem 是完全合理的。Github 使得创建私有代码仓库很简单所以你的代码是被保护的。

(好的)例子是很难的

很难去创建一个不无聊并且有价值的例子。那我们该创建什么呢?!?!

这本书的第一个部分将会专注于一个简单的 Ruby gem,它不会比决定文件结构和加载依赖更有趣。虽然这不会是你见过的最复杂的 ruby 代码,但我希望这个例子会足够用来展示从开始到完成一个 Ruby gem 的构建的必备步骤。

MegaLotto

我们会从一个创建随机彩票号码的叫做 MegaLotto 的 gem 开始。

MegaLotto 有两个特性:

  1. 它返回了一个包含 5 个 integer 的数组
  2. 数组的每个元素必须是一个 0 到 60 之间的随机数(不包含 0 和 60 )

这里是两个符合要求的例子:

[23, 22, 3, 7, 16]
[13, 20, 26, 1, 9]

接下来的章节的重点将会是我们构建一个 Ruby gem 的结构和步骤,和有少量 gem 自己的功能。

总结

希望我们现在构建一个 Ruby gem 的原因和我们这样做能得到的好处是很清楚的。

Stephan Hagemann 在 MountainWest RubyConf 的一个演讲叫做 Component-based Architectures in Ruby and Rails。这是我所见过的最好的关于在你已有的应用中提取类库的演讲。Stephan 的演讲从为什么你应该要从一个 Rails 应用程序中提取代码到你这样做会需要的特定方法和步骤都有涉及。我强烈建议你观看这个视频如果你从事大型 Rails 应用的开发。

如果和我一样,你大概已经在想了,『好了,快让我们看看代码!』。你是对的……下一章将会讨论一个 gem 的结构然后我们会开始我们的杰作 —— MegaLotto!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,565评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,021评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,003评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,015评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,020评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,856评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,178评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,824评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,264评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,788评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,913评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,535评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,130评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,102评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,334评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,298评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,622评论 2 343

推荐阅读更多精彩内容