我想创建一个包含10~20个类/文件的小型ruby项目。我需要一些宝石,我想使用rspec作为测试框架。
我可能想稍后建立一个宝石,但这不确定。
是否有一些Howto或Guide向我展示了如何设置项目的基本结构?
我的问题是:
我知道我可以从零开始做一切,但我想要一些指导。我可以复制一些好的宝石,但我不确定我真正需要什么以及我可以删除什么。
我查看了http://gembundler.com/,但在设置了捆绑包后停止了。
答案 0 :(得分:148)
要获得良好的开端,您可以使用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
lib
spec
spec/fixtures/
lib/my_lib.rb
中的所有ruby文件。您也可以根据自己的喜好在该文件中或在自己的文件中定义例外。ext/my_lib
bin
如果有疑问,只需看看其他宝石是如何布局的。
更多信息:
您应该在gemspec中添加rspec作为开发依赖项,以便让其他开发人员更轻松
gem.add_development_dependency 'rspec'
和gem.add_development_dependency 'rake'
。Bundler.setup
和require 'my_lib'
添加到spec / spec_helper.rb的顶部,以确保在运行规范时加载了gem依赖项。require "rspec/core/rake_task"
和task :default => :spec
添加到您的Rakefile中,以便运行rake
将运行您的规范。当您正在处理最新的创作时,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
进一步参考
答案 1 :(得分:11)
有some nice guides at rubygems.org将向您介绍其中一些惯例及其背后的原因。通常,大多数Ruby开发人员都遵循Rubygems naming and directory conventions。
如果我无法在标准库中找到任何符合错误描述的类,我只会创建自定义异常类。将您的错误类嵌套在引发它的类或模块下:
class Parser::Error < RuntimeError; end
begin
Parser.new(:invalid).parse!
rescue Parser::Error => e
puts e.message
end
如果您使用Test::Unit
,则单元测试会转到/test
,如果您使用RSpec
,则会转到/spec
。我推荐后者。
Bundler
是管理加载路径的好方法。它将自动设置您的环境,仅使用Gemfile
和gemspec
上指定的依赖项。它还允许您轻松require
您的代码而不会成为宝石。
但是,由于您将来可能会将代码捆绑在gem中,我建议您调查how to create gem specifications。您应该手动编写规范。不要使用某种工具自动生成它 - 在我看来,它们是蛮力方法,在与源代码控制一起使用时会不必要地复制信息并造成严重破坏。
你可能觉得有用的 I created a gem。给定gemspec
文件,它定义了许多有用的Rake
任务,用于处理您的gem,其中包括用于构建,安装和将gem发布到rubygems
和git
存储库的任务。自动版本标记。它还提供了一种在irb
或pry
会话中加载代码的简便方法。
# Rakefile
require 'rookie'
# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
答案 2 :(得分:6)
以下是我最常见的约定(假设您的项目名称为“foo”):
在lib /中,约定通常是为顶级命名空间内的每个子命名空间创建一个文件夹。例如,类Foo :: Bar :: Baz通常位于/lib/foo/bar/baz.rb下。
有些人喜欢创建/lib/foo/version.rb文件只是为了设置Foo :: VERSION常量,但我经常在/lib/foo.rb文件中看到这个。
此外,如果您要创建gem,则需要以下文件:
答案 3 :(得分:4)
互联网上有一些关于如何构建Ruby项目的指南。此外,我认为解决这个问题的最佳方法是前往github并寻找一些着名的Ruby项目,并检查“他们的”结构。
除了一般的红宝石宝石要求,我建议使用以下工具以获得更好的工作流程:
clean
:构建gem包test
:清理生成的文件List<ImageView> views = new ArrayList<ImageView>();
for ( int i = 0; i < length; i++){
views.add((ImageView)this.findViewById("R.id.letter" + (i+1));
}
:运行测试除了上述所有工具之外,他们还为ruby项目提供了一些在线服务:
您甚至可以通过http://shields.io/为您的开源项目生成徽章。
这是我的经历,希望对某些人有所帮助。