屈折形のカスタマイズ
Mirageは、いくつかの規約にインフレクタを利用しています。インフレクタとは、単語の単数形と複数形を変換する役割を担うオブジェクトです。
例えば、User
モデルとGETショートハンドを定義するとします。
createServer({
models: {
user: Model,
},
routes() {
this.get("/users/:id")
},
})
Mirageは、インフレクタを使用して「users」が「user」の複数形であることを認識します。そのため、user
モデル定義から自動的にschema.users.all()
コレクションを作成し、/users/:id
ショートハンドを見て、単一のuser
モデルインスタンスを返す必要があることを認識します。
一貫性のある命名規則を使用することで、Mirageはモックサーバーの接続に必要な定型コードを大幅に削減できますが、ドメインで使用される屈折規則をカスタマイズする必要がある場合があります。
例えば、アプリケーションにHeadOfState
モデルがあり、システムの他の場所では「head-of-state」の複数形を「heads-of-state」として扱っている場合を考えてみましょう。
サーバーをこのように設定した場合
createServer({
models: {
headOfState: Model,
},
routes() {
this.get("/heads-of-state/:id")
},
})
Mirageは期待通りに動作しません。これは、Mirageのインフレクタがこの特別なケースを知らないためです。デフォルトでは、「head-of-state」の複数形は「head-of-states」になります。
server.inflector.pluralize
メソッドを呼び出すことで確認できます。
let server = createServer({
models: {
headOfState: Model,
},
})
server.inflector.pluralize("head-of-state") // head-of-states
これを修正するには、独自の屈折規則を追加する必要があります。Mirageは、屈折のためにinflected
パッケージを使用しており、次のようにカスタマイズできます。
import { inflections } from "inflected"
import { createServer, Model } from "miragejs"
inflections("en", function (inflect) {
inflect.irregular("head-of-state", "heads-of-state")
})
createServer({
headOfState: Model,
routes() {
this.get("/heads-of-state/:id")
},
})
Mirageサーバーをnew
する前に、屈折のカスタマイズコードを実行してください。
複数形化規則が有効になったことを確認します。
server.inflector.pluralize("head-of-state") // heads-of-state
これで、MirageのすべてのショートハンドとORM規約が期待通りに動作するはずです。
Inflectedパッケージを使用すると、複数形、単数形、不規則な単語、不可算名詞をカスタマイズできます。
inflections('en', function(inflect) {
inflect.plural(/^(ox)$/i, '$1$2en');
inflect.singular /^(ox)en/i, '$1');
inflect.irregular('octopus', 'octopi');
inflect.uncountable('equipment', 'snow');
});
詳細が必要な場合は、屈折のカスタマイズに関するドキュメントを参照してください。
完全に別のライブラリを使用するか、またはpluralize
メソッドとsingularize
メソッドをMirageサーバーにinflector
設定オプションとして渡すことで、独自のインフレクター実装を使用することもできます。
createServer({
inflector: {
pluralize,
singularize,
},
})