私は現在、Making your own gemのドキュメントの例に従ってレイアウトされている単純なRuby Gemを作成しています。Ruby Gemでrspecテストのパスが必要
私のディレクトリ構造:
.
├── Gemfile
├── Gemfile.lock
├── lib
│ ├── go_run
│ │ ├── parser.rb
│ │ └── runner.rb
│ └── go_run.rb
└── spec
├── go_run_spec.rb
├── parser_spec.rb
└── runner_spec.rb
私はもともとただRunner
lib/go_run/runner.rb
でRunner
クラスと呼ばれるが、今、文書化の例のように私はGoRun::Runner
の下でそれを名前空間しています。コードは機能します。問題は現在、bundle exec rspec spec/parser_spec.rb
を実行していないことです。それはで失敗します。
/home/smurf/dev/ruby/go_run/lib/go_run/parser.rb:3:in `<top (required)>': uninitialized constant GoRun (NameError)
そのファイルの3行目は次のとおりです。
class GoRun::Parser
私はrequire
がrequire 'go_run/parser'
を使用してspec/parser_spec.rb
にライブラリコードをINGのです。
require_relative '../lib/go_run/parser'
と一緒に試してみましたが、同じエラーが発生しました。
誰かが私が間違っていることを知っていますか?
アップデート:私はこのブランチの完全なコードをアップロードしていますhttps://github.com/henrytk/go_run/tree/stackoverflow-43155117
ありがとう@Drenmi。私は 'GoRun :: Parser'の名前空間に名前をつけたいだけでした。なぜなら、それがドキュメンテーションのやり方だからです。どうしてそうしたのか分かりますか?それを 'パーサー 'として放置することの害は何でしょうか? – HenryTK
あなたの宝石は、他の図書館とユーザーコードの両方と一緒に暮らすことを考慮する必要があります。彼らや他の宝石(RuboCopなど)がParser gemに依存していると、名前の競合が発生します。 :-) – Drenmi
優れています。私のGemは、ライブラリとしてではなく、実行可能な 'run'のためだけに使用されることを意図しているので、' gem install'だけで実際に 'go_run 'を' require'する必要はありません。ご協力ありがとうございました。 – HenryTK