summaryrefslogtreecommitdiffstats
path: root/install/ui
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2013-04-11 16:42:11 +0200
committerPetr Vobornik <pvoborni@redhat.com>2013-05-06 16:22:24 +0200
commit0dc4b133fb0795b9c55f8a9fc95b55bc4df7ebf2 (patch)
treedc2d84162fa70ffff2b5ae4eed0b2f1896faf2a8 /install/ui
parent9dc8e26b735c7ad6b9ed2277a95c8745edfc7f40 (diff)
downloadfreeipa-0dc4b133fb0795b9c55f8a9fc95b55bc4df7ebf2.tar.gz
freeipa-0dc4b133fb0795b9c55f8a9fc95b55bc4df7ebf2.tar.xz
freeipa-0dc4b133fb0795b9c55f8a9fc95b55bc4df7ebf2.zip
Builder: return object when it's already built
https://fedorahosted.org/freeipa/ticket/3235
Diffstat (limited to 'install/ui')
-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 0eb76c4a7..d01f86f17 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 bc017ad66..e44c66b1e 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 e252a782d..c8bf4daee 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 fec8717b2..603f41fab 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() {