実装作業ログ

週末は何やかやで作業できず。
ようやく作業再開な次第で。
試験はデキてたんで、ココに書いてある通りの実装をした後に試験。試験マターな問題としていくつかエラーが出たので修正点も含め、ロギングを。

デフォルト値の確認での勘違い

Configuration クラスで setting 使ってデフォ値を設定している箇所は文字列ではなく、クラスに合わせたリテラル値を指定するよう修正している。以下のような感じ。

class Configuration < ConfigManager
  setting :blog_name, :string, "Name of the blog", "MyBlog"
  setting :default_allow_pings, :bool, "Allow trackbacks by default", false
  setting :default_allow_comments, :bool, "Allow comments by default", false
  setting :sp_global, :bool, "Use SpamProtection functionality", false
  setting :sp_article_auto_close, :integer, "Auto-close ability to comment/track
back articles after X days", 300
  setting :sp_url_limit, :integer, "Limit for URLs in comments and trackbacks", 
10
  setting :text_filter, :string, "Default HTML transformation style", "textile"
end

def config
  $config ||= Configuration.new
end

で、試験でのデフォ値である事を確認する試験で以下のようにしていた (一部のみ抜粋)

  def normalize_value(line)
    case (Configuration.fields[line.name.to_s].ruby_type rescue :string)
    when :bool
      ( line.value.to_i != 0 ) ? true : false
    when :integer
      line.value.to_i
    else
      line.value
    end
  end

  def assert_default
    Configuration.fields.each do |k, v|
      assert_equal @cm[k], normalize_value(v)
    end
  end

  def test_initialize
    assert_default
  end

assert_default の each なループん中の v って struct ConfigManager::Item のオブジェクトなんだよねぇ。何考えてるんだ、とゆー事で以下のように修正。

  def assert_default
    Configuration.fields.each do |k, v|
      assert_equal @cm[k], v.value
    end
  end

ナチュラル、では済まされないボケっぷりが凄い。

ActiveSupport を勘違いしている件

どうも Hash のキーが文字列でも Symbol でも OK なソレを勘違いしている。つっても何をどう勘違いしているか、をきちんと説明できないアタリが微妙なんですが。
以前のエントリでも実装例を紹介した記憶があるんですが、以下のような試験を書いた。

  def test_default
    array = [:blog_name, :default_allow_pings, :default_allow_comments, 
      :sp_global, :sp_article_auto_close, :sp_url_limit, :text_filter]
    array.each do |a|
      assert_not_nil Configuration.fields[a]
    end
    assert_equal array.size, Configuration.fields.size
  end

script/console で確認すれば良いのにしていない模様。でもどっかで Symbol で参照していたようにも思うんだけれど ... (Configuration.fields[:blog_name] みたいな感じ)
not_nil でなければならないハズなんですが、nil です、と叱られる。

もしや、と思い以下のように修正すると通りました。

  def test_default
    array = [:blog_name, :default_allow_pings, :default_allow_comments, 
      :sp_global, :sp_article_auto_close, :sp_url_limit, :text_filter]
    array.each do |a|
      assert_not_nil Configuration.fields[a.to_s]
    end
    assert_equal array.size, Configuration.fields.size
  end

このあたりは少々理解不足の感あり。きちんと整理しとく必要あり。

UT は通ったので次は機能試験着手か。基本的には system_id の盛り込みだけ、のはず。

追記

んじゃ最初から文字列にしときゃ良かったぢゃんか (array)、とゆーツッコミはご勘弁願います orz

追記 2

typo も parabola も実装と試験は完了。機能試験が双方で微妙に違うのもナニ。(何
本番環境にぶち込んで動作の確認取ったら今日の仕事は終了しちゃれ(を