`

创建自己的ruby Gems

阅读更多
    RubyGems是一个库和程序的标准化打包以及安装框架,它使定位、安装、升级和卸载Ruby包变的很容易。rails以及它的大部分插件都是以gem形式发布的。本文描述一个自己创建ruby Gems的过程。
    假设你今天用ruby实现了一个stack结构,你想发布到网上让别人可以共享,OK,工作开始了。首先你的程序当然要先写好了:
<!---->#stacklike.rb
module Stacklike
 attr_reader:stack
 
def initialize
    @stack
=Array.new
 end
 
def add_to_stack(obj)
    @stack.push(obj)
 end 
 
def take_from_stack
    @stack.pop
 end
 
def size
    @stack.length
 end
 alias length size
 
 
def clear
   @stack.clear
 end
end      

然后就是我们的Stack类,引入这个Module,请注意,我们这里只是特意这样做,增加点复杂度:
<!---->#stack.rb
require 
'stacklike'
class Stack
 include Stacklike
end

 

作为一个要被大众使用的小程序,一定要有完备的测试代码,OK,ruby内置了单元测试库,我们来写个单元测试来测试Stack:
<!---->require 'stack'
require 
'test/unit'
class TestStack <Test::Unit::TestCase
  
def testStack
    stack
=Stack.new
    assert_equal(0,stack.size)
    assert_equal(stack.length,stack.size) 
    stack.add_to_stack(
1)
    assert_equal(
1,stack.length)
    assert_equal(
1,stack.take_from_stack)
    
    stack.clear
    assert_equal(0,stack.length)
    assert_nil(stack.take_from_stack)
    
    
10.times{|i| stack.add_to_stack(i)}
    assert_equal(
10,stack.size)
    assert_equal(stack.length,stack.size)
    
9.downto(4){|i| assert_equal(i,stack.take_from_stack)} 
    
    assert_equal(
4,stack.length)
    assert_equal(
3,stack.take_from_stack)
    assert_equal(
3,stack.length)
    
    stack.clear
    assert_equal(0,stack.length)
    assert_nil(stack.take_from_stack)
  end
end

如果你使用radrails或者RDT运行这段代码,你将看到让人舒服的greenbar,一切正常。程序写好了,接下来就是关键步骤了,怎么发布成ruby Gems呢?

第一步,写Gems规范文件
   gemspec是ruby或者YAML形式的元数据集,用来提供这个gem的关键信息,我们创建一个文件夹就叫stack,然后在下面建立2个目录两个文件:
lib目录:用于存放库的源代码,比如这个例子中的stack.rb,stacklike.rb
test目录:用于存放单元测试代码。
README文件:描述你的库的基本信息和版权许可证等
stack.gemspec:gems规范文件,用以生成gem
当然,也可以有docs目录用以存放rdoc文档和ext目录用以存放ruby扩展,我们这个简单例子就免了。
看看我们的规范文件:
<!---->#stack.spec
require 
'rubygems'
SPEC
=Gem::Specification.new do |s|
  s.name
="Stack"
  s.version
='0.01'
  s.author
='dennis zane'
  s.email
="killme2008@gmail.com"
  s.homepage
="http://www.rubyeye.net"
  s.platform
=Gem::Platform::RUBY
  s.summary
="ruby实现的Stack"
  condidates 
=Dir.glob("{bin,lib,docs,test}/**/*")
  s.files
=condidates.delete_if do |item|
    item.include?(
"CVS")|| item.include?("rdoc")
  end
  s.require_path
="lib"
  s.autorequire
='stack,stacklike'
  s.test_file
="test/ts_stack.rb"
  s.has_rdoc
=false
  s.extra_rdoc_files
=["README"]
end  

很明显,规范文件也是ruby程序(也可以用YAML描述),设置了这个gem的主要关键信息:名称、作者信息、平台,需要注意的就是files数组过滤掉了cvs和rdoc文件,require_path和auto_require让你指定了require_gem装入gem时会被添加到$LOAS_PATH(ruby查找库的路径)中的目录(也就是我们源代码存放的lib),auto_require指定了装载的文件名,我们没有rdoc,所有设置has_rdoc为false,附带文档就是README。

第二步 修改单元测试文件引用路径
过去我们假设ts_stack.rb与stack.rb、stacklike.rb在同一个目录下,可是我们现在将它们分别放在lib和test目录,TestStack 怎么引用测试的类呢?答案是在ts_stack.rb开头加上一行:
<!---->$:.unshift File.join(File.dirname(__FILE__),"..","lib")

最后一步 构建gem
在stack目录执行下列命令:
<!---->ruby stack.gemspec
 
或者:
<!---->gem build stack.gemspec
将生成一个文件,你可以将这个文件共享给朋友们咯。你的朋友只要下载这个文件,执行:
<!---->gem install Stack.0.01.gem
将在他们的ruby环境中安装你写的stack,比较遗憾的是,你这个stack确实太简陋了,哈哈。





dennis 2007-04-12 20:38 发表评论
分享到:
评论

相关推荐

    Practical Ruby Gems

    此外,书中还可能涉及到了一些高级主题,如如何创建自己的Gems以及最佳实践等。 ### 4. 书籍内容预测 根据书名推测,《实用Ruby Gems》可能会涵盖以下几个方面的内容: - **基础介绍**:首先会介绍Ruby语言的基础...

    ruby gems (rails ,padrino, cancan ,puppet)

    Padrino是一个轻量级的Ruby Web框架,它建立在Sinatra之上,提供了一套完整的框架工具集,包括路由、控制器、模型、视图以及强大的生成器。Padrino的目标是提供一套灵活且高效的开发工具,适合小型到中型项目,特别...

    ruby-oracle相关的数据库操作的gems包

    标题提到的"ruby-oracle相关的数据库操作的gems包"是指一组用于连接和交互Oracle数据库的Ruby库。描述中指出,这些包主要基于oci8技术,oci8是Oracle公司提供的一个C接口,允许其他编程语言,如Ruby,与Oracle数据库...

    ruby_gem

    7. **本地开发**: 开发者可以创建自己的 Gem 并发布到 RubyGems.org,或者在本地测试 Gem,无需实际发布。 8. **执行脚本**: Gem 中可以包含可执行脚本,它们会被自动添加到 PATH 环境变量中,使得用户可以直接运行...

    rubugems-2.7.7.7

    总的来说,Ruby Gems是Ruby开发的关键工具,它使得开发者能够方便地使用他人创建的库,提高开发效率和代码质量。在处理像Redis这样的外部服务时,Ruby Gems提供了与这些服务交互的桥梁,确保了代码的可维护性和兼容...

    ruby--dbi数据库操作gems相关

    通过DBI,你可以创建复杂的数据库应用,同时保持代码的简洁和可维护性。 在Ruby的世界中,DBI是一个强大的工具,它简化了数据库操作,使得开发者能专注于业务逻辑而不是数据库的细节。同时,由于DBI的兼容性,你...

    makegem:Ruby gems的基本模板

    Ruby Gems是Ruby编程语言中的一个包管理器,它允许开发者发布、安装和使用其他人创建的库和工具。"makegem" 是一个项目,提供了一个基本的模板,帮助开发者快速搭建自己的Ruby Gem。这个模板包含了创建Gem所需的一些...

    ruby _1.9.3 _gem环境

    3. 创建Gemset:使用RVM或rbenv时,可以创建独立的Gemset,每个项目可以有自己的Gemset,避免不同项目之间的依赖冲突。 三、Gem 文件结构 在描述中提到的“覆盖C:\Ruby193\lib\ruby\gems\1.9.1”,这是Ruby 1.9.3中...

    ruby books

    Ruby语言由日本人松本行弘在1993年创建,它强调代码的可读性和程序员的生产力,因此在Web开发领域,特别是与Ruby on Rails框架结合时,非常受欢迎。 描述中提到的"一些积聚起来的关于ruby的书"表明这是一个集合,...

    ruby(前途大好的ruby+rains)

    7. **Gem生态系统**:Ruby的Gem包管理系统提供了丰富的第三方库,开发者可以通过安装Gems来扩展Rails的功能。 随着Rails的流行,Ruby的社区也在不断壮大,提供了大量的开源项目、教程和工具,使得学习和使用Ruby变...

    NetBeans 6.0 安装和配置Ruby Support

    - 通过`Tools &gt; Ruby Gems`打开管理器,`Installed`选项卡显示已安装的Gem,`New Gems`选项用于添加新的Gem。 - 当使用JRuby平台时,会包含如ActiveRecord-JDBC和Rails框架等Gem。 5. **JRuby与数据库服务器的...

    rubygems:Ruby的库包装和发行

    我们将这些软件包称为“宝石”,而RubyGems是在您的Ruby环境中安装,创建,管理和加载这些软件包的工具。 RubyGems还是RubyGems.org的客户端, 是Gems的公共存储库,可让您发布可被其他开发人员共享和使用的Gem。 ...

    NetBeans Ruby and Rails IDE with JRuby 2009

    - **使用Ruby Gems Manager**:NetBeans集成了Gems Manager工具,可以查看已安装的Gems并进行操作。 - **解决Gems仓库权限问题**:有时可能会遇到Gems安装失败的问题,这通常与权限设置有关。 - **从命令行使用Gem...

    eloquent ruby

    - 宝石(Gems)管理:Bundler用于项目依赖管理。 - 社区资源和最佳实践。 - 部署和运维相关的工具与服务。 8. **面向Web开发** - Ruby on Rails框架简介。 - MVC架构的理解。 - RESTful API的设计原则。 9. **...

    ruby.rar

    Ruby社区已经开发了大量的Gems,覆盖了各种用途,如Web框架Rails、测试工具RSpec等。 5. **Rails框架**:Ruby on Rails是最知名的Ruby框架,它遵循"Convention over Configuration"的原则,大大简化了Web应用的开发...

    Windows下RDT+Eclipse搭建 ruby开发环境配置

    本教程将详细讲解如何使用RDT(Ruby Development Tools)与Eclipse来创建一个高效的Ruby开发环境。 首先,我们需要安装Ruby解释器。Ruby是一种面向对象的、动态类型的编程语言,它提供了丰富的内置库和强大的社区...

    rubygems

    8. **ruby-progressbar-1.5.1.gem**: Ruby-Progressbar库用于创建文本进度条,显示在命令行或控制台中,常用于大型数据处理或长时间运行的任务,以便用户了解程序执行的进度。 9. **code_analyzer-0.4.5.gem**: ...

    ruby离线安装所需所有的gem文件(另有安装包)

    将这些gem文件移动到你的系统GEM目录(通常在`C:\Ruby193\lib\ruby\gems\[version]\gems`下,具体取决于你的安装路径),然后打开命令行,使用以下命令安装gem: ```bash gem install [gem_file_name].gem --local ...

    ruby on rail.pdf

    Ruby on Rails社区活跃,拥有丰富的插件和 gems(Ruby的包管理系统),可以方便地扩展功能。例如,Devise用于用户认证,CanCanCan处理权限控制,Paperclip或Carrierwave处理文件上传,而Rspec和Capybara则提供了强大...

    The Ruby Programming Language 介绍

    8. 社区支持:Ruby拥有活跃的开发者社区,提供丰富的开源库(Gems)和持续的更新支持,如RubyGems平台用于管理和分发这些库。 在《The Ruby Programming Language》这本书中,作者深入浅出地介绍了Ruby的各个方面,...

Global site tag (gtag.js) - Google Analytics