如何设置基本的Ruby项目?


103

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

稍后我可能想构建一个宝石,但是并不确定。

是否有一些方法或指南向我展示如何设置项目的基本结构?

我的问题是:

  • 我将所有自定义的错误/异常放在哪里?
  • 是否有一些用于命名目录(例如lib,bin,src等)的约定?
  • 我应该在哪里放置测试数据或文件?
  • 我在哪里需要所有文件,以便可以在项目中访问它们?

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

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


Answers:


156

为了获得一个好的开始,您可以使用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。您也可以根据自己的喜好在该文件或它们自己的文件中定义例外。
  • C源文件进入 ext/my_lib
  • Shell脚本和可执行文件进入 bin

如有疑问,只需看看其他宝石的布置方式即可。


更多信息:

您应该将rspec添加为gemspec中的开发依赖项,以使其他开发人员更轻松

  1. 编辑my_lib.gemspec,增加gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'接近底部。
  2. 在spec / spec_helper.rb的顶部添加Bundler.setuprequire 'my_lib'以确保在运行规范时加载了gem依赖项。
  3. 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
你可以用-b, [--bin=Generate a binary for your library.]bundle gem
Selman Ulug 2012年

你也可以用bundle gem <gem-name> -t做相当于rspec --init一下子。
pioto

1
如何执行Ruby项目。我为学生老师的时间表建立了一个基于控制台的ruby项目。不确定如何执行?
rAzOr

11

rubygems.org上有一些不错的指南,将向您介绍这些约定及其背后的原因。通常,Rubygems命名和目录约定大多数Ruby开发人员都遵循。

如果无法在标准库中找到适合错误描述的任何类,则只能创建自定义异常类。将错误类嵌套在引发它的类或模块下:

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中,因此建议您研究如何创建gem规范。您应该手动编写规范。不要使用某些工具来自动生成它-在我看来,它们是蛮力方法,与源代码管理一起使用时,这些方法不必要地复制了信息并造成了严重破坏。

我创建了一个宝石,您可能会觉得有用。给定一个gemspec文件,它定义了许多有用的Rake与您的宝石,其中包括建筑,安装和释放你的宝石任务的工作任务rubygems,并git与自动版本标记库。它还提供了一种在irbpry会话中加载代码的简便方法。

# Rakefile
require 'rookie'

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

6

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

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

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

有人喜欢创建/lib/foo/version.rb文件只是为了设置Foo :: VERSION常量,但是我经常在/lib/foo.rb文件中看到此定义。

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

  • / Rakefile-定义rake任务(例如用于测试,构建和推送gem的任务)。
  • / Gemfile-定义gem的来源(以及其他可能的东西)。
  • /foo.gemspec-描述您的gem并提供依赖项列表。

5

互联网上有一些有关如何构建Ruby项目的指南。此外,我认为解决此问题的最佳方法是前往github并寻找一些著名的Ruby项目,然后检查“其”结构。

除了一般的红宝石要求外,我还建议使用以下工具来改善工作流程:

  • editorconfig,可帮助开发人员在不同的编辑器和IDE之间定义和维护一致的编码样式。
  • rubocop,ruby的静态代码分析器,ruby在ruby社区中的defac。
  • 守卫和一堆插件,您可以在代码更改时自动运行任意命令。
  • rake,它是各种项目任务的通用驱动程序,例如:
    • package:构建宝石包
    • clean:清理生成的文件
    • test:运行测试
  • 院子,流行的红宝石文档工具。

除了上述所有工具外,它们还是针对ruby项目的一些在线服务:

您甚至可以通过http://shields.io/为您的开源项目生成徽章。

那是我的经验,希望对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.