首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何设置一个基本的Ruby项目?

如何设置一个基本的Ruby项目?
EN

Stack Overflow用户
提问于 2012-03-04 04:08:58
回答 4查看 51.2K关注 0票数 105

我想创建一个包含10 ~ 20个类/文件的小Ruby项目。我需要一些gem,我想使用RSpec作为测试框架。

我可能想稍后构建一个gem,但这并不确定。

是否有一些操作指南或指南告诉我如何设置我的项目的基本结构?

我的问题是:

  • 我应该把我所有的自定义Errors/Exceptions?
  • Are放在哪里有一些命名目录的约定,比如lib,documents?
  • Where,src等等?
  • 我把测试数据或src放在哪里我需要所有的文件才能在我的项目中访问它们吗?

我知道我可以从头开始做任何事情,但我需要一些指导。有一些好的宝石我可以复制,但我不确定我真正需要的和我可以删除的。

我查看了http://gembundler.com/,但在设置Bundler后它停止了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-04 04:17:18

为了获得一个好的开始,您可以使用bundle gem命令和rspec --init

代码语言:javascript
复制
~/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

  • specs中,数据放在spec

  • test中,文档放在spec/fixtures/

  • Require中,所有文件都放在lib/my_lib.rb中。您也可以在该文件或它们自己的文件中定义异常--根据您自己的preference.
  • C源文件放在ext/my_lib
  • shell脚本中,可执行文件放在bin

如果有疑问,只需看看其他gem是如何布局的。

更多信息:

您应该将rspec作为开发依赖项添加到您的gemspec中,以使其他开发人员更容易操作

  1. 编辑规范,在底部附近添加gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'
  2. Bundler.setuprequire 'my_lib'添加到spec/spec_helper.rb的顶部,以确保在运行规范时加载gem依赖项。

<代码>H132将D33和D34添加到Rakefile中,以便运行D35将运行您的规范。<代码>G237

当您正在进行最新的创建时,guard-rspec可以在文件更改时自动运行您的规范,提醒您规范失败,从而节省您的时间和麻烦。

代码语言:javascript
复制
~/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

代码语言:javascript
复制
# 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,它将引导您完成这些步骤。

代码语言:javascript
复制
~/code/my_lib $ rake release

进一步的参考文献

上的Learn Ruby The Hard Way

票数 158
EN

Stack Overflow用户

发布于 2012-03-04 04:32:22

有一些some nice guides at rubygems.org将向您介绍这些约定以及其中一些约定背后的原因。一般来说,大多数Ruby开发人员都遵循Rubygems naming and directory conventions

只有在标准库中找不到符合错误描述的类时,我才会创建自定义异常类。将error类嵌套在引发它的类或模块下:

代码语言:javascript
复制
class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end

单元测试要么进入/test,如果你使用Test::Unit,要么进入/spec,如果你使用RSpec。我推荐后者。

Bundler是管理加载路径的一个很好的方法。它将仅使用Gemfilegemspec上指定的依赖项自动设置您的环境。它还允许您轻松地require您的代码,而不是使它成为宝石。

但是,由于您将来可能会将代码捆绑到gem中,我建议您研究一下how to create gem specifications。您应该手动编写您的规范。不要使用某些工具来自动生成它-在我看来,它们是蛮力方法,当与源代码控制一起使用时,它们会不必要地复制信息并造成严重破坏。

你可能会发现有用的I created a gem。给定一个gemspec文件,它定义了许多用于处理gem的有用Rake任务,包括构建、安装gem并将其发布到带有自动版本标记的rubygemsgit存储库的任务。它还提供了一种在irbpry会话中加载代码的简单方法。

代码语言:javascript
复制
# Rakefile
require 'rookie'

# Run `rake -T` for the complete task list
Rookie::Tasks.new('your_gem.gemspec').define_tasks!
票数 11
EN

Stack Overflow用户

发布于 2012-03-04 04:16:34

以下是我最常看到的约定(假设您的项目名称为"foo"):

Foo.rb//

  • -定义项目的顶级命名空间及其版本;需要files.
  • /lib/foo/ -包含项目的所有类,包括与错误相关的classes.
  • /test/ -包含project.
  • /spec/的测试-包含项目的规范。
  • //-如果项目依赖于二进制文件(JAR文件等),则通常会将它们放入其中。

在lib/中,约定通常是为顶级名称空间中的每个子名称空间创建一个文件夹。例如,类Foo::Bar::Baz通常位于/lib/foo/bar/baz.rb下。

有些人喜欢创建一个/lib/foo/version.rb文件来设置Foo::VERSION常量,但是我经常在/lib/foo.rb文件中看到这个常量。

此外,如果要创建gem,则需要以下文件:

gem).

  • /Gemfile

  • /Rakefile-定义gem).

  • /Gemfile任务(例如用于测试、构建和推送things).

  • /foo.gemspec的任务)-定义gem的源(以及其他可能的rake -描述gem并提供rake列表
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9549450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档