皆さんもObjectを数値(Integer)に変換する「to_i」や文字列(String)に変換する「to_s」などは使ったことがあると思います。(下記のように使います。)
[1] pry(main)> "1".to_i
=> 1
[2] pry(main)> 1.to_s
=> "1"
今回は、あまり使用頻度は高くはないのですが、Objectを論理値(Boolean)に変換するためのメソッド「to_b」というのを実装してみようと思います。
1. to_bメソッドの使い方
まずは、いきなり使い方からですが、下記に例を記載します。APIでJSONが送信されてくるような時に、params[:spot_request]に文字列で"true"または、"false"が入っていて、"true"なのか"false"なのかで処理を分ける場合のものです。def create
if params[:spot_request].to_b
# TODO: 申請処理をする
else
# TODO: 通常の処理をする
end
end
2. to_bメソッドの実装内容
to_bメソッドですが、今回は文字列・数値・シンボルなどから変換できるようにしたいと思います。下記のような形で、「lib/extensions/object/to_b.rb」として保存します。(trueとしたいものが他にあれば、追加してみるのもよいと思います。)class Object
def to_b
target_value = self.class == String ? self.downcase : self
case target_value
when 'yes', 'true', 'ok', '1', :yes, :true, :ok, 1, true
true
else
false
end
end
end
3. to_bメソッドがアプリケーション内で利用できるように読み込ませる
to_bメソッドをcontrollerやmodel内で利用できるようにto_b.rbを読み込ませる必要があります。「config/initializers」配下に新しいファイルを作っても構いませんが、今回は「config/application.rb」のファイルの末尾に下記を追加します。Dir[Rails.root.join('lib/extensions/**/*.rb')].sort.each do |file|
require file
end
4. to_bメソッドを実際に使ってみる
これで、to_bメソッドが使えるようになりましたので、簡単に実行結果をのせておきます。[1] pry(main)> "true".to_b
=> true
[2] pry(main)> "false".to_b
=> false
[3] pry(main)> 1.to_b
=> true
[4] pry(main)> 0.to_b
=> false
[5] pry(main)> :true.to_b
=> true
[6] pry(main)> :false.to_b
=> false
いかがでしたでしょうか。今回は単純なメソッドをObjectクラスに追加してみましたが、同じような方法で既存のクラスにメソッドを追加したりすることができますので、ぜひ色々と試してみてください。
0 件のコメント:
コメントを投稿