くりにっき

フルスタックキュアエンジニアです

compact_blankというgemを作った

なんやかんやで久しぶりにgem作りました

どんなgem?

Array#compactHash#compact *1だとnilを除外したArrayやHashを作ることができますが、空文字も除外したいことがちょいちょいあるので作りました。 *2

使い方

refinementsを使ってるので using CompactBlank を書いた場所のみ compact_blankcompact_blank! が生えます

Array#compact_blank, Array#compact_blank!

compact_blank!(ビックリマークがついてるメソッド)は自分自身を破壊的に変更します。(変更時は self が返って、変更されなかった時は nil が返るのも #compact! 準拠です)

using CompactBlank

array = ["a", nil, "b", ""]

array.compact
#=> ["a", "b", ""]

array.compact_blank
#=> ["a", "b"]

array.compact_blank!
#=> ["a", "b"]
array
#=> ["a", "b"]

Hash#compact_blank, Hash#compact_blank!

using CompactBlank

hash = { a: "1", b: nil, c: "3", d: "" }

# NOTE: Hash#compact is feature of activesupport
hash.compact
#=> {:a=>"1", :c=>"3", :d=>""}

hash.compact_blank
#=> {:a=>"1", :c=>"3"}

hash.compact_blank!
#=> {:a=>"1", :c=>"3"}
hash
#=> {:a=>"1", :c=>"3"}

やってること

20行ちょいの雑なモンキーパッチです https://github.com/sue445/compact_blank/blob/v0.1.0/lib/compact_blank.rb

*1:Array#compact はRuby本体のメソッドだけど Hash#compactはactivesupportのメソッド

*2:まぁ真面目に array.reject(&:blank?) や hash.reject{|_, v| v.blank? } を書いてもよかったんですが、同じ記述を3個以上書くことになってつらくなったのでgem化した