Specification 类包含 gem 的信息。通常在 .gemspec 文件或 Rakefile 中定义,如下所示
Gem::Specification.new do |s| s.name = 'example' s.version = '0.1.0' s.licenses = ['MIT'] s.summary = "This is an example!" s.description = "Much longer explanation of the example!" s.authors = ["Ruby Coder"] s.email = '[email protected]' s.files = ["lib/example.rb"] s.homepage = 'https://rubygems.org.cn/gems/example' s.metadata = { "source_code_uri" => "https://github.com/example/example" } end
从 RubyGems 2.0 开始,Specification 可以保存任意元数据。请参阅 metadata
以了解可能添加到规范中的元数据项的格式和大小限制。
必需的 gemspec 属性
推荐的 gemspec 属性
只读属性
可选的 gemspec 属性
必需的 gemspec 属性
authors=(value
)
此 gem 的作者列表。
或者,可以通过将字符串分配给 spec.author
来指定单个作者。
用法
spec.authors = ['John Jones', 'Mary Smith']
files
此 gem 中包含的文件。您不能追加到此访问器,必须对其进行赋值。
仅将您可以要求的文件添加到此列表中,而不是目录等。
在构建 gem 时,目录会自动从此列表中删除,其他非文件会导致错误。
用法
require 'rake' spec.files = FileList['lib/**/*.rb', 'bin/*', '[A-Z]*'].to_a # or without Rake... spec.files = Dir['lib/**/*.rb'] + Dir['bin/*'] spec.files += Dir['[A-Z]*'] spec.files.reject! { |fn| fn.include? "CVS" }
name
此 gem 的名称。
用法
spec.name = 'rake'
summary
此 gem 描述的简短摘要。在 gem list -d
中显示。
description
应该比摘要更详细。
用法
spec.summary = "This is a small summary of my gem"
版本
此 gem 的版本。
版本字符串可以包含数字和句点,例如 1.0.0
。如果版本中包含字母,则 gem 为“预发布” gem,例如 1.0.0.pre
。
用法
spec.version = '0.4.1'
推荐的 gemspec 属性
描述
此 gem 的详细描述
描述应该比摘要更详细,但不要过长。建议使用几段文字,不要包含示例或格式。
用法
spec.description = <<~EOF Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. EOF
电子邮件
此 gem 的联系电子邮件地址(或地址)
用法
spec.email = '[email protected]' spec.email = ['[email protected]', '[email protected]']
主页
此 gem 主页的 URL
用法
spec.homepage = 'https://github.com/ruby/rake'
license=(o
)
此 gem 的许可证。
许可证的长度不得超过 64 个字符。
这应该只是您的许可证名称。许可证的完整文本应在构建 gem 时包含在 gem 中(在顶层)。
最简单的方法是指定许可证的标准 SPDX ID spdx.org/licenses/。理想情况下,您应该选择一个 OSI(开源倡议)opensource.org/licenses/ 批准的许可证。
最常用的 OSI 认可的许可证是 MIT 和 Apache-2.0。GitHub 还提供了一个许可证选择器,位于 choosealicense.com/。
您也可以使用自定义许可证文件以及您的 gemspec,并指定 LicenseRef-<idstring>,其中 idstring 是包含许可证文本的文件的名称。
您应该为您的 gem 指定许可证,以便人们知道他们被允许如何使用它以及您对它的任何限制。不指定许可证意味着所有权利保留;其他人无权出于任何目的使用该代码。
您可以使用 licenses=
设置多个许可证
用法
spec.license = 'MIT'
licenses=(licenses
)
库的许可证。
每个许可证必须是简短名称,不超过 64 个字符。
这应该只是您的许可证的名称。许可证的完整文本应该在您构建 gem 时包含在 gem 中。
有关更多讨论,请参阅 license=
用法
spec.licenses = ['MIT', 'GPL-2.0']
元数据
元数据保存了此 gem 的额外数据,这些数据可能对其他使用者有用,并且可以由 gem 作者设置。
元数据项具有以下限制
-
元数据必须是 Hash 对象
-
所有键和值必须是字符串
-
键的最大长度为 128 字节,值的长度最大为 1024 字节
-
所有字符串必须是 UTF-8,不允许使用二进制数据
您可以使用元数据来指定指向您的 gem 的主页、代码库、文档、wiki、邮件列表、问题跟踪器和更改日志的链接。
s.metadata = { "bug_tracker_uri" => "https://example.com/user/bestgemever/issues", "changelog_uri" => "https://example.com/user/bestgemever/CHANGELOG.md", "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1", "homepage_uri" => "https://bestgemever.example.io", "mailing_list_uri" => "https://groups.example.com/bestgemever", "source_code_uri" => "https://example.com/user/bestgemever", "wiki_uri" => "https://example.com/user/bestgemever/wiki" "funding_uri" => "https://example.com/donate" }
这些链接将在您的 gem 在 rubygems.org 上的页面上使用,并且必须通过以下正则表达式验证。
%r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}
required_ruby_version
此 gem 所需的 Ruby 版本
用法
spec.required_ruby_version = '>= 2.7.0'
只读属性
extensions_dir
此 gem 安装其扩展的路径。
rubygems_version
用于创建此 gem 的 RubyGems 版本。
可选的 gemspec 属性
add_development_dependency(gem
, *requirements
)
将名为 gem
的开发依赖项添加到此 gem 中,并带有 requirements
。
用法
spec.add_development_dependency 'example', '~> 1.1', '>= 1.1.4'
开发依赖项默认情况下不会安装,并且在需要 gem 时不会激活。
add_runtime_dependency(gem
, *requirements
)
为该 gem 添加一个名为 gem
的运行时依赖项,并带有 requirements
。
用法
spec.add_runtime_dependency 'example', '~> 1.1', '>= 1.1.4'
author=(o
)
authors
的单数(替代)写入器
用法
spec.author = 'John Jones'
bindir
gem 中可执行脚本的路径。通常为 'exe'
用法
spec.bindir = 'exe'
cert_chain
用于签署此 gem 的证书链。有关详细信息,请参阅 Gem::Security。
executables
包含在 gem 中的可执行文件。
例如,rake gem 具有 rake 作为可执行文件。您无需指定完整路径(如 bin/rake);所有应用程序样式文件都应在 bindir 中找到。这些文件必须是可执行的 Ruby 文件。使用 bash 或其他解释器的文件将无法正常工作。
包含的可执行文件只能是 ruby 脚本,不能是其他语言的脚本或编译后的二进制文件。
用法
spec.executables << 'rake'
extensions
在安装 gem 时要构建的扩展,特别是用于编译扩展的 extconf.rb 样式文件的路径。
这些文件将在安装 gem 时运行,导致 C(或其他)代码在用户的机器上编译。
用法
spec.extensions << 'ext/rmagic/extconf.rb'
有关为 gem 编写扩展的信息,请参阅 Gem::Ext::Builder。
extra_rdoc_files
要添加到 RDoc 的额外文件,例如 README 或 doc/examples.txt
当用户选择为 gem 生成 RDoc 文档(通常在安装时)时,所有库文件都会被发送到 RDoc 进行处理。此选项允许您包含一些非代码文件,以获得更完整的文档集。
用法
spec.extra_rdoc_files = ['README', 'doc/user-guide.txt']
platform=(platform
)
此 gem 运行的平台。
这通常是 Gem::Platform::RUBY 或 Gem::Platform::CURRENT。
大多数 gem 包含纯 Ruby 代码;它们应该简单地保留默认值。一些 gem 包含 C(或其他)代码,要编译成 Ruby“扩展”。除非代码仅在特定类型的系统上编译,否则 gem 应该保留默认值。一些 gem 由预编译的代码(“二进制 gem”)组成。为它们设置平台属性尤为重要。一个快捷方式是将平台设置为 Gem::Platform::CURRENT,这将导致 gem 构建器将平台设置为构建正在执行的系统的适当值。
如果此属性设置为非默认值,它将包含在 gem 构建时的文件名中,例如:nokogiri-1.6.0-x86-mingw32.gem
用法
spec.platform = Gem::Platform.local
post_install_message
gem 安装后显示的消息。
用法
spec.post_install_message = "Thanks for installing!"
rdoc_options
指定在生成 API 文档时要使用的 rdoc 选项。
用法
spec.rdoc_options << '--title' << 'Rake -- Ruby Make' << '--main' << 'README' << '--line-numbers'
require_paths=(val
)
gem 中的路径,在激活此 gem 时添加到 $LOAD_PATH
。如果您有扩展,则无需将 "ext"
添加到 require 路径,扩展构建过程会将扩展文件复制到“lib”中。
默认值为 "lib"
用法
# If all library files are in the root directory... spec.require_paths = ['.']
required_ruby_version=(req
)
此 gem 所需的 Ruby 版本。ruby 版本可以指定到补丁级别
$ ruby -v -e 'p Gem.ruby_version' ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0] #<Gem::Version "2.0.0.247">
也可以指定预发布版本。
用法
# This gem will work with 1.8.6 or greater... spec.required_ruby_version = '>= 1.8.6' # Only with final releases of major version 2 where minor version is at least 3 spec.required_ruby_version = '~> 2.3' # Only prereleases or final releases after 2.6.0.preview2 spec.required_ruby_version = '> 2.6.0.preview2' # This gem will work with 2.3.0 or greater, including major version 3, but lesser than 4.0.0 spec.required_ruby_version = '>= 2.3', '< 4'
required_rubygems_version
此 gem 所需的 RubyGems 版本
required_rubygems_version=(req
)
此 gem 所需的 RubyGems 版本
requirements
列出此 gem 正常工作所需的外部(相对于 RubyGems)要求。这仅仅是供用户参考的信息。
用法
spec.requirements << 'libmagick, v6.0' spec.requirements << 'A good graphics card'
signing_key
用于签署此 gem 的密钥。有关详细信息,请参阅 Gem::Security。