Author: reebalazs
Date: Tue Dec 25 12:58:20 2007
New Revision: 50073

Modified:
   kukit/kukit.js/branch/ree-service-layer-and-refactoring/   (props changed)
   kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
   kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
   
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
Log:
Create interface for binderiterations, fix up tests.

Modified: 
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js   
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/eventreg.js   
Tue Dec 25 12:58:20 2007
@@ -23,6 +23,12 @@
 
 var _eventClassCounter = 0;
 
+// these together store the plugin resource information, about registered 
events
+// there is two distinct registries, one for the actual events and one
+// for specifying the binding sequence
+var events = kukit.interfaces.get('events', 
kukit.interfaces.PluginMethodDescriptor);
+var bindings = kukit.interfaces.get('bindings', 
kukit.interfaces.PluginMethodDescriptor);
+
 /*
 *
 * class _EventRegistry

Modified: 
kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js
==============================================================================
--- kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js 
(original)
+++ kukit/kukit.js/branch/ree-service-layer-and-refactoring/kukit/interfaces.js 
Tue Dec 25 12:58:20 2007
@@ -218,9 +218,7 @@
 
     this.register = function(config) {
         if (this.config != null) {
-;;;         kukit.E = 'Double registration by [' + providerName + '][';
-;;;         kukit.E += providerVersion; 
-;;;         kukit.E += '] of method [' + this.methodName;
+;;;         kukit.E = 'Double registration of method [' + this.methodName;
 ;;;         kukit.E += '] in plugin interface [' + this.iface.name + ']';
             throw new Error(kukit.E);
         }
@@ -228,15 +226,60 @@
     };
 
     this.finalize = function(loader) {
-        if (! this.config) {
-            return;
-        }
         // Just return the registered value.
         return this.config;
     };
 
 }; /* end PluginMethodDescriptor */
 
+/*
+ * BindIterationDescriptor
+ *
+ * We need this method descriptor because we need to
+ * register the binding of events. This is done by a binding
+ * class and a set of events that bind together on this
+ * class, and a binding iterator that defines how binding will
+ * be called.
+ *
+ * The event names arrive in a namespace format (dash-separated),
+ * formerly we only accepted to register an event set with events
+ * of the same namespace. This restriction is dropped now. Since it
+ * may make sense, it can be put back in form of asserts on the
+ * event names.
+ */
+this.BindIterationDescriptor = function(iface, methodName) {
+
+    this.iface = iface;
+    this.methodName = methodName;
+    this.config = null;
+
+    this.register = function(config) {
+        // This is called on any method descriptors.
+        // Register config to all event names individually.
+        // Take names from the config.
+        for (var i = 0; i < config.names.length; i++) {
+            name = config.names[i];
+            this.iface.getMethodDescriptor(name)._register(config);
+        }
+    };
+
+    this._register = function(config) {
+        if (this.config != null) {
+;;;         kukit.E = 'Double registration of method [' + this.methodName;
+;;;         kukit.E += '] in plugin interface [' + this.iface.name + ']';
+            throw new Error(kukit.E);
+        }
+        this.config = config;
+    };
+
+    this.finalize = function(loader) {
+        // Just return the registered value.
+        return this.config;
+    };
+
+}; /* end BindIterationDescriptor */
+
+
 
 /*
  * Instantiation
@@ -257,6 +300,9 @@
 this.getPlugin = function(name) {
     return _interfaces.get(name, this.PluginMethodDescriptor);
 };
+this.getBindIteration = function(name) {
+    return _interfaces.get(name, this.BindIterationDescriptor);
+};
 
 
 }(); /* END CLOSURE kukit.interfaces */

Modified: 
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
==============================================================================
--- 
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
    (original)
+++ 
kukit/kukit.js/branch/ree-service-layer-and-refactoring/tests/test_interfaces.js
    Tue Dec 25 12:58:20 2007
@@ -380,49 +380,49 @@
         // We have a class, called C.
         var C = function() {};
         // Let's create a TestDummy interface.
-        var iface = this.interfaces.get('dummyevent', 
kukit.interfaces.PluginMethodDescriptor);
+        var events = this.interfaces.get('dummyevent', 
kukit.interfaces.PluginMethodDescriptor);
+        var binditerations = this.interfaces.get('dummybinditerations', 
kukit.interfaces.BindIterationDescriptor);
         // somewhere else, core registers the methods:
-        iface.getMethodDescriptor('click').register({
+        events.getMethodDescriptor('click').register({
             namespace: null,
             name: 'click',
-            defaultMethod: null,
+            defaultMethodName: null,
             parmtypes: [
                 ['preventDefault', 'bool', true],
                 ['allowBubbling', 'bool', false]]});
-        iface.getMethodDescriptor('keydown').register({
+        events.getMethodDescriptor('keydown').register({
             namespace: null,
             name: 'keydown',
-            defaultMethod: null,
+            defaultMethodName: null,
             parmtypes: [
                 ['preventDefault', 'bool', true],
                 ['allowBubbling', 'bool', false]]});
-        /*iface.getMethodDescriptor('click').registerBindIteration({
+        binditerations.getMethodDescriptor('').register({
             namespace: null,
-            names: ['click', 'timeout'],
+            names: ['click', 'keydown'],
             iterName: 'Each',
             binderClass: M,
             bindMethodName: 'bind'});
         //*/
         //
         // somewhere else, extras registers the methods:
-        iface.getMethodDescriptor('timeout').register({
+        events.getMethodDescriptor('timeout').register({
             name: 'timeout',
-            defaultMethod: null,
+            defaultMethodName: null,
             parmtypes: [
                 ['millis', 'int'],
                 ['renew', 'bool', false]]});
         // It needs a bind iterator even though it is a single
         // group.
-        /*iface.getMethodDescriptor('timeout').registerBindIteration({
+        binditerations.getMethodDescriptor('').register({
             namespace: null,
-            names: ['click', 'timeout'],
+            names: ['timeout'],
             iterName: 'Each',
             bindMethodName: 'bind'});
-        */
-
         //
         // Now finalize it.
-        iface.finalize(C);
+        events.finalize(C);
+        binditerations.finalize(C);
         // Create an instance...
         var o = new C();
         // We can call the methods on it,
@@ -457,6 +457,29 @@
             Error);
     };
 
+    this.testBindIterationNoDoubleReg = function() {
+        // No double registration for test plugins.
+        var C = function() {};
+        // Let's create a TestDummy interface.
+        var iface = this.interfaces.get('dummybinditeration', 
kukit.interfaces.BindIterationDescriptor);
+        // somewhere else, core registers the methods:
+        iface.getMethodDescriptor('').register({
+            namespace: null,
+            names: ['click', 'timeout'],
+            iterName: 'Each',
+            binderClass: M,
+            bindMethodName: 'bind'});
+        // But another providing attempt is punished by an Error.
+        this.assertThrows(function() {
+            iface.getMethodDescriptor('').register({
+                namespace: null,
+                names: ['keyDown', 'timeout'],
+                iterName: 'Each',
+                bindMethodName: 'bind'});
+            },
+            Error);
+    };
+
 }; /* end PluginInterfacesTestCase */
 kukit.PluginInterfacesTestCase.prototype = new kukit.InterfacesTestCaseBase();
 
_______________________________________________
Kukit-checkins mailing list
[email protected]
http://codespeak.net/mailman/listinfo/kukit-checkins

Reply via email to