ruby創建你的第一個Gem

原文作者:John McAliley,原文地址,翻譯:Pilipala

引用自:http://heikezhi.com/2011/11/15/創建你的第一個gem/

你在Ruby世界看到到處都是Gem。他們幾乎是所有的Ruby應用程序的核心。我承認當我試着建立第一個Gem的時候,我有點戰戰兢兢。但我很快 就發現了,這玩意簡單得要死。在這個博客系列中,我將涵蓋從頭開始創建一個Gem的基礎,然後轉移到更高級的主題,包括Gem生成工具和Rails引擎。 首先,對於你們這些Ruby有新手,第一個問題是:什麼是Gem?簡而言之,它是打包的Ruby代碼。在最低限度,Gem包括一個Ruby文件和一個 gemspec。gemspec(Gem規範)描述Gem信息,RubyGems包管理器需要這些信息安裝Gem。

RubyGems包管理器可以下載,並安裝Gem到你的系統,並允許你在其他Ruby程序中使用這些Gem。Ruby 1.9默認安裝RubyGems。如果你使用的是Ruby 1.9之前的版本,你可以在這裏下載RubyGems。在Ruby 1.9之前版本的應用程序中使用RubyGems,你需要在你的應用程序,加入這一行 :

require 'rubygems'

Ruby 1.9中不需要這麼做,因爲RubyGems已經被包含在Ruby 1.9中。

Gem規範(Gem Specification)

正如我在前面提到,Gem的規範描述了Gem。讓我們看看一個基本的gemspec文件:

  1. Gem::Specification.new do |s|  
  2.   s.name = %q{my_gem}  
  3.   s.version = "0.0.1"  
  4.   s.date = %q{2011-09-29}  
  5.   s.summary = %q{my_gem is an awesome gem}  
  6.   s.files = [  
  7.     "Gemfile",  
  8.     "Rakefile",  
  9.     "VERSION",  
  10.     "lib/my_gem.rb"  
  11.   ]  
  12.   s.require_paths = ["lib"]  
  13. end  

gemspec是一個相當簡單的文件,描述你的Gem的各個方面。在上面的例子gemspec中的文件中,我只列出必需的屬性。
前4個屬性是不言自明。“文件”屬性中列出包括在Gem中的所有文件。
“require_paths”屬性指定的目錄,其中包含Ruby文件應該被這個Gem所加載。gemspec所用到的完整屬性列表,請參考這裏

這是一些簡單的基礎知識,現在讓我們切入正題,尋找更有趣的東西。

從頭開始創建一個Gem

1、建立Gem的基本文件結構:

輸入shell指令,並創建Gem需要的目錄:

$ mkdir awesome_gem
$ cd awesome_gem
$ mkdir lib

就這樣!你需要爲你的Gem和一個lib目錄來存放你的Ruby文件的根目錄。

2、創建的gemspec

我們將使用上一節gemspec文件作爲模板。創建一個名爲“awesome_gem.gemspec”在你的Gem的根目錄中。然後添加一些代碼,以成爲一個有效的gemspec:

  1. Gem::Specification.new do |s|  
  2.   s.name = %q{awesome_gem}  
  3.   s.version = "0.0.0"  
  4.   s.date = %q{2011-09-29}  
  5.   s.summary = %q{awesome_gem is the best}  
  6.   s.files = [  
  7.     "lib/awesome_gem.rb"  
  8.   ]  
  9.   s.require_paths = ["lib"]  
  10. end  

這個文件包含了一個gemspec標準所需的屬性,並且顯示我們有一個“lib”目錄。在lib目錄中的文件“awesome_gem.rb”將被用來保存這個Gem的Ruby代碼。

3、添加一些代碼

爲了簡單起見,我們將只用一個Ruby文件在這個Gem裏:/lib/awesome_gem.rb,你會看到這種結構類型在大多數你遇到的Gem 中。 “lib”內的根文件通常會與Gem的名稱相匹配。本例中,“awesome_gem”和“/lib/awesome_gem.rb” 。

