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

我想创build一个10-20个类/文件的小ruby项目。 我需要一些gem,我想使用rspec作为testing框架。

之后我可能会想要创build一个gem,但这并不确定。

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

我有的问题是:

  • 我在哪里把我所有的自定义错误/例外
  • 是否有一些约定名称像lib,bin,src等命名?
  • 我在哪里把testing数据或文件。
  • 我在哪里需要我所有的文件,所以我可以在我的项目中访问他们。

我知道我可以从零开始做所有事情,但我希望得到一些指导。 我可以复制一些好的gem,但我不确定我真正需要什么,我可以删除什么。

我看了一下http://gembundler.com/ ,但是在设置bundler后停止了。

要获得良好的开始,可以使用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
  • testing数据或文件进入spec/fixtures/
  • 要求lib/my_lib.rb所有ruby文件。 您也可以根据自己的喜好定义您的例外文件,也可以在自己的文件中定义。
  • C源文件进入ext/my_lib
  • shell脚本和可执行文件进入bin

如有疑问,只要看看其他gem是如何摆放的。


更多信息:

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

  1. 编辑my_lib.gemspec,在底部附近添加gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'
  2. 添加Bundler.setup并且require 'my_lib'到spec / spec_helper.rb的顶部,以确保您在运行规格时加载了您的gem依赖项。
  3. require "rspec/core/rake_task"task :default => :spec到您的Rakefile,以便运行rake将运行您的规格。

当您正在处理最新的创build时, 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 

进一步参考

  • Rubygems模式指南 (和主页 ),来自Matheus Moreira的回答。 他们真的很好的参考
  • 我如何开始由史蒂夫Klabnik
  • 练习46:从Zed Shaw 学习Ruby的 一个项目骨架
  • Railscasts上的Bundlevideo新gem
  • 文档

在rubygems.org上有一些很好的指南,它会向你介绍这些约定和其中一些背后的原因。 通常,大多数Ruby开发人员都遵循Rubygems命名和目录约定 。

如果我无法在标准库中find任何适合错误描述的类,我只会创build自定义的exception类。 把你的错误类嵌套在引发它的类或模块之下:

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

如果你使用的是Test::Unit ,unit testing可以进入/test ,如果你使用RSpec ,unit testing可以进入/test /spec 。 我推荐后者。

Bundler是pipe理负载path的好方法。 它将自动设置您的环境,只有在Gemfilegemspec指定的依赖关系。 它也可以让你轻松地require你的代码,而不使它成为一个gem。

不过,由于您将来可能会将您的代码绑定在gem中,因此我build议您研究如何创buildgem规格 。 你应该手动编写你的规范。 不要使用一些工具来自动生成它 – 在我看来,它们是暴力破解方法,在使用源代码控制时会不必要地复制信息并造成严重破坏。

我创造了一个你可能会觉得有用的gem 。 给定一个gemspec文件,它定义了许多有用的Rake任务来处理你的gem,其中包括用自动版本标记来构build,安装和发布你的gem到rubygemsgit仓库的任务。 它还提供了一个简单的方法来加载你的代码在irbpry会话中。

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

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

  • /lib/foo.rb – 定义项目的顶级命名空间及其版本; 需要所需的文件。
  • / lib / foo / – 包含您的项目的所有类,包括错误相关的类。
  • / test / – 包含您的项目的testing。
  • / spec / – 包含您的项目的规格。
  • / bin / – 如果你的项目依赖于二进制文件(JAR文件等),他们通常在那里。

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

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

另外,如果你正在创build一个gem,你将需要以下文件:

  • / Rakefile – 定义rake任务(比如用于testing,构build和推送gem的任务)。
  • / Gemfile – 定义gem的来源(以及其他可能的事情)。
  • /foo.gemspec – 描述你的gem并提供一个依赖关系列表。

互联网上有一些关于如何构buildRuby项目的指南。 另外,我认为解决这个问题的最好方法是通过github来寻找一些着名的Ruby项目,并检查“他们”的结构。

除了一般的rubygem的要求,我build议以下工具更好的工作stream程:

  • editorconfig ,帮助开发人员在不同的编辑器和IDE之间定义和维护一致的编码风格。
  • rubocop ,ruby的静态代码分析器,ruby社区中的lintec。
  • 警卫 ,连同一堆插件,当代码改变时,你可以随心所欲地运行任何命令。
  • 耙 ,各种项目任务的通用驱动程序,如:
    • package :build立gem包
    • clean :清理生成的文件
    • test :运行testing
  • 码 ,stream行的ruby文档工具。

除了上述所有的工具之外,他们还提供了一些ruby项目的在线服务:

  • CI(持续集成)
    • 特拉维斯慈
    • circleci
    • codeship
  • 代码审查
    • codeclimate

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

这是我的经验,希望对一些人有帮助。