zoukankan      html  css  js  c++  java
  • 如何创建自己的ruby gem包

    编写一个最简单的例子

    1. 建好如下文件夹

    注意:lib目录下必须有个和你gem名字一样的rb文件。

    1. $ cd hola  
    2. $ tree  
    3. .  
    4. ├── hola.gemspec  
    5. └── lib  
    6.     └── hola.rb  


    2. 编写代码

    . hola.rb

    1. % cat lib/hola.rb  
    2. class Hola  
    3.   def self.hi  
    4.     puts "Hello world!"  
    5.   end  
    6. end  


    .hola.gemspec

    1. % cat hola.gemspec  
    2. Gem::Specification.new do |s|  
    3.   s.name        = 'hola'  
    4.   s.version     = '0.0.0'  
    5.   s.date        = '2010-04-28'  
    6.   s.summary     = "Hola!"  
    7.   s.description = "A simple hello world gem"  
    8.   s.authors     = ["Nick Quaranto"]  
    9.   s.email       = 'nick@quaran.to'  
    10.   s.files       = ["lib/hola.rb"]  
    11.   s.homepage    =  
    12.     'http://rubygems.org/gems/hola'  
    13. end  

    这里面可以设置很多属性。

    上面字段的意思,比较简单。相信大家都能理解。


    3.编译生成gem

    1. % gem build hola.gemspec  
    2. Successfully built RubyGem  
    3. Name: hola  
    4. Version: 0.0.0  
    5. File: hola-0.0.0.gem  
    6.   
    7. % gem install ./hola-0.0.0.gem  
    8. Successfully installed hola-0.0.0  
    9. 1 gem installed  


    4.测试使用

    1. % irb  
    2. >> require 'hola'  
    3. => true  
    4. >> Hola.hi  
    5. Hello world!  

    注意:在ruby 1.9.2之前到版本里面,需要先require 'rubygem',才能使用我们写的gem.


    5.发布到rubygems网站

    1. $ curl -u tom https://rubygems.org/api/v1/api_key.yaml >  
    2. ~/.gem/credentials  
    3. Enter host password for user 'tom':  

    设定完之后发布

    1. % gem push hola-0.0.0.gem  
    2. Pushing gem to RubyGems.org...  
    3. Successfully registered gem: hola (0.0.0)  

    发布成功。

    这样任何一个人都可以使用你写的gem了。


    稍微复杂的rubygem例子

    上面的例子只有一个ruby文件,一般gem应该没有这么简单的。

    下面说下有多个ruby文件该怎么写。

    1. 目录结构

    多了个hola目录和translator.rb文件

    1. % tree  
    2. .  
    3. ├── hola.gemspec  
    4. └── lib  
    5.     ├── hola  
    6.     │   └── translator.rb  
    7.     └── hola.rb  

    2. 代码

    lib/hola/translator.rb
    1. % cat  lib/hola/translator.rb  
    2. class Hola::Translator  
    3.   def initialize(language)  
    4.     @language = language  
    5.   end  
    6.   
    7.   def hi  
    8.     case @language  
    9.     when :spanish  
    10.       "hola mundo"  
    11.     else  
    12.       "hello world"  
    13.     end  
    14.   end  
    15. end  
    lib/hola.rb
    1. % cat lib/hola.rb  
    2. class Hola  
    3.   def self.hi(language = :english)  
    4.     translator = Translator.new(language)  
    5.     translator.hi  
    6.   end  
    7. end  
    8.   
    9. require 'hola/translator'  

    .hola.gemspec

    1. % cat hola.gemspec  
    2. Gem::Specification.new do |s|  
    3.   s.name        = 'hola'  
    4.   s.version     = '0.0.0'  
    5.   s.date        = '2010-04-28'  
    6.   s.summary     = "Hola!"  
    7.   s.description = "A simple hello world gem"  
    8.   s.authors     = ["Nick Quaranto"]  
    9.   s.email       = 'nick@quaran.to'  
    10.   s.files       = ["lib/hola.rb", "lib/hola/translator.rb"]  
    11.   s.homepage    =  
    12.     'http://rubygems.org/gems/hola'  
    13. end  

    其他步骤和上面一样了。很简单吧!

    最后说下怎么写个 gem包含可执行文件的例子。

    这个也很简单。像rake就是典型的包含可执行文件的gem.

    1. 在刚才工程目录下建个bin文件夹

    生成可执行文件,并且修改权限为可运行。

    1. % mkdir bin  
    2. % touch bin/hola  
    3. % chmod a+x bin/hola  


    2. 修改可执行文件内容
    bin/hola

    1. #!/usr/bin/env ruby  
    2.   
    3. require 'hola'  
    4. puts Hola.hi(ARGV[0])  


    测试下

    1. % ruby -Ilib ./bin/hola  
    2. hello world  
    3.   
    4. % ruby -Ilib ./bin/hola spanish  
    5. hola mundo  


    3 .最后修改gemspec

    1. % head -4 hola.gemspec  
    2. Gem::Specification.new do |s|  
    3.   s.name        = 'hola'  
    4.   s.version     = '0.0.1'  
    5.   s.executables << 'hola'  

    其他就和上面一样了。很简单吧。

    ------------------------------------------------------------------------------

    什么是RubyGems?

    RubyGems是一个方便而强大的Ruby程序包管理器,Ruby的第三方插件是用gem方式来管理,非常容易发布和共享,一个简单的命令就可以安装上 第三方的扩展库。特点:能远程安装包,包之间依赖关系的管理,简单可靠的卸载,查询机制,能查询本地和远程服务器的包信息,能保持一个包的不同版本,基于 Web的查看接口,能查看你安装的gem的信息。

    安装RubyGems

    官方站点 http://rubygems.org/pages/download

    下载地址:http://rubyforge.org/frs/?group_id=126

    Windows 用户直接下载.zip压缩包,解压缩,从CMD提示窗口下进入 setup.rb所在目录, 运行 ruby setup.rb 即可安装。

    Ruby1.9.1 以后的版本自带RubyGems,直接在CMD窗口下输入指令 gem update --system 升级到最新版即可。

    gem包的安装方式:

    RubyGems.org 是官方的Gem托管中心,RubyGems就是从这里远程下载gem包的。RubyGems 将所有的gem包 安装到 /[ruby root]/lib/ruby/gems/[ver]/ 目录下,这其中包括了cache、doc、gems、specifications 4个目录,cache下放置下载的原生gem包,gems下则放置的是解压过的gem包。当安装过程中遇到问题时,可以进入这些目录,手动删除有问题的 gem包,然后重新运行 gem install [gemname] 命令即可。

    RubyGems命令详解:

    我们以目前最新的 rubygems 1.8.16 为例:

    # 查看RubyGems软件的版本
    gem -v

    # 更新升级RubyGems软件自身
    gem update --system

    # 更新所有已安装的gem包
    $ gem update

    # 更新指定的gem包
    # 注意:gem update [gemname]不会升级旧版本的包,可以使用 gem install [gemname] --version=[ver]代替
    $ gem update [gemname]

    # 安装指定gem包,程序先从本机查找gem包并安装,如果本地没有,则从远程gem安装。
    gem install [gemname]

    # 仅从本机安装gem包
    gem install -l [gemname]

    # 仅从远程安装gem包
    gem install -r [gemname]

    # 安装gem包,但不安装相关文档文件
    gem install [gemname] --no-ri --no-rdoc

    # 安装指定版本的gem包
    gem install [gemname] --version=[ver]

    # 删除指定的gem包,注意此命令将删除所有已安装的版本
    gem uninstall [gemname]

    # 删除某指定版本gem
    gem uninstall [gemname] --version=[ver]

    # 查看本机已安装的所有gem包
    gem list

    # 列出远程RubyGems.org 上有此关键字的gem包(可用正则表达式)
    gem list -r keyword

    # 列出远程RubyGems.org 上所有Gmes清单,并保存到文件。
    gem list -r > remote_gem_list.txt

    #查看所有gem包文档及资料
    gem server 

    #显示RubyGem使用帮助
    gem help

    #列出RubyGem命令一些使用范例
    gem help example

    更多命令请参考官方文档: http://guides.rubygems.org/command-reference/

  • 相关阅读:
    Leetcode Binary Tree Level Order Traversal
    Leetcode Symmetric Tree
    Leetcode Same Tree
    Leetcode Unique Paths
    Leetcode Populating Next Right Pointers in Each Node
    Leetcode Maximum Depth of Binary Tree
    Leetcode Minimum Path Sum
    Leetcode Merge Two Sorted Lists
    Leetcode Climbing Stairs
    Leetcode Triangle
  • 原文地址:https://www.cnblogs.com/276815076/p/3966268.html
Copyright © 2011-2022 走看看