Gemを書くときに知っておきたい3つの事
先日から書き続けていたCommentExtractorが、大枠完成しました。
さて、今回Gemを書くときに役に立った、便利なTipsを幾つか紹介します!
内容はバラバラです。笑
- READMEに視覚情報を追加する
- RubyGemsからGemを削除する
- RSpecをキレイに書く
1.READMEに視覚情報を追加する
READMEには視覚的なバッヂを追加出来ます。Gemを書くときには、ぜひとも入れておきたい情報ですね。
もちろん、登録すれば無料で作ることが出来ます。
詳しくはコチラの記事を読んでみましょう。
2.RubyGemsからGemを削除する
間違えてRubyGemsにPushしてしまった!
そんなときに便利なyankコマンド。意外と知られていない。
gem yank gem_name -v 1.0.0
ただ、これをやっても論理削除されるだけのようですねぇ。多分。
このバージョン使うなよ!新しいの使えよ!ってときに使うコマンドだと思います。
3.RSpecをキレイに書く
RSpecをキレイに書く方法は、ある程度伝統があります。
今回は、ある程度RSpecを書ける人向けに、検索してもあまり出てこない情報(検索しにくい?)を提供したいと思います。
Syntaxについて
be_truthy, be_falsy
RSpecが新しくなって、be_true
, be_false
→be_truthy
, be_falsy
となりました。
今までは、厳密にtrue
で無くてもテストが通っちゃいましたからね。
現在の主題であるクラスを取得する
RSpecではdescribed_class
というメソッドを使用出来ます。
describe KlassName do...
で指定したKlassNameが格納されます。
これを使えば、クラス名に依存せずにテストを書く事ができますね。
ExampleGroupを作る
ご存知の通り、Railsのテストではcontroller, model, viewで使えるメソッドが大きく異なります。 それは、RSpecのexample_groupという機能を使って、テストの種類を元にModuleをincludeしているからです。
これを使えば、複数のファイルで共通する内容を簡単に記述する事が出来ます。 次のような感じですね。
# spec_helper.rb
RSpec.configure do |config|
config.include ExampleGroupModuleName, type: :optional, example_group: {
file_path: Regexp.compile(%w[spec comment_extractor extractor .*.rb].join('[\\\/]'))
}
end
RSpec.configure do |config|
config.add_setting :source_code_path, default: 'spec/assets/source_code'
end
module ExampleGroupModuleName
def source_code_path(file_name = nil)
dir = RSpec.configuration.source_code_path
file_name ? "#{dir}/#{file_name}" : dir
end
def self.included(k)
k.class_eval do
let(:instance) { described_class.new(source_code) }
let(:source_code) { source_code_path(file_name) }
describe '.new' do
subject { instance }
let(:file_name) { 'filename.rb' }
it { expect { subject }.to_not raise_error }
end
end
end
end
これを使えば、まとまったテストをスッキリ書く事ができますね。
まとめ
ざっくばらんに書きました。 Gemを作るのは簡単なので、みなさんも作ってみてください!
では!