`

创建自己的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 发表评论
分享到:
评论

相关推荐

    rubygems:Ruby的库包装和发行

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

    ruby-gems-project

    自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...

    ruby-gems-bootcamp

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。... Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...

    nyaplot, 用于 ruby的交互式绘图生成器.zip

    nyaplot, 用于 ruby的交互式绘图生成器 Nyaplot Nyaplot是用于 ruby 用户的交互式绘图生成... 它的目标是在 ruby 中创建交互式绘图,并且仍然允许快速Prototype化。定制和与其他科学 Gems的集成。Nyaplot是来自'nya'和

    ruby-building-applications-gems-and-bundler

    了解有关在Ruby应用程序中需要外部代码库(称为gems)的信息。 了解如何在您的应用程序中使用Bundler和Gemfile管理gem及其依赖项。 定义Ruby 您编写的任何内容都不是100%的代码。 虽然您可能没有注意到它,但是...

    RubyCore:用Ruby编写的Minecraft Mod框架

    当然可以,但是gem必须全部使用Ruby,因为该框架使用Ruby / Java编写,所以本地gems(C语言)无法正常工作。 我可以为其他主持人制作宝石吗? 是的,请。 我可以使用其他开发模块吗(BuildCraft,...

    tripit-export-trips-to-xml:Ruby脚本将行程数据导出到XML

    如果尚未安装,请安装Git,Ruby,Ruby Gems和Bundler。 转到并创建一个完整的API应用程序。 稍后您将需要API密钥和API机密 然后克隆此git repo: git clone git@github.com:muness/tripit-export-trips-to-xml.git...

    phase-3-ruby-building-applications-gems-and-bundler

    了解有关在Ruby应用程序中需要外部代码库(称为gems)的信息。 了解如何在您的应用程序中使用Bundler和Gemfile管理gem及其依赖项。 定义Ruby 您编写的任何内容都不是100%的代码。 尽管您可能没有注意到它,但是...

    memory_board_new:新的“内存板”原型为grandmashouse.com。 作为 General Assembly Web Development Immersive 的 Project 2 开发。 全新的代码。 由于使用了某些 Ruby Gems,第一块内存板不符合课程要求,因此从头开始

    您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    datarockets样式:共享的Ruby样式配置

    数据火箭:: Style Datarockets共享样式配置和代码样式约定的注释。 基于。 这个配置执行了datarockets 概述的许多准则。 安装 将此行添加到您的应用... 它适用于Ruby gems和no-Rails应用程序。 inherit_gem : da

    rubygems-tasks:用于管理和发布Ruby项目的简单Rake任务

    Ruby任务[电子邮件](gmail.com上的mailto:postmodern.mod3)描述rubygems-tasks为构建,安装和发布Ruby Gems提供了不可知论的Rake任务。 require 'rubygems/tasks'Gem::Tasks.new哲学用于管理Ruby项目的Rake任务不...

    private-events:这是一个活动网站,用户可以在其中创建活动并邀请其他使用Ruby on Rails构建的用户

    有关如何安装Ruby on Rails的更多信息,请单击此设置和安装使用上面的链接克隆此存储库(单击“代码”按钮)打开一个终端并cd到克隆的存储库运行bundle install来安装ruby gems所需的依赖项运行yarn来安装javascript...

    myrecipes:Ruby on Rails 应用程序 - 数据关联

    带测试的 MyRecipes Ruby...在 Cookin 中安装的 Ruby Gems Cookin 使用以下宝石: sqlite3 Better_errors(简化开发) rails_12factor(heroku 部署) 引导程序 载波 mini_magick will_paginate bootstrap-will_

    rubygems.org-backup:这是历史重写之前 ruby​​gems.org 的 BACKUP 存储库。 不使用。 请不要拉请求

    目的提供更好的 API 来处理 gems 创建更透明和可访问的项目页面使社区能够改进和增强站点链接 :#rubygems 在 Freenode 上: : :贡献请遵循我们的。 要进行设置,请查看。 我们的部署过程也记录在 wiki 上,有一个...

    Gaston:死的简单 Ruby 配置存储

    使用 ruby​​gems 安装它: gem install gaston 使用 bundler,将其添加到您的Gemfile : gem "gaston" 在 rails 项目中,运行以下命令: rails g gaston:config 否则,创建一个初始化程序。 您可以使用env...

    信息

    echo ' # Install Ruby Gems to ~/gems ' &gt;&gt; ~ /.zshrc echo ' export GEM_HOME="$HOME/gems" ' &gt;&gt; ~ /.zshrc echo ' export PATH="$HOME/gems/bin:$PATH" ' &gt;&gt; ~ /.zshrc source ~ /.zshrc # Download dependencies...

    在Ruby(和Rails)中部署机器学习模型-Ruby开发

    在Ruby(和Rails)中部署机器学习模型Trove:fire:在Ruby(和Rails)中部署机器学习模型与XGBoost,Torch.rb,fastText和许多其他gems配合使用非常好。将这一行添加到应用程序的Gemfile中:gem'trove'并运行:bundle ...

    platzi-ruby-curso-de-ruby:普拉茨的Ruby课程

    建立专案 我们需要安装Bundler ,要在全球范围内安装它,请使用 sudo gem install bundler 现在我们创建项目目录,并在目录中使用以下命令启动项目 bundle init 在Gemfile文件中,我们将添加gems,然后使用以下...

    hacklab-almeria.github.io:Web在生产HackLabAlmería中

    通常,可以始终使用Ruby gems , gem install jekyll来安装它。 视窗 要在Microsoft系统上安装 ,可以按照。 Mac OS X 它可以使用ruby gems gem install jekyll , gem install jekyll 。 需要。 如何使用Jekyll?...

    ruby-gnome:从 Ruby 使用的一组 GNOME 库的绑定

    Ruby-GNOME 项目的 gems 可以使用gem命令轻松安装。 例如为了安装 gtk3 gem 及其依赖项: gem install gtk3 从 GitHub 主分支安装 您还可以从 GitHub 主分支安装这些 gem。 像下面这样创建Gemfile : source ...

Global site tag (gtag.js) - Google Analytics