接触ruby算下来也快两年了,一直都是写些业务代码,遇到技术难题在网上搜索答案,或者找一个相关的gem包,一般情况下都是使用别个大牛的gem包,自己从来没有打包过,最近有个需求,需要创建一个gem包,供一些公司的内部项目使用。
怎么创建一个gem包呢,google一下,gem的官方文档上居然有相关介绍,好吧,跟着这个学习一下这个过程。
简单gem包创建
在这个gem包里我们实现字符串转大小写的功能。
创建以下文件夹以及文件
注意:lib目录下必须有个和你gem名字一样的rb文件。
tree .
.
├── lib
│ └── string_util.rb
└── string_util.gemspec
编写两个文件的内容
string_util.rb
class StringUtil
def self.up_case(str)
str.upcase
end
end
string_util.gemspec
Gem::Specification.new do |s|
s.name = 'string_util'
s.version = '0.0.0'
s.date = '2016-05-25'
s.summary = "string_util!"
s.description = "process string to upcase"
s.authors = ["chenyafei"]
s.email = 'chenyafei@163.com'
s.files = ["lib/string_util.rb"]
s.homepage =
'http://rubygems.org/gems/hola'
end
编译并生成gem包
gem build string_util.gemspec
WARNING: licenses is empty, but is recommended. Use a license abbreviation from:
http://opensource.org/licenses/alphabetical
WARNING: See http://guides.rubygems.org/specification-reference/ for help
Successfully built RubyGem
Name: string_util
Version: 0.0.0
File: string_util-0.0.0.gem
忽略警告。
安装gem包
[chenyafei@develop string_util]$ gem install string_util-0.0.0.gem
Successfully installed string_util-0.0.0
Parsing documentation for string_util-0.0.0
Installing ri documentation for string_util-0.0.0
Done installing documentation for string_util after 0 seconds
WARNING: Unable to pull data from 'http://ruby.taobao.org': bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
1 gem installed
忽略警告。
测试gem包
1.9.3-p551 :001 > require('string_util')
=> true
1.9.3-p551 :002 > StringUtil
=> StringUtil
1.9.3-p551 :003 > StringUtil.up_case('abcd')
=> "ABCD"
哈哈,很简单吧,到这我们就完成了一个很简单的gem的制作,不过要注意的是 在ruby 1.9.2之前到版本里面,需要先require 'rubygem',才能使用我们写的gem。
不过这个gem包太简单了,只有一个文件,怎么制作复杂的gem包呢,如果这个gem包里有多个文件,怎么做呢,我们再举个例子。
复杂gem包创建
在这个例子用我们实现一个区分参数类型的转大写的功能。
目录结构
$ tree
.
├── lib
│ ├── string_util.rb
│ └── util
│ └── process.rb
└── string_util.gemspec
这次目录里多个文件夹util和文件process.rb
代码
string_util.gemspec
Gem::Specification.new do |s|
s.name = 'string_util'
s.version = '0.0.1'
s.date = '2016-05-25'
s.summary = "string_util!"
s.description = "process string to upcase"
s.authors = ["chenyafei"]
s.email = 'chenyafei@163.com'
s.files = ["lib/string_util.rb", "lib/util/process.rb"]
s.homepage =
'http://rubygems.org/gems/hola'
end
lib/string_util.rb
require "util/process"
class StringUtil
def self.up_case(str)
o = Util::Process.new(str)
o.to_case
end
end
lib/util/process.rb
module Util
class Process
def initialize(str)
@str = str
end
def to_case
if(@str.is_a?(Class))
return 'error str is a Class!!!!'
elsif(@str.is_a?(Fixnum))
return 'error str is a Number!!!!'
elsif(@str.is_a?(String))
return @str.upcase
else
return 'error other Object!!!!'
end
end
end
end
编译并生成gem包
gem build string_util.gemspec
WARNING: licenses is empty, but is recommended. Use a license abbreviation from:
http://opensource.org/licenses/alphabetical
WARNING: See http://guides.rubygems.org/specification-reference/ for help
Successfully built RubyGem
Name: string_util
Version: 0.0.1
File: string_util-0.0.1.gem
安装gem包
gem install string_util-0.0.1.gem
Successfully installed string_util-0.0.1
Parsing documentation for string_util-0.0.1
Done installing documentation for string_util after 0 seconds
WARNING: Unable to pull data from 'http://ruby.taobao.org': bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
1 gem installed
测试代码
1.9.3-p551 :001 > require('string_util')
=> true
1.9.3-p551 :002 > StringUtil.up_case(12)
=> "error str is a Number!!!!"
1.9.3-p551 :003 > StringUtil.up_case(String)
=> "error str is a Class!!!!"
1.9.3-p551 :004 > StringUtil.up_case('abds')
=> "ABDS"