CouchDBのデータはYAMLでつっこめるよ、と思ったら空の配列の表記

CouchDB用のUnitTestをかけるようにしておこうと思って、fixtureもどきを作っているんだけれど。
YAMLJSONはそのまま互換です、と思いきや、YAMLで長さ0の配列ってどうやって表現するんだ、という罠があって試してみた。

>> {:a => 1, :b => 2, :c => 3, :d => [], :e => [1,2,3]}.to_yaml
=> "--- \n:e: \n- 1\n- 2\n- 3\n:c: 3\n:a: 1\n:d: []\n\n:b: 2\n"

ふむ。name: [] でいいんだ。

>> YAML.load({:a => 1, :b => 2, :c => 3, :d => [], :e => [1,2,3]}.to_yaml)[:d]
=> []

Yes, sir.

CouchDBでRuby/RailsのTestUnitを使う

必要なデータは test/fixtures/couchdb/**/*.yml にいれておきます。以下のスクリプトRAILS_ROOT/lib あたりにおいときます。

class CouchFixture
  def self.load(basedir = File.join(RAILS_ROOT, "test/fixtures/couchdb/"))
    Dir.glob("#{basedir}/**/*.yml") do |f|
      # resolve class
      file = f.gsub(/^#{basedir}\//, '').gsub(/\.yml$/, '')
      klass = file.singularize.camelize.constantize
      # load yaml file
      content = YAML.load(ERB.new(File.read(f)).result)
      if content
        content.each do |key, value|
          value.symbolize_keys!
          value[:_id] = key unless value[:_id]
          obj = klass.find(value[:_id]) rescue nil
          obj.destroy if obj
          obj = klass.new(value)
          obj.save!
        end
      end
    end
  end
end

RAILS_ROOT/test/test_helper.rb で fixture :all というところがあるはずなので、こんな感じでCouchFixture.load を追加しておきます。

  # -- they do not yet inherit this setting
  fixtures :all

  # Add more helper methods to be used by all tests here...
  CouchFixture.load
end

なお、ActiveRecord の Fixture との違いは、、、テーブルという概念がないので、DELETE FROM table_name 相当のクリア処理が発行されないことです。データベース管理でなんとかしましょうか、ということで次のエントリ。

作ったものの整理

そのうち正式にWebJourneyのサブプロジェクトとして公開しますが、とりあえずは、、

後者3つは最初のやつに統合すべきなんだろうけど、うまく設計がまとまっていないので外だしです。おそらくレプリケーションとかビューとかそのあたりをどう活かすかによって変わるんだと思います。

http://jchris.mfdz.com/posts/122 とか参考になりそう。考えていることがひじょーに似ている。

が、まずは自分のアプリでうまく使えるモデルで実装して、それを汎化する方法でいこうかと。。

MacBookのスロットローディングドライブの問題判別...?

開発中は、特にCPUリソースを食わないので、自宅にあるCDやDVDなどのコンテンツをひたすらリッピングしてiPhoneにつっこむ作業を平行しております。特に今はデザイン
作業というかjQueryCSSをいじくり倒しているので右脳を活発にするために、音とか映像とかをバックグラウンドで常に流し続け...

おかげでiPhone 3Gのデータ領域が見事に14GBに到達して、もうアドレス帳も追加がほぼ不可能なぐらいまで使い果たしています。

それはともかく、せっかくの機会なのであらゆるCD/DVDをHDDの中に取り込もうとしていますが、少しだけ解せない状況が生まれています。

  • DVD は普通に読み込むことができる
  • CD のうち、Macのドライブで読み込むことができずに、マウントが失敗して勝手に排出されるものがある
  • そのCDはDell製のマシンのWindows上では読み込み,マウントすることができる
  • すべてのCDがMacで読み込めないわけではなく、一部のCDだけである。

DVDが読めて、CDが読めない、という話はなんとなくわかるのですが、CDのなかでも読めるのと読めないのがあって困ってしまいます。もしかしたらそれぞれのCDのTOCの位置の問題?っていう話かもしれません。これは修理にだすべき症状なんですかね。

とりあえずは、USB外付けのCD/DVDドライブをMacBookにくっつけた場合は、問題のあるCDでもマウントできているので問題ないんですが。

jQuery UI がすばらしい。

jQuery UI の秀逸な点。Theme Roller があること。CSSもSimpleだし、すごくいいんじゃないの、これ。

こんな感じなんだけれど、ロゴがういているので、もう少しSimpleなものに作り直そうかな。。。