创建自定义的Ruby gem包的教程

编写一个最简单的例子

1. 建好如下文件夹

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

代码如下:

$ cd hola 
    $ tree 
    . 
    ├── hola.gemspec 
    └── lib 
        └── hola.rb

2. 编写代码

. hola.rb

  % cat lib/hola.rb
  class Hola
   def self.hi
    puts "Hello world!"
   end
  end

.hola.gemspec

  % cat hola.gemspec
  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'
  end

这里面可以设置很多属性。我会专门写篇文章介绍。

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


3.编译生成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

4.测试使用

  % irb
  >> require 'hola'
  => true
  >> Hola.hi
  Hello world!

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

5.发布到rubygems网站

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

设定完之后发布

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

发布成功。

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

稍微复杂的rubygem例子

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

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

1. 目录结构

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

  % tree
  .
  ├── hola.gemspec
  └── lib
    ├── hola
    │  └── translator.rb
    └── hola.rb

2. 代码

lib/hola/translator.rb

  % cat lib/hola/translator.rb
  class Hola::Translator
   def initialize(language)
    @language = language
   end 

   def hi
    case @language
    when :spanish
     "hola mundo"
    else
     "hello world"
    end
   end
  end

lib/hola.rb

  % cat lib/hola.rb
  class Hola
   def self.hi(language = :english)
    translator = Translator.new(language)
    translator.hi
   end
  end 

  require 'hola/translator'

.hola.gemspec

  % cat hola.gemspec
  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", "lib/hola/translator.rb"]
   s.homepage  =
    'http://rubygems.org/gems/hola'
  end

红色是和上面不一样的地方。

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

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

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

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

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

  % mkdir bin
  % touch bin/hola
  % chmod a+x bin/hola

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

  #!/usr/bin/env ruby 

  require 'hola'
  puts Hola.hi(ARGV[0])

测试下

  % ruby -Ilib ./bin/hola
  hello world 

  % ruby -Ilib ./bin/hola spanish
  hola mundo

3 .最后修改gemspec

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

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

(0)

