ページ状態管理
lib/page_status.rb
class PageStatus def self.is_open?(page) @closed ||= Variable.find_by_name("ページ状態").value.split(/\r?\n/).inject({}){|h, pair| k,v = pair.split(/:|:/).map(&:strip); h.merge k=>v=="準備中" } rescue {} !@closed[page] end def self.clear_cache @closed = nil end end
テーブル(variables)
+--+----------+------------------------+ |id|name |value | +--+----------+------------------------+ | 5|ページ状態|オンラインストア: 準備中| | | |ブログ: 準備中 | +--+----------+------------------------+
使い方
PageStatus.is_open?("オンラインストア") ==>false
いいたかったのは、injectかわいいよ、ということと、クラス変数の使い方があってるか自信ないよ、ということと、オープン間に合わないよ、ということです。
ちなみに、ここでいうvariablesのようなテーブルをアプリに1個用意しておくと、アプリ全体の設定を保存する場所として重宝しますね。クライアントが自分で管理できるようにするのも簡単になるし。
追記
http://twitter.com/cho45/statuses/804368045
僕にはinjectを愛でる資格はないのかもしれません。ここはmerge!を使うべきだったか…。
ていうかこのコード他にも間違いあったんですよ。Variable.からrescue{}までを丸括弧で囲まなきゃならないとか、そもそも設計がおかしいとか…。コピペして使う人がいるとも思えないので、そのままにしておきますが。