Kokudoriing

技術系与太話ブログ

IndexedDBをActiveRecord風に使えるライブラリを作ってみた

タイトルまんまです。

ドキュメントやら詳しくはhttp://kokudori.github.io/gavia/まで。

インストールはbower使うと簡単です。

bower install gavia

そもそもIndexedDBはそれはもう非同期非同期した何かなのです。 その上、標準ライブラリはコールバックパターンなので (クライアントサイドJavaScriptに標準でプロミスのようなものがないのでしょうがないんですけども) それはもう簡単にコールバック地獄行きです。死ねます。

コールバック地獄辛すぎ的な話は命令型のコールバック、関数型のプロミス: Node が逸した最大の機会あたりをどぞー。

ちなみに以下のように書けます。 RailsActiveRecordほど上等ではないですが、まぁ、生で使うよりかはよっぽどマシです。

var db = new Gavia('test-db', {
  store: {
    keyPath: 'id',
    autoIncrement: true,
    index: {
      unique: true
    }
  }
});

var test = db.store.create();
test.hoge = 'hogehoge';
test.save().done(function() {
  console.log('save done');
});

db.store.filter(function(record) {
  return record.hoge.length > 5;
}).done(function(results) {
  results.forEach(function(result) {
    console.log(result);
  });
});

プロミスはさっきも述べたとおり、標準ではサポートされてないので、jQueryDeferred使ってます。 なのでjQueryに依存してます。

ちなみに、IndexedDB自体がマイナーなので、ラッパライブラリもあんまりないです。 恐らく最大手のIDBWrapperさんはコールバック形式なので、オレオレライブラリを作るはめになりました。 いや、ホント何故か他のライブラリコールバックばっかりなんですよね。辛くないのかな。

ちなみにGaviaとかいうちょっとオサレな名前ついてます。 由来は広島県の県鳥、アビの英名?学名?的な何かです。 どうでもいいですが、アビは結構見た目怖いです。目とか赤です。ヤバイです。