如何设置基本的ruby项目?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

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

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

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

提问于
用户回答回答于

你可以使用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

当正在处理最新的创建时,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
用户回答回答于

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

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:

# Rakefile
require 'rookie'

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

扫码关注云+社区