Builders: allow pre_ops and post_ops in build overrides

https://fedorahosted.org/freeipa/ticket/3235
This commit is contained in:
Petr Vobornik 2013-04-17 19:18:24 +02:00
parent f188fcdfa7
commit 2cf0542b0d

View File

@ -51,10 +51,24 @@ define(['dojo/_base/declare',
ctor: null,
post_ops: null,
/**
* Array of spec modifiers.
*
* Spec modifier is a function which is called before build.
* takes params: spec, context
* returns spec
*/
pre_ops: null,
/**
* Array of object modifiers.
*
* Object modifier is a function which is after build.
* takes params: built object, spec, context
* returns object
*/
post_ops: null,
/**
* Controls what builder do when spec is a string. Possible values:
* * 'type'
@ -104,16 +118,19 @@ define(['dojo/_base/declare',
*/
build: function(spec, context, overrides) {
var f,c;
var f,c, pre, post;
if (spec === undefined || spec === null) return null;
if (!construct.is_spec(spec)) return spec;
context = context || {};
// save
if (overrides) {
f = this.factory;
c = this.ctor;
pre = this.pre_ops;
post = this.post_ops;
if (typeof overrides === 'function') {
if (construct.is_ctor(overrides)) {
overrides = { $ctor: overrides };
@ -123,8 +140,11 @@ define(['dojo/_base/declare',
}
this.factory = overrides.$factory;
this.ctor = overrides.$ctor;
if (overrides.$pre_ops) this.pre_ops = overrides.$pre_ops;
if (overrides.$post_ops) this.post_ops = overrides.$post_ops;
}
// build
var objects;
if (lang.isArray(spec)) {
objects = [];
@ -136,9 +156,12 @@ define(['dojo/_base/declare',
objects = this._build(spec, context);
}
// restore
if (overrides) {
this.factory = f;
this.ctor = c;
this.pre_ops = pre;
this.post_ops = post;
}
return objects;