当我们运行bundle gem new_gem命令时,会创建一个包含这些文件的目录:
create new_gem/Gemfile
create new_gem/Rakefile
create new_gem/.gitignore
create new_gem/new_gem.gemspec
create new_gem/lib/new_gem.rb
create new_gem/lib/new_gem/version.rb默认情况下,文件new_gem/lib/new_gem.rb是一个名为NewGem的模块。
我的问题如下:如果NewGem是一个类,我该怎么做?与其拥有NewGem::NewGem,我只想定义这个类(没有根模块)。
我试着在这个文件中用类替换模块,然后创建一个本地gem来测试它,但是在它安装之后,我不能在IRB中加载它(使用require 'new_gem')。
谢谢你的帮助。
发布于 2011-11-12 23:52:34
你应该问问你自己为什么要这样做。这个模块用来namespace你的gem代码。通常为所有类提供上下文,但即使在单个类gem中,这也有助于提供与世界上其他代码的冲突。
除非您的类被命名为SomethingThatCouldNeverPossiblyBeDefinedAnywhereElse,否则保留该模块可能是一件好事。尽管如此,保持模块完好无损仍然是一件好事,因为这是惯例,也是人们在检查/使用您的代码时所期望的。
考虑到这一点,如果你想要一个单一的gem类,你需要做一些事情。
require 'new_gem/version'来查找它的版本号。将其更改为简单的git gemspec还会使用git ls列出其包含的文件,并且生成的require 'new_gem'.new_gem/version。删除这个:git rm lib/new_gem/version.rbnew_gem模块到一个类,就像您从您的类中定义生成的version.rb需求一样,并在那里定义版本,例如:class NewGem VERSION = '0.0.1‘end
rake install安装gem。在完成此操作之前,您将无法将其加载到IRB中。https://stackoverflow.com/questions/8104002
复制相似问题