デモ用環境で使う想定で、以下のようにして使う Repository を切り替えてみた。
(前提となるコードは Nuxt.js で Repository を使う を参照)
repositories/mocks/PostRepository.js
const posts = [
{
// 省略
},
]
export default $axios => {
return {
async all() {
return await new Promise(resolve => resolve(posts))
},
build() {
return {
id: null,
// 省略
};
},
async find(id) {
id = parseInt(id, 10)
const post = posts.find(x => x.id === id)
return await new Promise(resolve => resolve(post))
// 見つからない場合は考慮しない
},
async create(post) {
post.id = posts.reduce((acc, x) => (x.id > acc ? x.id : acc), 0) + 1
posts.unshift(post)
return await new Promise(resolve => resolve(post))
// validation error は考慮しない
},
async update(post) {
const index = posts.findIndex((x) => x.id === post.id);
posts.splice(index, 1, post);
return await new Promise((resolve) => resolve(post));
// validation error は考慮しない
},
async destroy(id) {
const index = posts.findIndex((x) => x.id === id);
posts.splice(index, 1);
await new Promise((resolve) => resolve());
// validation error は考慮しない
},
}
}
plugins/mock_repositories.js
// plugins/repositories.js とは import 元が違うだけ
import PostRepository from '@/repositories/mocks/PostRepository'
export default ({ $axios }, inject) => {
const posts = PostRepository($axios)
const repositories = { posts }
inject('repositories', repositories)
}
nuxt.config.js
plugins: [
process.env.HOGE
? '@/plugins/mock_repositories'
: '@/plugins/repositories',
],