相关推荐

  • Ruby环境下安装使用bundler来管理多版本的gem

    有了rbenv来管理多版本的ruby环境,我们还需要一个能管理多版本gem(比如rails)的工具,那就是bundler了,项目背景不细说了,需要了解的直接到官网http://bundler.io/,这里只讲一些实际使用经验. 安装 gem install bundler 使用 mkdir app1; cd app1; echo "source 'https://ruby.taobao.org/'" > Gemfile echo "gem 'rails,'4.1.0'&

  • ruby执行周期性任务的三种gem介绍

    1.whenever 首先,whenever是基于linux的cron服务的,所以,在windows平台上没有直接的方法使用该gem.whenever严格来说应该算一个cron的翻译器,将ruby代码翻译为cron脚本,从而将周期性任务转交给cron实际去完成.对于精通cron的shell程序员来说可能不值一提,但对rubyist却不是.首先,我们可以使用ruby语言来书写任务代码,在ruby层面上控制代码,避免了和一些shell脚本的切换:另外,cron命令很强大,但我总是记不住它的命令参数,

  • Ruby中gem包管理器的用法及用bundler来管理多版本的gem

    gem常用命令 gem -v # 查看RubyGems软件的版本 gem help #显示RubyGem使用帮助 gem help example #列出RubyGem命令一些使用范例 gem install [gemname] # 安装指定gem包,程序先从本机查找gem包并安装,如果本地没有,则从远程gem安装. gem install -l [gemname] # 仅从本机安装gem包 gem install -r [gemname] # 仅从远程安装gem包 gem install [g

  • Ruby包管理器gem常用命令

    gem相关命令使用 1.显示gem的帮助和版本 复制代码 代码如下: gem –h/--help #显示gem的帮助 gem –v /--version #显示gem的版本号 2. 列出远程库的所有可用软件 复制代码 代码如下: gem query --remote         # 短命令: gem q -r 你可以看到一个关于远程主机上所有软件的详细列表. 3. 查找远程主机上的特定软件 复制代码 代码如下: gem query --remote --name-matches doom #

  • Ruby中的gem包管理的使用及gem源搭建教程

    熟练使用RubyGems RubyGems是Ruby的插件管理系统,可以轻松安装及管理Ruby函式库.可以在RubyGems上找到所有开源套件. ###常见指令 gem -v 查看RubyGems的版本 gem update --system 升级RubyGems的版本 gem install gem_name 安装某个插件 gem install -v x.x.x gem_name 安装指定版本的插件 gem list 列出安装的套件 gem update gem_name 更新某个插件 ge

  • 创建自定义的Ruby gem包的教程

    编写一个最简单的例子 1. 建好如下文件夹 注意:lib目录下必须有个和你gem名字一样的rb文件. 复制代码 代码如下: $ cd hola      $ tree      .      ├── hola.gemspec      └── lib          └── hola.rb 2. 编写代码 . hola.rb % cat lib/hola.rb class Hola def self.hi puts "Hello world!" end end .hola.gemsp

  • IDEA创建自定义模板图文教程

    IDEA创建自定义模板 1.项目目录任意一处 右键 > 新建 > 编辑文件模板 2.点击加号创建模板 3.设置名称(如:XML File,Servlet File),扩展名(决定该模板生成什么文件),模板内容,勾选按照样式重新格式化 4.应用,右键新建文件查看,XML和Servlet就是我配置的两个模板 到此这篇关于IDEA创建自定义模板图文教程的文章就介绍到这了,更多相关IDEA创建自定义模板内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • 导出maven项目依赖的jar包(图文教程)

    注意使用mvn命令是需要配置好maven的环境变量 一.导出到自定义目录中 在maven项目下创建lib文件夹,输入以下命令: mvn dependency:copy-dependencies -DoutputDirectory=lib maven项目所依赖的jar包都会复制到项目目录下的lib目录下 这是我需要导出的jar包: 项目的根目录: 打开cmd,进入项目根目录(pom.xml文件也在这里),并执行目录,lib文件如没有手动创建也会自动创建: 稍等片刻,maven便完成了复制 二.导出

  • Vscode中快速创建自定义代码模板的方法

    Vscode中快速创建自定义代码模板 一招鲜,吃遍天,学会了这个在Vscode中快速创建自定义代码模板的教程,我相信创建其它代码模板的方法你也就通个七七八八了. 我就以Vue的创建为例,不过我这个Vue是在HTML中创建的. 初学Vue,我们一般都是在.html文件中引入vue包,然后编写自己的vue代码. 盲目的跟着网上那些教程创建Vue模板是行不通的. 因为我们创建的模板是在.html文件下,所以我们的模板也得是在html.json中来进行编写. 教程如下: 图文并用,理解更清晰到位! 在V

  • AngularJS基于factory创建自定义服务的方法详解

    本文实例讲述了AngularJS基于factory创建自定义服务的方法.分享给大家供大家参考,具体如下: 为什么要创建自定义服务? 很简单,不想让控制器显得过于"臃肿",而且服务可复用.针对性强,每个服务对应不同的功能. 这里介绍如何使用factory创建自定义服务,并且使用他. 例子1: <!--HTML--> <div ng-controller="showTheName"> <h1 ng-bind="name"

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • django创建自定义模板处理器的实例详解

    django创建自定义模板处理器: 一.需求来源: 在django开发中,页面是通过template(模板)进行渲染的,对于一些数据,可以通过{{ 变量 }}的方式进行传递.但是,如果整个网站中,或者整个网站的大部分页面都用到了一些变量或者数据,那么每次渲染的时候都传递一次这几个数据显得相当的冗余.这与django的DRY(Don't repeat yourself)思想不符,因此django提供了一种方式,让你能自定义处理器. 二.django默认的处理器: 在django开发中,django

  • ubuntu下mysql二进制包安装教程

    1.下载对应二进制包 cd /usr/local/src sudo wget http://dev.mysql.com/downloads/file/?id=465030 2.解压并放在/usr/local目录下改名为mysql sudo tar zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz sudo mv mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/mysql 3.创建mysql分组和用户,更改my

随机推荐