Gem的文件夹结构
每个Ruby Gem的文件夹结构基本相同:
- lib:包含Gem的源代码
- bin:包含可执行Gem的可执行文件,Gem安装后,bin目录会被添加到$LOAD_PATH里
- test/spec:文件夹包含测试代码(取决于使用的测试框架)
- README:包含Gem的文档
- Rakefile:定义Rake任务(自动化执行测试代码,生成可执行文件等任务)
- .gemspec:包含Gem信息
gemspec文件
每个Gem的根文件夹下面都会有一个gemspec文件,这个文件包含了Gem的基本信息:
必须得属性
- authors:Gem的作者
- files:Gem的源代码位置(通常指向lib/xxx.rb)
- name:Gem的名字
- summary:Gem的大概介绍
- version:Gem的版本(如果版本里包含字母,代表预发布版本)
推荐的属性
- description:比summary更具体的描述
- email:联系邮箱
- homepage:Gem的homepage的URL
- license:Gem的license(不能超过64个字母)
- licenses:Gem的license(不能超过64个字母)
- metadata:可由作者设置的Gem的元数据。metadata必须是hash。key和value必须是字符串。key的长度最多128个字节;value的长度最多1024个字节。key和value都必须是UTF-8的字符,不能包含二进制数据。
- required_ruby_version:Gem要求的ruby版本
可选的属性
- add_development_dependency:添加开发依赖
- add_runtime_dependency:添加运行依赖
- bindir:可执行脚本的目录(通常是bin)
- extensions:指定安装Gem时需要构建的扩展(通常是extconf.rb文件的路径)
常用Gem命令
- 安装Gem:gem install xxx
- 卸载Gem:gem uninstall xxx
- 搜索Gem:gem search xxx(xxx可以是正则表达式)。可使用gem search xxx -d列出Gem的详细信息
- 列出本地Gem:gem list
- 查看文档:查看本地Gem的文档,ri xxx
如何命名Gem
通常Gem命名遵循如下规则:
- 用下划线区分名字中的单词:类或模块的名字如果包含多个单词,用下划线区分。
- 用破折线表示扩展:如果是对现有的gem做功能扩充,那么用破折线命名。如:net-http-digest_auth表示为net/http添加HTTP digest auth功能。
- 按需混合下划线和破折线:例如:net-http_digest_auth
- 不要使用大写字母:有些系统的文件系统是大小写敏感的,命名时尽量只用小写字母
按照上述命名规则,即可根据名字快速推导出require语句及主要的类和模块的名字,如:
-
Gem名字:ruby_parser
-
Require语句:require 'ruby_parser'
-
类或模块名字:RubyParser
-
Gem名字:rdoc-data
-
Require语句:require 'rdoc/data'
-
类或模块名字:Rdoc::Data
-
Gem名字:net-http-persistent
-
Require语句:require 'net/http/persistent'
-
类或模块名字:Net::HTTP::Persistent
-
Gem名字:net-http-digest_auth
-
Require语句:require 'net/http/diagest_auth'
-
类或模块名字:Net::HTTP::DigestAuth