SlideShare a Scribd company logo
object-formatter
@airtoxin
object-formatter
オブジェクトの整形がスキーマに基づいて行えるラ
イブラリ。
この中のこれのここの値を取ってきてこっちのあそ
このオブジェクトの値として保持して…みたいなの
をネストしたオブジェクトとかに対してもundefined
accessを気にせず簡単に出来るようにしたかった。
バベルしたかった。
インストール
npm i --save object-formatter
使い方
var ObjectFormat = require('object-formatter');
var of = new ObjectFormat();
of.format(schema, object);
スキーマ定義
変換後のオブジェクトの形式を指定す
る。
keyはそのまま変換後のオブジェクトの
フィールドキーとなる。
valueは変換後の値をaccessorで定義。
var schema = {
raw: 'raw value',
foo: '@a',
bar: '@b.c.d="ipsum"',
baz: {
raw: 111,
a: '@c.cb',
b: '@c.c.c',
c: [ '@d', {
hoge: '@aa',
fuga: '@bb="b default"'
} ],
d: [ '@d', '@cc="c default"' ]
}
};
accessor
そのフィールドに入るべき値を指定する為の
文字列/配列
Simple accessorとCollection accessorの2種
類が存在。Simple accessorは単純なパス指
定をしているだけ。Collection accessorはコ
レクションに対して簡易map処理を行う。
raw value
accessor以外の値がvalueに存在した
場合、その値は処理されずにそのまま
変換後のオブジェクトに代入される。
var object = {
a: 1
};
var schema = {
hoge: 'a',
fuga: 100
};
of.format(schema, object);
// ->
// {
// hoge: 'a',
// fuga: 100
// }
Simple accessor
@から始まる文字列はSimple accessor
として認識され、@以降の文字列が
valueに入るべき値へのパスを示して
いる。
var object = {
a: 1,
b: { c: 111 }
};
var schema = {
hoge: '@a',
fuga: '@b.c'
};
of.format(schema, object);
// ->
// {
// hoge: 1,
// fuga: 111
// }
Default
accessorが示すパスの値が存在しなかった
場合のデフォ値を指定することができる。
accessorのパス指定の後に=を続け、その
後デフォ値としたい物を指定する。
内部的にevalしているので何とかしたい。
var object = {};
var schema = {
hoge: '@a=1',
fuga: '@a.b.c="not found"'
};
of.format(schema, object);
// ->
// {
// hoge: 1,
// fuga: 'not found'
// }
Collection accessor
変換前のオブジェクトがコレクションを持っ
ている時に、その中の値を処理したい場合に
使用する。簡易map処理。
配列の0番目にコレクションまでのパス、1番
目にスキーマを書くと、コレクション内全て
のオブジェクトに対してそのスキーマでフォー
マットしたオブジェクトの配列が得られる。
var object = {
c: [{a:1}, {a:2}, {b:3}]
};
var schema = {
hoge: ['@c', {fuga: '@a'}]
};
of.format(schema, object);
// ->
// {
// hoge: [
// { fuga: 1 },
// { fuga: 2 },
// { fuga: undefined }
// ]
// }
使用感
自前のBandit APIで、APIの返却するJSONの型
を保証したかった。
型の保証だけだとJSON Schemaはでか過ぎて
大分つらい→簡単に指定出来るようになった。
オブジェクトのインターフェース保証が安全に
行える所がだいぶ気に入っている。
DSL
ドメイン固有言語。特定の操作に特化した言語。特化した
操作は行い易いが、DSL自体の学習コストがかかったり、
DSLでの操作を見てもやっていることが自明でなくなる。
あまり好きではなかったが、今回object-formatterのス
キーマ定義はDSLになっている。

→他のスキーマ定義言語があまりいい感じに使えなかった
ので用意した。もっといい感じのが有るならそれに乗っか
りたい。
DL数
みんなつかってくれ!
おわり

More Related Content

Viewers also liked

Sociala medier för barnmorskor
Sociala medier för barnmorskorSociala medier för barnmorskor
Sociala medier för barnmorskor
Anna Olsson
 
W5
W5W5
Stan oana 2012-13-es 3
Stan oana 2012-13-es 3Stan oana 2012-13-es 3
Stan oana 2012-13-es 3Oana Stan
 
W5
W5W5
Calendario 2013
Calendario 2013Calendario 2013
Calendario 2013karoldzn
 
ピコもんのログ収集基板について
ピコもんのログ収集基板についてピコもんのログ収集基板について
ピコもんのログ収集基板について
airtoxin Ishii
 
最高のツイッタークライアントを求めて
最高のツイッタークライアントを求めて最高のツイッタークライアントを求めて
最高のツイッタークライアントを求めて
airtoxin Ishii
 
pysqldf
pysqldfpysqldf
Dharm project big bazaar
Dharm project big bazaarDharm project big bazaar
Dharm project big bazaar
Dharmendra Kumar
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii
 
Changing trends of fmcg report (dharm project)
Changing trends of fmcg report (dharm project)Changing trends of fmcg report (dharm project)
Changing trends of fmcg report (dharm project)
Dharmendra Kumar
 
sqldf for pandas
sqldf for pandassqldf for pandas
sqldf for pandas
airtoxin Ishii
 

Viewers also liked (18)

Sociala medier för barnmorskor
Sociala medier för barnmorskorSociala medier för barnmorskor
Sociala medier för barnmorskor
 
W5
W5W5
W5
 
Stan oana 2012-13-es 3
Stan oana 2012-13-es 3Stan oana 2012-13-es 3
Stan oana 2012-13-es 3
 
W5
W5W5
W5
 
Envir
EnvirEnvir
Envir
 
Oxy lite
Oxy liteOxy lite
Oxy lite
 
Calendario 2013
Calendario 2013Calendario 2013
Calendario 2013
 
ピコもんのログ収集基板について
ピコもんのログ収集基板についてピコもんのログ収集基板について
ピコもんのログ収集基板について
 
Reaksi Asam dan basa
Reaksi Asam dan basaReaksi Asam dan basa
Reaksi Asam dan basa
 
Coca cola dharm project
Coca cola dharm projectCoca cola dharm project
Coca cola dharm project
 
最高のツイッタークライアントを求めて
最高のツイッタークライアントを求めて最高のツイッタークライアントを求めて
最高のツイッタークライアントを求めて
 
Dharm project big bazaar
Dharm project big bazaarDharm project big bazaar
Dharm project big bazaar
 
pysqldf
pysqldfpysqldf
pysqldf
 
Dharm project big bazaar
Dharm project big bazaarDharm project big bazaar
Dharm project big bazaar
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
Presentazione Schopenhauer
Presentazione Schopenhauer Presentazione Schopenhauer
Presentazione Schopenhauer
 
Changing trends of fmcg report (dharm project)
Changing trends of fmcg report (dharm project)Changing trends of fmcg report (dharm project)
Changing trends of fmcg report (dharm project)
 
sqldf for pandas
sqldf for pandassqldf for pandas
sqldf for pandas
 

object-formatter