如何设置基本的ruby项目?

ayc*_*ter 99 ruby project-structure

我想用10-20个类/文件创建一个小的ruby项目.我需要一些宝石,我想使用rspec作为测试框架.

我可能想稍后建立一个宝石,但这不确定.

是否有一些Howto或Guide向我展示了如何设置项目的基本结构?

我的问题是:

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

我知道我可以从头做一切,但我想要一些指导.我可以复制一些好的宝石,但我不确定我真正需要什么以及我可以删除什么.

我查看了http://gembundler.com/,但在设置捆绑器后它停止了.

Joh*_*hat 153

要获得良好的开端,您可以使用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
Run Code Online (Sandbox Code Playgroud)
  • 代码进去了 lib
  • 规格进去了 spec
  • 测试数据或文档进入 spec/fixtures/
  • 需要所有的ruby文件lib/my_lib.rb.您也可以根据自己的喜好定义文件的异常,也可以在自己的文件中定义.
  • C源文件进入 ext/my_lib
  • shell脚本和可执行文件进入 bin

如果有疑问,只需看看其他宝石是如何布局的.


更多的信息:

您应该在gemspec中添加rspec作为开发依赖项,以便其他开发人员更轻松

  1. 编辑my_lib.gemspec,添加gem.add_development_dependency 'rspec'gem.add_development_dependency 'rake'靠近底部.
  2. 添加Bundler.setuprequire 'my_lib'以投机/ spec_helper.rb的顶部,以确保您的gem依赖加载当您运行规范.
  3. 添加require "rspec/core/rake_task"task :default => :spec你的Rake文件,这样运行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"
Run Code Online (Sandbox Code Playgroud)

在你对你的创作感到满意之后,把它推到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
Run Code Online (Sandbox Code Playgroud)

然后,当您准备好在Rubygems.org上发布您的gem时,运行rake release,它将引导您完成这些步骤.

~/code/my_lib $ rake release
Run Code Online (Sandbox Code Playgroud)

进一步的参考


Mat*_*ira 11

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

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

class Parser::Error < RuntimeError; end

begin
  Parser.new(:invalid).parse!
rescue Parser::Error => e
  puts e.message
end
Run Code Online (Sandbox Code Playgroud)

单元测试去任何进入/test,如果你使用Test::Unit,或进入/spec如果你使用RSpec.我推荐后者.

Bundler是管理负载路径的好方法.它将自动设置您的环境,只包含指定的依赖项Gemfile和可选的gemspec.它还允许您轻松地require编写代码,而不会使其成为宝石.

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

我创建了一个你可能觉得有用的宝石.给定一个gemspec文件,它定义了许多Rake用于处理gem的有用任务,其中包括使用自动版本标记构建,安装和释放gem rubygems以及git存储库的任务.它还提供了一种简单的方式来加载在你的代码irbpry会话.

# Rakefile
require 'rookie'

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


use*_*029 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并提供依赖项列表.


Xia*_*nyu 5

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

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

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

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

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

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