ページ状態管理

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{}までを丸括弧で囲まなきゃならないとか、そもそも設計がおかしいとか…。コピペして使う人がいるとも思えないので、そのままにしておきますが。