|
2 | 2 |
|
3 | 3 | import inflect from "inflect"; |
4 | 4 |
|
| 5 | +import { JSONSerializer } from "./serializers"; |
5 | 6 | import Route from "./route"; |
6 | 7 | import { getOwner, setOwner } from "./containment"; |
7 | 8 |
|
@@ -208,15 +209,56 @@ class Router { |
208 | 209 | */ |
209 | 210 | _loadControllers() { |
210 | 211 | const controllerLoader = getOwner(this).lookup("loader:controller"); |
| 212 | + const modelLoader = getOwner(this).lookup("loader:model"); |
211 | 213 | const { modules: controllers } = controllerLoader; |
| 214 | + const { modules: models } = modelLoader; |
212 | 215 |
|
213 | 216 | Object.keys(controllers).forEach(controller => { |
214 | 217 | const Klass = controllers[controller]; |
215 | 218 | const instance = new Klass(getOwner(this)); |
216 | 219 | const instanceName = inflect.singularize(instance.name); |
| 220 | + const registry = getOwner(this); |
217 | 221 |
|
218 | | - getOwner(this).register(`controller:${instanceName}`, instance); |
| 222 | + registry.register(`controller:${instanceName}`, instance); |
219 | 223 | }); |
| 224 | + |
| 225 | + Object.keys(models).forEach(model => { |
| 226 | + const instanceName = inflect.singularize(model); |
| 227 | + const registry = getOwner(this); |
| 228 | + const serializer = this._lookupSerializer(instanceName); |
| 229 | + |
| 230 | + registry.register(`serializer:${instanceName}`, serializer); |
| 231 | + }); |
| 232 | + } |
| 233 | + |
| 234 | + /** |
| 235 | + * Attempts to lookup a serializer by 'name' in the module loader. If one exists |
| 236 | + * it is instantiated and registered by 'name'. If one does not exist the |
| 237 | + * default (RestSerializer at the moment) is instantiated and registered. |
| 238 | + * |
| 239 | + * @method _lookupSerializer |
| 240 | + * @private |
| 241 | + * @param {String} name lowercase singular lookup name (e.g. "user") |
| 242 | + * @return {Object} serializer instance |
| 243 | + */ |
| 244 | + _lookupSerializer(name) { |
| 245 | + const serializerLoader = getOwner(this).lookup("loader:serializer"); |
| 246 | + |
| 247 | + if (!serializerLoader) { |
| 248 | + return new JSONSerializer(); |
| 249 | + } |
| 250 | + |
| 251 | + const { modules: serializers } = serializerLoader; |
| 252 | + const Serializer = serializers[name]; |
| 253 | + let serializer; |
| 254 | + |
| 255 | + if (Serializer) { |
| 256 | + serializer = new Serializer(); |
| 257 | + } else { |
| 258 | + serializer = new JSONSerializer(); |
| 259 | + } |
| 260 | + |
| 261 | + return serializer; |
220 | 262 | } |
221 | 263 |
|
222 | 264 | /** |
|
0 commit comments