boolean_accessorというGemを書いてRubyGems.orgに公開した
boolean_accessor
たとえば、
class Item attr_reader :active def initialize @active = true end end
のような場合、
item = Item.new item.active # => true
となりますが、active
という属性がbooleanだということをもっとわかりやすくしたいところです。
かといって、is_active
という名前にするのもrubyっぽくなくてイマイチ。
ここは、
item.active? # => NoMethodError: undefined method `active?'...
で、trueが返ってきてほしいところです。
alias_method :active?, :active
とすれば、item.active?
とできるようになりますが、複数属性がある場合にひとつひとつ書くのは面倒ですし、booleanの属性にこういった動作をしてほしい場合は多々あるので、gemにしてみました。
使い方はREADME.mdに書いてある通りですが、今回の例であれば、
class Item battr_reader :active def initialize @active = true end end item = Item.new item.active? # => true
のようになります。
RubyGems.orgへの公開
今回はじめてrubygems.orgに公開してみましたので、手順を書いておきます。
gemを作るのはbundlerを使うと簡単です。
bundle gem boolean_accessor
以下のようなファイルが作成され、gitの準備もしてくれます。
create boolean_accessor/Gemfile create boolean_accessor/Rakefile create boolean_accessor/LICENSE.txt create boolean_accessor/README.md create boolean_accessor/.gitignore create boolean_accessor/boolean_accessor.gemspec create boolean_accessor/lib/boolean_accessor.rb create boolean_accessor/lib/boolean_accessor/version.rb Initializating git repo in /path/to/dir/boolean_accessor
libの中に実際のコードを書いていくわけですが、今回はとても小さなgemなので、テスト以外のコードとしては、
boolean_accessor/lib/boolean_accessor.rb
を書いただけです。
動作を確認する場合は、作成されたディレクトリに移動(cd boolean_accessor)した上で、
bundle console
とすれば、gemの内容が読み込まれ、コンソール上で動作が確認できます。
あとは boolean_accessor.gemspec のTODOや必要事項を埋めたり、README.mdなどを編集すれば、今回は完成です。
gemspecは必ず確認するので問題ないと思いますが、LICENSE.txtにも自動で名前が入っているので、必要があれば修正します。(最初は~/.gitconfig
のuser nameが入るみたいです。)
公開するgemなのでテストも書いておきます。specディレクトリを作成し、RSpecで書きました。
公開する前に、まずローカルでgemをbuildし、インストールしてみます。
rake -T
でrakeタスク一覧を見ることができます。
rake install
をすればインストールできるはずですが、権限の関係かうまくいかなかったので、
rake build
でgemを作成し、作成されたgemを、
sudo gem install pkg/boolean_accessor-0.0.1.gem
でインストールしました。
RubyGems.orgへの公開は、まずサイトにサインアップしておいた上で、
git push pkg/boolean_accessor-0.0.1.gem
のようにして、聞かれるEmailやPasswordを入力すれば、公開できました。
一度リリースすると、~/.gem/credentials
ファイルが生成されるようで、これが作成されると今後はrake -T
で一覧表示されたrake release
でリリースできるようになるのだと思います。
参考
Basic RubyGem Development - Tech.Pro
はじめてbundlerでruby gem作ってgithubとrubygemsに上げてみた - shoprevのブログ
Ruby: Boolean attribute naming convention and use - Stack Overflow