繼續創建這個文件,添加下面的代碼:

  1. module AwesomeGem  
  2.   class WhoIs  
  3.     def self.awesome?  
  4.       puts "YOU ARE AWESOME!!"  
  5.     end  
  6.   end  
  7. end  

這雖然不是什麼改變世界的代碼,至少, awesome? 方法讓你感覺不錯。這個Gem將允許你在其他Ruby程序裏面使用 WhoIs 的類方法awesome?。

正如我在第一部分中提到,RubyGems的將安裝Gem在你的應用程序中,並使用Gem中的類。

4、生成的Gem文件

現在,你有一些很棒的代碼,你將要創建一個Gem,所以你可以在另一個Ruby程序用這些代碼。RubyGems提供命令,讓你創建一個Gem。輸入下面命令在Gem的根目錄:

$ gem build awesome_gem.gemspec

此命令將建立Gem和輸出Gem文件,將包括版本號在文件名中。由於gemspec中版本屬性的值是“0.0.0”,Gem的文件將被命名爲awesome_gem-0.0.0。
你應該看到下面的輸出和對一些缺少的屬性警告:

Successfully built RubyGem
Name: awesome_gem
Version: 0.0.0
File: awesome_gem-0.0.0.gem

你可以忽略這些警告,繼續在系統上安裝這個Gem。請注意,Gem文件被創建在當前目錄中。

5、安裝Gem

現在,你有一個Gem文件,你可以使用RubyGems安裝這個Gem到你的計算機上。通常情況下,你安裝的Gem來源於外部,但不限於此。如果你 有機會得到Gem文件,你可以通過指定Gem文件的位置將其安裝在本地。下面的命令在本地安裝awesome_gem.gem:

gem install awesome_gem.gemspec

你應該得到以下輸出:

Successfully installed awesome_gem-0.0.0
1 gem installed
Installing ri documentation for awesome_gem-0.0.0...
Installing RDoc documentation for awesome_gem-0.0.0...

耶!你剛創建了Gem!這個Gem現在已經安裝在你的系統,並準備在另一個Ruby程序中使用。

6、Gem的另一個Ruby程序

創建一個新的Ruby文件將用來測試我們的Gem。讓我們叫它“be_awesome.rb”。你可以在你的系統中的任何位置創建此文件,然後添加 下面的代碼,所以我們可以使用Gem中的“awesom?”類方法。用 require “awesome_gem”,RubyGems將能夠找到Gem,把這個類提供給你的程序。然後你只需要調用它。以下是代碼:

  1. require 'awesome_gem'  
  2. AwesomeGem::WhoIs.awesome?  

現在你可以運行Ruby程序和測試你新創建的Gem,看看你是如何awesome的。通過命令行輸入:

ruby be_awesome.rb

你應該看到在你的shell下面的輸出:

YOUR ARE AWESOME!

恭喜你,你只要在程序中使用你的新的Gem!雖然它還不值得放在GitHub上,跟朋友吹噓,但是, 你還是學會了如何從頭開始創建一個Gem,並在另一個程序中使用它。現在,你可以繼續前進,追求更大的進步。

結論

雖然本教程是相當簡單,只涉及創建一個基本的Gem,我認爲它對新的Gem開發者仍然很重要。

基礎知識給你一個進入高級的主題良好基礎。平時,我用Jeweler去創造Gem,這的確是一個功能強大的工具, 但我覺得手工從頭創建一個Gem之前就用這樣的生成工具,可能是有害的。

你需要了解如何構建一個Gem的最簡單的形式,纔可以理解像Jeweler這樣的生成工具的背後是什麼。雖然我建議在你第一次學習Gem開發時,手工從頭創建一個Gem。但是,當你理解了基礎知識,就沒什麼理由拒絕使用生成器了。

生成器可以節省很多時間,因爲他們給你一個很好的起始架構。本系列的下一個博客後,將有關Gem的開發,以及更高級的主題,諸如:如何使用生成工具來開始你的Gem開發。以後的文章將解釋如何開發Ruby on Rails的Gem。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章