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にしてみました。

boolean_accessor

使い方は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