我想创建一个包含10 ~ 20个类/文件的小Ruby项目。我需要一些gem,我想使用RSpec作为测试框架。
我可能想稍后构建一个gem,但这并不确定。
是否有一些操作指南或指南告诉我如何设置我的项目的基本结构?
我的问题是:
我知道我可以从头开始做任何事情,但我需要一些指导。有一些好的宝石我可以复制,但我不确定我真正需要的和我可以删除的。
我查看了http://gembundler.com/,但在设置Bundler后它停止了。
发布于 2012-03-04 04:17:18
为了获得一个好的开始,您可以使用bundle gem
命令和rspec --init
。
~/code $ bundle gem my_lib
create my_lib/Gemfile
create my_lib/Rakefile
create my_lib/LICENSE.txt
create my_lib/README.md
create my_lib/.gitignore
create my_lib/my_lib.gemspec
create my_lib/lib/my_lib.rb
create my_lib/lib/my_lib/version.rb
Initializating git repo in /Users/john/code/my_lib
~/code $ cd my_lib/
~/code/my_lib $ git commit -m "Empty project"
~/code/my_lib $ rspec --init
The --configure option no longer needs any arguments, so true was ignored.
create spec/spec_helper.rb
create .rspec
ruby代码放在lib
spec
spec/fixtures/
lib/my_lib.rb
中。您也可以在该文件或它们自己的文件中定义异常--根据您自己的preference.ext/my_lib
bin
中
如果有疑问,只需看看其他gem是如何布局的。
更多信息:
您应该将rspec作为开发依赖项添加到您的gemspec中,以使其他开发人员更容易操作
gem.add_development_dependency 'rspec'
和gem.add_development_dependency 'rake'
。Bundler.setup
和require 'my_lib'
添加到spec/spec_helper.rb的顶部,以确保在运行规范时加载gem依赖项。<代码>H132将D33和D34添加到Rakefile中,以便运行D35将运行您的规范。<代码>G237
当您正在进行最新的创建时,guard-rspec可以在文件更改时自动运行您的规范,提醒您规范失败,从而节省您的时间和麻烦。
~/code/my_lib $ git add spec/spec_helper.rb
~/code/my_lib $ git commit -am "Add RSpec"
~/code/my_lib $ vim my_lib.gemspec # add guard development dependency
~/code/my_lib $ bundle
~/code/my_lib $ bundle exec guard init
~/code/my_lib $ vim Guardfile # Remove the sections below the top one
~/code/my_lib $ git add Guardfile
~/code/my_lib $ git commit -am "Add Guard"
创建满意后,将其推送到github
# create a github repository for your gem, then push it up
~/code/my_lib $ curl -u myusername https://api.github.com/user/repos -d '{"name":"my_lib"}'
~/code/my_lib $ git remote add origin git@github.com:myusername/my_lib.git
~/code/my_lib $ git push
然后,当您准备好在Rubygems.org上发布您的gem时,运行rake release
,它将引导您完成这些步骤。
~/code/my_lib $ rake release
进一步的参考文献
发布于 2012-03-04 04:32:22
有一些some nice guides at rubygems.org将向您介绍这些约定以及其中一些约定背后的原因。一般来说,大多数Ruby开发人员都遵循Rubygems naming and directory conventions。
只有在标准库中找不到符合错误描述的类时,我才会创建自定义异常类。将error类嵌套在引发它的类或模块下:
class Parser::Error < RuntimeError; end
begin
Parser.new(:invalid).parse!
rescue Parser::Error => e
puts e.message
end
单元测试要么进入/test
,如果你使用Test::Unit
,要么进入/spec
,如果你使用RSpec
。我推荐后者。
Bundler
是管理加载路径的一个很好的方法。它将仅使用Gemfile
和gemspec
上指定的依赖项自动设置您的环境。它还允许您轻松地require
您的代码,而不是使它成为宝石。
但是,由于您将来可能会将代码捆绑到gem中,我建议您研究一下how to create gem specifications。您应该手动编写您的规范。不要使用某些工具来自动生成它-在我看来,它们是蛮力方法,当与源代码控制一起使用时,它们会不必要地复制信息并造成严重破坏。
你可能会发现有用的I created a gem。给定一个gemspec
文件,它定义了许多用于处理gem的有用Rake
任务,包括构建、安装gem并将其发布到带有自动版本标记的rubygems
和git
存储库的任务。它还提供了一种在irb
或pry
会话中加载代码的简单方法。
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
发布于 2012-03-04 04:16:34
以下是我最常看到的约定(假设您的项目名称为"foo"):
Foo.rb//
在lib/中,约定通常是为顶级名称空间中的每个子名称空间创建一个文件夹。例如,类Foo::Bar::Baz通常位于/lib/foo/bar/baz.rb下。
有些人喜欢创建一个/lib/foo/version.rb文件来设置Foo::VERSION常量,但是我经常在/lib/foo.rb文件中看到这个常量。
此外,如果要创建gem,则需要以下文件:
gem).
https://stackoverflow.com/questions/9549450
复制相似问题