describe('sakuraCrowd.jsonId.refToObj', function() { | |
it("参照オブジェクトを参照先オブジェクトに変換する", function() { | |
var target = [ | |
{"id":"id1", "value":10}, | |
{"$ref":"id1"} | |
]; | |
sakuraCrowd.jsonId.refToObj(target); | |
expect(target.length).toEqual(2); | |
expect(target[0]).toBe(target[1]); | |
}); | |
it("循環参照を検出したら該当する JsonPath を返して警告する", function() { | |
var target = [ | |
{"id":"id1", "value":10, "other":{"$ref":"id2"}}, | |
{"id":"id2", "other":{"$ref":"id1"}} | |
]; | |
var path = "$[0].other.other"; | |
expect(sakuraCrowd.jsonId.refToObj.bind(null, target)).toThrow("循環参照です。" + path); | |
}); | |
}); | |
describe('sakuraCrowd.jsonId.objToRef', function() { | |
it("参照可能オブジェクトを参照オブジェクトに変換する(infoあり)", function() { | |
var target = [ | |
{"$ref":"id1"}, | |
{"id":"id1", "value":10} | |
]; | |
var target2 = [ | |
{"$ref":"id1"}, | |
{"id":"id1", "value":10} | |
]; | |
var expectedInfo = { | |
"root":target, | |
"table":{ | |
"id1":"$[1]" | |
} | |
}; | |
info = sakuraCrowd.jsonId.refToObj(target); | |
sakuraCrowd.jsonId.objToRef(target, info); | |
expect(target).toEqual(target2); | |
expect(info.table).toEqual(expectedInfo.table); | |
expect(info.root).toBe(expectedInfo.root); | |
}); | |
it("参照可能オブジェクトを参照オブジェクトに変換する(infoなし)", function() { | |
// 参照オブジェクトにするときに、 ID に対応した JSONPath の情報がなければ、 | |
// 最初に見つけた参照可能オブジェクトを定義として残します。それ以降は、参照オブジェクトに置換します。 | |
var target = [ | |
{"$ref":"id1"}, | |
{"id":"id1", "value":10} | |
]; | |
var target2 = [ | |
{"id":"id1", "value":10}, | |
{"$ref":"id1"} | |
]; | |
info = sakuraCrowd.jsonId.refToObj(target); | |
sakuraCrowd.jsonId.objToRef(target); | |
expect(target).toEqual(target2); | |
}); | |
}); |
JSON のオブジェクトを ID でリンクする(2) - SakuraCrowd’s blog の続きです。
詳しくは上記の gist のコメントに書きました。
前回は参照→オブジェクトへの変換だけでしたが、逆の変換の機能も追加しました。
参照とオブジェクトが混ざった状態から、オブジェクトだけに置換してしまうので、その後、どれがもともとオブジェクトだったのかわかりません。
そのため、変換の結果でそれを記録しておき、逆変換のときに利用します。
ない場合は、最初にみつけたオブジェクトの位置以外を参照に置き換えます。
git 苦手だったけどちゃんとできたよ(`・ω・´)
subversion も使いこなしてたってわけではありません。
しかし git はもっとわからなかったしやってませんでした。
そんなでしたが、いい機会だしとやってみると以外に簡単にやれました。
tortoiseGIT っていうコンテキストメニュー拡張のソフトを使いました。
バージョン管理したいファイルの置いてあるフォルダを選んで、「Git ここにリポジトリを作成」を選ぶ。
管理したいファイルを選択して Git > 追加 メニューで追加する。
あとはコミットすればOK。
ついテンパったりめんどくなるとコピーして日付つけて「どきっ!コピーだらけの開発フォルダ///」になってしまうのですが、なるべく git とかで管理しようといつも思っています。
jasmine-node が動かないヽ(`Д´)ノウワァァァン!!
以前に、 npm install -g jasmine-node でちゃちゃちゃっとインストールしておいて、以前はたしかコマンドプロンプトから jasmine-node でいけたはずなのに、「cannot find module」とか「ファイルとして認識されません」とかでちゃった(∀`*ゞ)テヘッ
なんか、いじっちゃったかなー、って環境変数とか確認してたけど、よくわからないまま3時間経過ヽ(`Д´)ノウワァァァン!!
自分の中ではこういう問題を「環境系バグ('∀`)」と呼び恐れています。
環境様を怒らせたらもう何がなんだかわからないバグがいっぱいでて(゚∀゚)アヒャヒャヒャヒャヒャヒャとなってしまうのですよ。
怖いですね(´・ω・`)
そんなときは思い切って再インストールすればいいんだよ!って思って node.js はしてみたんだけど、 npm のほうは残ってしまいました。
そこでたまたま見つけた node.js メニューの node.js command prompt を起動してみました。
Visual Studio の command prompt みたいに環境変数をちょこちょこと追加したコマンドプロンプトでした。
これで jasmine-node と実行するとちゃんと認識できたー(∩´∀`)∩ワーイ
next ('∀`)'s hint
ID で JSON のオブジェクトをリンクさせる機能は sakuraCrowd.jsonId という名前で作成したので、これを使う上位の関数 loadTmx(仮)を作ろうと思います。
loadTmx は node で動くので jasmine-node を動かそうといろいろやってたのです。
おおざっぱにいうと tmx を読み込んで、オブジェクトレイヤーのオブジェクトに jsonId を適用します。他にそのオブジェクトを拡張するのですが、それはまた今度書こうと思います。
コメント
コメントを投稿