rails:3340
From: naopontan <naopontan@g...>
Date: Fri, 11 Dec 2009 15:20:44 +0900
Subject: [rails:3340] Re: テスト時や development 環境の時のみシステム時刻を強制したい
naopontan です。 > オリジナルの Date.today と、テスト用に定義した Date.today を使い分ける > ことなので、いったん「オリジナルの Date.today」を待避させる必要がありま > す。 > RubyOnRailsでは、こういう時のための Module#alias_method_chain という仕組 > みがあり、上記コードは... 勉強になります。この辺はモヤモヤしていた部分なのでスッキリしました。 ありがとうございます。 2009年12月11日15:13 Shinya Kawaji <kawaji@g...>: > かわじ、です。 > > # 本質の話ではなく、蛇足です > > >> 例えば config/environment.rb に以下の記述をしてみました。 >> require 'date' >> class Date >> def self.today >> RAILS_ENV == 'production' ? Date.today : Date.new(2009,10,1) >> end >> end >> >> #ただ、これだと production 環境で実行したら「SystemStackError: stack level too deep」 >> #が出てしまいました。 >> #(エラーが出ないように、本当の Date.today をコールするにはどうしたら良いですか?) > > 再定義の場所の話ではなく、単に コードの書き方になりますが、 > > 上記のコードでは RAILS_ENV == 'production' であるときに(現在再定義中の) > Date.today をそのまま呼んでいますので、同じメソッドをまた呼ぶことになり、 > 無限再帰します。 > > やりたいことは > > オリジナルの Date.today と、テスト用に定義した Date.today を使い分ける > > ことなので、いったん「オリジナルの Date.today」を待避させる必要がありま > す。 > > RubyOnRailsでは、こういう時のための Module#alias_method_chain という仕組 > みがあり、上記コードは > > require 'date' > class << Date > def today_with_development > RAILS_ENV == 'production' ? > Date.today_without_development : Date.new(2009,10,1) > end > alias_method_chain :today, :development > end > > と書けます (クラスメソッドなので、class << Date としています)。 > > こうすると、config/environment.rb に定義されていても、意図通りに動作する > と思います。 > > > 今回の話としては、別の解決策のほうがより本質的な解決だと思いますが、 > 上記のような方法があることを知っておくことも、RubyOnRailsでの開発では > 有用になると思います。 > > > -- > ML: rails@r... > 使い方: http://QuickML.com/ > -- ML: rails@r... 使い方: http://QuickML.com/
3330 2009-12-11 04:09 [naopontan@g... ] テスト時や development 環境の時のみシステム時刻を強制したい 3331 2009-12-11 04:27 ┣[fuj@r... ] 3332 2009-12-11 06:43 ┃┗[naopontan@g... ] 3333 2009-12-11 06:48 ┃ ┣[okkez000@g... ] 3335 2009-12-11 06:55 ┃ ┃┣[okkez000@g... ] 3339 2009-12-11 07:22 ┃ ┃┗[naopontan@g... ] 3334 2009-12-11 06:52 ┃ ┣[fuj@r... ] 3338 2009-12-11 07:18 ┃ ┃┗[naopontan@g... ] 3341 2009-12-11 10:08 ┃ ┃ ┗[fuj@r... ] 3342 2009-12-11 10:53 ┃ ┃ ┗[naopontan@g... ] 3336 2009-12-11 07:09 ┃ ┣[shigi@s... ] 3337 2009-12-11 07:13 ┃ ┗[kawaji@g... ] -> 3340 2009-12-11 07:20 ┃ ┗[naopontan@g... ] 3343 2009-12-11 23:39 ┗[zn@m... ]