ActiveSupportが無いと俺はプログラミングも出来ないのかよ !
たまにRailsじゃなくてrubyを使うと、blank?とかが使えなくて悲しい思いをしますよね? blank?をRails以外でも使うときはいつもお世話になってる@sasata299さんのブログにあるのでそのとおりにすればいいです。
Rails以外の環境でblank?メソッドを使うときの注意 - (゚∀゚)o彡 sasata299's blog
ActiveSupportのblank?はよく使うメソッドの筆頭ですが、それ以外にも気づかないうちにお世話になっているものがいくつもあるので、最近使ったものを忘れないようにまとめておこうと思います。
Time.parse
(追記) ActiveSupportじゃなかった
適当な日時を表す文字列を引数に与えると、Timeオブジェクトに変換してくれるという便利なものです。
時間のフォーマットを指定したりすることなく、うまいことやってくれるのでとても楽です。
# mysqlのdatetime型 > Time.parse "2010-03-04 18:50:13" => 2010-03-04 18:50:13 +0900 # solrの時間型 > Time.parse "2010-03-05T03:58:10Z" => 2010-03-05 03:58:10 UTC # twitterのAPIのレスポンス > Time.parse "Fri Jul 16 16:55:52 +0000 2010" => 2010-07-17 01:55:52 +0900
プログラムで使いそうな時間の文字列はだいたいTimeオブジェクトに変換してくれました。
Time::DATE_FORMATS
先ほどのTime.parseの逆で、こっちはTimeオブジェクトを文字列に変換するやつです
まずTime::DATE_FORMATSに変換したいフォーマットを定義します
Time::DATE_FORMATS[:mysql] = "%Y-%m-%d %H:%M:%S" Time::DATE_FORMATS[:solr] = "%Y-%m-%dT%H:%M:%SZ" Time::DATE_FORMATS[:twitter] = "%a %b %d %H:%M:%S %z %Y"
このように定義したあとに、Timeオブジェクトのto_sメソッドで変換します
> Time.now.to_s(:mysql) => "2011-08-25 11:51:48" > Time.now.to_s(:solr) => "2011-08-25T11:52:05Z" > Time.now.to_s(:twitter) => "Thu Aug 25 11:52:09 +0900 2011"
ね?簡単でしょ
ActiveSupport::Concern
rubyにはmix-inというのがあります。あるクラスのメソッドを使いたいけど、継承するのはなんか意味が違うよなーって時とか、多重継承したいみたいな時に使うやつです。
module Hoge def moge puts "mogemoge" end end class Piyo include Hoge end piyo = Piyo.new piyo.moge # => mogemoge
上記の例のようにmoduleをclassの中でincludeしてやれば、moduleのmoreというメソッドがPiyoというクラスのインスタンスメソッドになることがわかります。
こういうことができると、includeでインスタンスメソッドだけじゃなくクラスメソッドも追加できるようにしたくなるんですが意外とめんどくさいです。(やり方は説明しません)
moduleをincludeしてインスタンスメソッドもクラスメソッドも追加したい場合は、ActiveSupport::Concernを使うと簡単にできますよというお話です。簡単さはコードを見れば一目瞭然です。
module Hoge extend ActiveSupport::Concern module InstanceMethods def instance_moge puts "いんすたんすめそっだよー" end end module ClassMethods def class_moge puts "くらすめそっだよー" end end end class Piyo include Hoge end Piyo.class_moge # => くらすめそっだよー piyo = Piyo.new piyo.instance_moge # => いんすたんすめそっだよー
moduleの中でActiveSupport::Concernをextendし、インスタンスメソッドを追加したい場合はInstanceMethodsを定義してその中に、クラスメソッドを追加したい場合はClassMethodsを定義してその中に書きます。簡単だし読みやすいので素敵です。
InstanceMethodsは特に明記しなくてもインスタンスメソッドになるのでなくていいかもしれません。僕は書いてません。
まとめ
今回紹介した以外にもActiveSupportには他にもいろんな便利メソッドがありますが、紹介してるとキリがないのでこのあたりでやめておきます。詳しく知りたい人は公式のドキュメントを読むとか、Rails3レシピブック190の技にあるので読んでみるといいと思います。
- 作者: 高橋征義,松田明,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/07/25
- メディア: 単行本
- 購入: 32人 クリック: 891回
- この商品を含むブログ (37件) を見る
ActiveSupport以外にも便利なものがたくさん載ってるRails3レシピブックは超おすすめです!