目录:
1.简介
2.你的第一个gem
3.载入跟多的文件
4.加入可执行文件(二进制文件)
5.测试,测试,测试
6.文档化你的code
7.总结
一、简介
由于有了rubygem这个工具,创建和发布自己的gem非常简单。下面介绍怎样制作一个hello world的gem,该gem的地址是https://github.com/qrush/hola
二、你的第一个gem
hola这个gem只有一个ruby文件盒一个hola.
gemspec文件。如果你要发布,你必须起一个特别一点的名字,例如hola_flowerwrong。gem的命名规范请查看http://guides.rubygems.org/patterns/#consistent-naming ├── hola.gemspec └── lib └── hola.rb
你的gem的核心代码必须放在lib目录下。约定(convention)是只有一个和该gem名字相同的ruby文件。因为当require 'hola'运行时,他就会被加载。该文件负责设置你的代码和api。
该实例的hola.rb代码非常简单。
class Hola def self.hi puts "Hello world!" end end
gemspec文件定义了该gem的功能,谁创造了该gem,版本信息等等。他也是http://rubygems.org/的接口。
Gem::Specification.new do |s| s.name = 'hola' s.version = '0.0.0' s.date = '2010-04-28' s.summary = "Hola!" s.description = "A simple hello world gem" s.authors = ["Nick Quaranto"] s.email = 'nick@quaran.to' s.files = ["lib/hola.rb"] s.homepage = 'http://rubygems.org/gems/hola' s.license = 'MIT' end
该gem的描述或许会很长,如果它匹配 /^== [A-Z]/
,它就会在http://rubygems.org/上以rdoc解析来显示。注意:其他的不会被rdoc解析。
看起来很熟悉,对吗?它也是ruby文件,所以你可以用脚本(wrap scripts)来自动生成name和version等成员。它可以包含许多成员信息。想了解更多,从http://guides.rubygems.org/specification-reference查看。
创建gemspec后,你就可以用他来构建你的gem了。然后你就可以本地安装以便测试。
% gem build hola.gemspec Successfully built RubyGem Name: hola Version: 0.0.0 File: hola-0.0.0.gem % gem install ./hola-0.0.0.gem Successfully installed hola-0.0.0 1 gem installed
当然,冒烟测试(smoke test)还没完,最后一步是require这个gem并使用它。
% irb
>> require 'hola'
=> true
>> Hola.hi
Hello world!
如果你使用1.9.2之前版本的ruby,那么你需要使用irb -rubygems命令先加载rubygem。
现在你可以分享你的gem到ruby社区了。发布gem到RubyGems.org只需要一个命令,当然你得先有一个RubyGems.org的账户。设置你得RubyGems.org账户在你得计算机上:
$ curl -u qrush https://rubygems.org/api/v1/api_key.yaml >
~/.gem/credentials; chmod 0600 ~/.gem/credentials
Enter host password for user 'qrush':
如果curl, OpenSSL, or certificates有问题,你也可以复制地址到浏览器,然后浏览器也会要求你登陆。登陆后会下载api_key.yaml文件,保存到 ~/.gem 并取名叫做 ‘credentials’ 。
设置完毕之后,你就可以发布你的gem了。
% gem push hola-0.0.0.gem
Pushing gem to RubyGems.org...
Successfully registered gem: hola (0.0.0)
半杯咖啡后(通常用不到一分钟),任何人(地球)都可以安装使用你的gem了。你可以在https://rubygems.org/gems/hola看到他,也可以抓取。
% gem list -r hola
*** REMOTE GEMS ***
hola (0.0.0)
% gem install hola
Successfully installed hola-0.0.0
1 gem installed
分享你得代码到rubygems.org就是这么简单。
三、载入跟多的文件
通常来说,一个文件的规模通常是不够的。那我们就来加入跟多的文件吧。
% cat lib/hola.rb class Hola def self.hi(language = "english") translator = Translator.new(language) translator.hi end end class Hola::Translator def initialize(language) @language = language end def hi case @language when "spanish" "hola mundo" else "hello world" end end end
这个文件看上去有些乱(真的?为了配合下文)。那我们把Translator单独拿出来放到文件里面。
如前所述(As mentioned before),gem的root文件负责管理加载其他文件的代码。其他的gem文件通常放在/lib/gemname/下面。就像这样:
% tree
.
├── hola.gemspec
└── lib
├── hola
│ └── translator.rb
└── hola.rb
Translator类现在在
lib/hola下,我们可以使用require来加载它,translator.rb如下:
% cat lib/hola/translator.rb class Translator def initialize(language) @language = language end def hi case @language when "spanish" "hola mundo" else "hello world" end end end
下面在hola.rb里面加载它:
% cat lib/hola.rb class Hola def self.hi(language = "english") translator = Translator.new(language) translator.hi end end require 'hola/translator'
明白了吗(Gotcha):创建文件或者文件夹后,别忘了在hola.gemspec里面注册。如果不注册,将无法使用。
% cat hola.gemspec
Gem::Specification.new do |s|
...
s.files = ["lib/hola.rb", "lib/hola/translator.rb"]
...
end
让我们在来试试,打开irb
% irb -Ilib -rhola
irb(main):001:0> Hola.hi("english")
=> "hello world"
irb(main):002:0> Hola.hi("spanish")
=> "hola mundo"
这里我们使用了陌生的命令-Ilib,rubygem通常会include lib,所以gem使用者无需担心gem的加载问题。然而,如果你在rubygem外使用这个库,那么你不得不自行配置。
操作$LOAD_PATH来配置是可行的,但他同时也是一种反面模式(
anti-pattern),想了解更多好的做法和反面模式,可以查看http://guides.rubygems.org/patterns
如果你新添加了文件,记得在gemspec注册。许多开发者会使用Hoe, Jeweler, Rake, Bundler, 或者 just a dynamic gemspec 自动完成。
添加跟多的目录和代码的过程和上面是一样的。分割你的ruby文件使他有意义。合理组织你的代码会为你以后的维护工作带来很大的便利,不会用头疼药了。
四、加入可执行文件
为了扩展你的ruby代码,gem也允许加入可执行文件到你的shell's PATH. 最著名的莫过于rake了。另一个常用的就是prettify_json.rb,包含在http://rubygems.org/gems/json这个gem里面。它格式化json为可读模式(ruby1.9自带)。
例子:
% curl -s http://jsonip.com/ | \
prettify_json.rb
{
"ip": "24.60.248.134"
}
添加一个可执行文件到gem非常简单。你只需要把他们放在gem的bin目录下,然后添加到gemspec的可执行数组中即可。我们来添加一个可执行文件到 hola gem里面。先创建文件夹bin,使他可执行。
% mkdir bin
% touch bin/hola
% chmod a+x bin/hola
===================================20140728下午16:30============================
可执行文件需要http://www.catb.org/jargon/html/S/shebang.html来确定用什么程序来执行他。形如:
% cat bin/hola
#!/usr/bin/env ruby
require 'hola'
puts Hola.hi(ARGV[0])
它所做的就是加载这个gem,用第一行的程序去执行。例如:
% ruby -Ilib ./bin/hola
hello world
% ruby -Ilib ./bin/hola spanish
hola mundo
最后,为了在你使用gem是包含这个可执行文件,你需要在gemspec注册他。
% head -4 hola.gemspec Gem::Specification.new do |s| s.name = 'hola' s.version = '0.0.1' s.executables << 'hola'
上传这个gem,你的命令行工具就发布了。如果你需要,可以同时加多个可执行文件到bin目录,在gemspec中有一个executables
数组。
注意:当你更新后,你需要修改gem的version,有关gem version更多的信息请看http://guides.rubygems.org/patterns/#semantic-versioning
五、测试
编写你gem的测试非常重要。他不仅确定了你的代码正常工作,而且告诉了其他人你的代码做了什么工作。评估一个gem,ruby开发者就是通过查看测试代码的可靠度。
gem支持添加测试文件,所以gem下载后可以执行测试代码。一个完整的社区http://test.rubygems.org/正在兴起,帮助完成gem的测试在不同框架和编译器的运行文档。
In short: TEST YOUR GEM! Please!
Test::Unit是ruby内建的测试框架。https://github.com/seattlerb/minitest/blob/master/README.txt有许多在线教程。也有其他的测试框架可供使用,RSpec是最后的选择。不管你用什么,just TEST.
我们来为hola添加测试。需要添加一个Rakefile和一个test目录。
% tree
.
├── Rakefile
├── bin
│ └── hola
├── hola.gemspec
├── lib
│ ├── hola
│ │ └── translator.rb
│ └── hola.rb
└── test
└── test_hola.rb
Rakefile只是给一些自动化测试。
% cat Rakefile require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' end desc "Run tests" task :default => :test
现在你可以运行rake test或者rake来执行测试。
来看看hola基本的测试代码:
% cat test/test_hola.rb require 'test/unit' require 'hola' class HolaTest < Test::Unit::TestCase def test_english_hello assert_equal "hello world", Hola.hi("english") end def test_any_hello assert_equal "hello world", Hola.hi("ruby") end def test_spanish_hello assert_equal "hola mundo", Hola.hi("spanish") end end
最后,跑测试:
% rake test
(in /Users/qrush/Dev/ruby/hola)
Loaded suite
Started
...
Finished in 0.000736 seconds.
3 tests, 3 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 15331
green,太好了,记住,他依赖于你的shell的color配置。
更多信息请查看https://github.com/languages/Ruby
六、编写文档
大多是gem默认使用RDoc来生成文档。http://docs.seattlerb.org/rdoc/RDoc/Markup.html有许多教程。例子如下:
# The main Hola driver class Hola # Say hi to the world! # # Example: # >> Hola.hi("spanish") # => hola mundo # # Arguments: # language: (String) def self.hi(language = "english") translator = Translator.new(language) puts translator.hi end end
两一个选择就是YARD(http://yardoc.org/),当你上传一个gem后,http://rubydoc.info/自动为你生成YARDocs文档,YARD与RDoc兼容,http://rubydoc.info/docs/yard/file/docs/GettingStarted.md介绍了怎样使用他们。
七、总结
通过这个简单的第一个gem教程,你已经入门了。
相关推荐
gemstash, 一个 RubyGems.org 缓存和 private gem 服务器 什么是 Gemstash?Gemstash是远程服务器( 如 https://rubygems.org ) 和 private gem 源的缓存。在你的控制范围内,如果你使用的是多个可以访问服务器的...
A package (also known as a library) contains a set of functionality that can be invoked by a Ruby program, such as reading and parsing an XML ... See our guide on publishing a Gem at guides.rubygems.org
RubyGems.org(néeGemcutter) Ruby社区的gem主机。 目的 提供更好的API处理宝石 创建更透明,更易于访问的项目页面 使社区能够改善和增强网站 支持 由管理, 是一个社区资助的组织,通过门票和赞助为和的会议...
标题“2.4-3.0.rubygems.rar”暗示了这个压缩包可能包含了Ruby Gems从版本2.4到3.0之间的升级或集合,这对于Ruby开发者来说是一个重要的资源,因为版本升级通常会带来性能优化、新功能以及对旧问题的修复。...
创建一个新的Web UI,以使用带有框架导轨的gem 使用包含供选择的gem和搜索器的列表制作主页视图 开发功能并提出提出采用的观点 开发功能,并为采用gem做好准备 开发身份验证视图 与rubygems.org A
例如,如果您正在https://rubygems.org/gems/simplecov上查看诸如simplecov之类的gem,它将从Ruby Toolbox中获取信息,它是“一个仍在接受更新的长期项目”。 其他gem将基于Ruby Toolbox收集的指标显示其他信息。
Download from: rubygems.org/pages/download Unpack into a directory and cd there Install with: ruby setup.rb # you may need admin/root privilege For more details and other options, see: ruby setup....
帮助管理和支持 RubyGems.org 的快速命令。 目前帮助通过 SSH 连接到 RubyGems.org 基础设施和运行命令。 安装 $ cd $ git clone git://github.com/rubygems/meg.git .meg 对于 bash 用户: $ echo 'eval "$($...
RubyGems.org(姓氏 Gemcutter) Ruby 社区的 Gem 托管。目的提供更好的 API 来处理 gems 创建更透明和可访问的项目页面使社区能够改进和增强站点链接 :#rubygems 在 Freenode 上: : :贡献请遵循我们的。 要进行...
1. **包管理**:RubyGems允许开发者打包他们的代码为gem,这是一种可重用和可分发的代码模块。这使得安装、升级和卸载库变得简单,只需一条命令即可。 2. **依赖管理**:每个gem都可以声明它依赖的其他gem,...
rubygems-update-1.3.1.gem
1. **启动节点**:在每台服务器上启动一个Redis实例,指定不同的端口和配置文件。 2. **初始化集群**:选择其中的一个节点作为“引导节点”(bootstrap node),使用`redis-trib.rb create`命令创建集群,指定所有...
rubygems-update-1.3.7.gem
在给定的资源中,我们涉及到了三个主要的IT组件:Ruby编程语言、RubyGems包管理器以及Redis键值存储系统。以下是关于这些技术的详细知识点: 1. **Ruby 2.2.4**: Ruby是一种面向对象的、动态类型的编程语言,以其...
在“rubygems-1.8.7.gz”中,"1.8.7"是该版本的编号,这表示它是RubyGems的第1.8.7次更新。每个版本通常会修复已知问题,增加新功能,或者提高性能。在Ruby社区,保持RubyGems的更新是很重要的,因为最新的版本通常...
1. **创建集群配置文件**:为每个节点创建一个配置文件,指定端口和集群模式。 2. **启动Redis实例**:使用配置文件启动多个Redis服务。 3. **初始化集群**:使用`redis-trib.rb`工具(包含在Redis源码中)连接到...
Rubygems.org S3 存储桶中的 .gem 文件验证本地 .gem 文件来帮助我们。 此过程是可选的,但它有助于我们重建对 Rubygems.org 的信任,因此我们感谢您做出的任何贡献。 在开始之前,请注意有两种方法可以完成此操作
1. **Gem**:Gem是RubyGems的基本单位,它是一个包含了代码、元数据和依赖关系的自包含包。一个Gem可以是一个库、框架或者工具,用于扩展Ruby的功能。 2. **Gemspec**:每个Gem都有一个Gemspec文件,它定义了Gem的...