summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--install/ui/src/freeipa/_base/Builder.js1
-rw-r--r--install/ui/src/freeipa/_base/construct.js20
-rw-r--r--install/ui/src/freeipa/ipa.js17
-rw-r--r--install/ui/test/build_tests.js3
4 files changed, 39 insertions, 2 deletions
diff --git a/install/ui/src/freeipa/_base/Builder.js b/install/ui/src/freeipa/_base/Builder.js
index 0eb76c4a..d01f86f1 100644
--- a/install/ui/src/freeipa/_base/Builder.js
+++ b/install/ui/src/freeipa/_base/Builder.js
@@ -84,6 +84,7 @@ define(['dojo/_base/declare',
var f,c;
if (spec === undefined || spec === null) return null;
+ if (!construct.is_spec(spec)) return spec;
context = context || {};
diff --git a/install/ui/src/freeipa/_base/construct.js b/install/ui/src/freeipa/_base/construct.js
index bc017ad6..e44c66b1 100644
--- a/install/ui/src/freeipa/_base/construct.js
+++ b/install/ui/src/freeipa/_base/construct.js
@@ -34,12 +34,28 @@ define(['dojo/_base/declare',
*/
is_ctor: function(obj) {
- // TODO: Find better method. Check by extend might not be very
- // reliable.
return typeof obj === 'function' && typeof obj.extend === 'function';
},
/**
+ * Finds out if object is a spec object.
+ *
+ * Object is not a spec object when any of following applies:
+ * * has __fw_obj === true
+ * * has isInstanceOf function - basically tells if it's a instance of
+ * dojo-based class
+ *
+ */
+ is_spec: function(obj) {
+ var ret = false;
+ if (typeof obj === 'object') {
+ ret = obj.__fw_obj === true ||
+ typeof obj.isInstanceOf === 'function';
+ }
+ return !ret;
+ },
+
+ /**
* Creates copy of construction specification
*
* It makes sure that pre_ops, post_ops and spec are new Arrays/Object
diff --git a/install/ui/src/freeipa/ipa.js b/install/ui/src/freeipa/ipa.js
index e252a782..c8bf4dae 100644
--- a/install/ui/src/freeipa/ipa.js
+++ b/install/ui/src/freeipa/ipa.js
@@ -293,9 +293,26 @@ var IPA = function() {
}
};
+ that.obj_cls = function() {};
+ that.obj_cls.prototype.__fw_obj = true;
+
return that;
}();
+/**
+ * Basic object
+ *
+ * Framework objects created by factories should use this instead of {} when
+ * creating base objects. As an alternative they can just set __fw_obj
+ * property.
+ *
+ * __fw_obj property serves for telling the framework that it's instantiated
+ * object and not an object specification (spec).
+ */
+IPA.object = function() {
+ return new IPA.obj_cls();
+};
+
IPA.get_credentials = function() {
var status;
diff --git a/install/ui/test/build_tests.js b/install/ui/test/build_tests.js
index fec8717b..603f41fa 100644
--- a/install/ui/test/build_tests.js
+++ b/install/ui/test/build_tests.js
@@ -59,6 +59,7 @@ test('Testing builder', function() {
var o2 = b2.build({});
var o21 = b2.build({ foo: 'baz'});
+ var o22 = b2.build(o21);
var r1 = { foo: 'bar' };
var r11 = { foo: 'baz' };
@@ -71,6 +72,8 @@ test('Testing builder', function() {
deepEqual(o2, r2, 'Constructor, default');
deepEqual(o21, r21, 'Constructor, spec use');
+ strictEqual(o21, o22, 'Don\'t build built object');
+
});
test('Testing Spec_mod', function() {