[limb-svn] r5812 - in 3.x/trunk/limb/core: src tests/cases

svn at limb-project.com svn at limb-project.com
Sat May 5 15:06:29 MSD 2007


Author: pachanga
Date: 2007-05-05 15:06:29 +0400 (Sat, 05 May 2007)
New Revision: 5812
URL: http://fisheye.limb-project.com/changelog/limb/?cs=5812

Modified:
   3.x/trunk/limb/core/src/lmbMixable.class.php
   3.x/trunk/limb/core/src/lmbMixin.class.php
   3.x/trunk/limb/core/tests/cases/lmbMixableTest.class.php
Log:
-- lmbMixable doesn't extend lmbObject anymore, since we have troubles with overriding lmbObject :: __call() method
-- lmbMixable :: get($name) added, it returns lmbMixable variable value(dirty hack, but we have no friends support in PHP)

Modified: 3.x/trunk/limb/core/src/lmbMixable.class.php
===================================================================
--- 3.x/trunk/limb/core/src/lmbMixable.class.php	2007-05-05 10:36:36 UTC (rev 5811)
+++ 3.x/trunk/limb/core/src/lmbMixable.class.php	2007-05-05 11:06:29 UTC (rev 5812)
@@ -10,9 +10,7 @@
  * @package    core
  */
 
-lmb_require('limb/core/src/lmbObject.class.php');
-
-class lmbMixable extends lmbObject
+class lmbMixable
 {
   protected $mixins = array();
   protected $mixins_loaded = false;
@@ -35,6 +33,12 @@
     return call_user_func_array(array($this->mixins_signatures[$method], $method), $args);
   }
 
+  function get($name)
+  {
+    if(isset($this->$name))
+      return $this->$name;
+  }
+
   protected function _ensureSignatures()
   {
     if($this->mixins_loaded)
@@ -45,14 +49,14 @@
       if(is_object($mixin))
       {
         $obj = $mixin;
-        $obj->setOwner($this);
         $class = get_class($mixin);
       }
       else
       {
-        $obj = new $mixin($this);
+        $obj = new $mixin();
         $class = $mixin;
       }
+      $obj->setOwner($this);
 
       foreach(get_class_methods($class) as $method)
         $this->mixins_signatures[$method] = $obj;

Modified: 3.x/trunk/limb/core/src/lmbMixin.class.php
===================================================================
--- 3.x/trunk/limb/core/src/lmbMixin.class.php	2007-05-05 10:36:36 UTC (rev 5811)
+++ 3.x/trunk/limb/core/src/lmbMixin.class.php	2007-05-05 11:06:29 UTC (rev 5812)
@@ -14,11 +14,6 @@
 {
   protected $owner;
 
-  function __construct($owner = null)
-  {
-    $this->owner = $owner;
-  }
-
   function setOwner($owner)
   {
     $this->owner = $owner;

Modified: 3.x/trunk/limb/core/tests/cases/lmbMixableTest.class.php
===================================================================
--- 3.x/trunk/limb/core/tests/cases/lmbMixableTest.class.php	2007-05-05 10:36:36 UTC (rev 5811)
+++ 3.x/trunk/limb/core/tests/cases/lmbMixableTest.class.php	2007-05-05 11:06:29 UTC (rev 5812)
@@ -12,7 +12,7 @@
 lmb_require('limb/core/src/lmbMixable.class.php');
 lmb_require('limb/core/src/lmbMixin.class.php');
 
-class FooMixin extends lmbMixin
+class MixinFoo extends lmbMixin
 {
   function foo()
   {
@@ -20,7 +20,7 @@
   }
 }
 
-class BarMixin extends lmbMixin
+class MixinBar extends lmbMixin
 {
   function bar()
   {
@@ -28,7 +28,7 @@
   }
 }
 
-class OwnerCallingMixin extends lmbMixin
+class MixingCallingOwnerMethod extends lmbMixin
 {
   function ownerMy()
   {
@@ -36,8 +36,16 @@
   }
 }
 
-class FooOverridingMixin extends lmbMixin
+class MixinCallingOwnerVar extends lmbMixin
 {
+  function ownerVar()
+  {
+    return $this->owner->get('var');
+  }
+}
+
+class MixinOverridinFoo extends lmbMixin
+{
   function foo()
   {
     return 'overriden foo';
@@ -46,6 +54,8 @@
 
 class MixableTestVersion extends lmbMixable
 {
+  protected $var = 'var';
+
   function __construct($mixins)
   {
     $this->mixins = $mixins;
@@ -62,8 +72,8 @@
   function testMixinObjects()
   {
     $mixed = new lmbMixable();
-    $mixed->mixin(new FooMixin());
-    $mixed->mixin(new BarMixin());
+    $mixed->mixin(new MixinFoo());
+    $mixed->mixin(new MixinBar());
     $this->assertEqual($mixed->foo(), 'foo');
     $this->assertEqual($mixed->bar(), 'bar');
   }
@@ -71,15 +81,15 @@
   function testMixinClasses()
   {
     $mixed = new lmbMixable();
-    $mixed->mixin('FooMixin');
-    $mixed->mixin('BarMixin');
+    $mixed->mixin('MixinFoo');
+    $mixed->mixin('MixinBar');
     $this->assertEqual($mixed->foo(), 'foo');
     $this->assertEqual($mixed->bar(), 'bar');
   }
 
   function testOwnerMethodInvokation()
   {
-    $mixed = new MixableTestVersion(array('FooMixin', 'BarMixin'));
+    $mixed = new MixableTestVersion(array('MixinFoo', 'MixinBar'));
     $this->assertEqual($mixed->my(), 'my'); //native method of mixable
     $this->assertEqual($mixed->foo(), 'foo');
     $this->assertEqual($mixed->bar(), 'bar');
@@ -87,23 +97,27 @@
 
   function testCallOwnerFromMixinForObjects()
   {
-    //we need to ensure owner is set in mixin
-    $mixed = new MixableTestVersion(array(new OwnerCallingMixin()));
+    $mixed = new MixableTestVersion(array(new MixingCallingOwnerMethod()));
     $this->assertEqual($mixed->ownerMy(), 'my');
   }
 
   function testCallOwnerFromMixinForClasses()
   {
-    //we need to ensure owner is set in mixin
-    $mixed = new MixableTestVersion(array('OwnerCallingMixin'));
+    $mixed = new MixableTestVersion(array('MixingCallingOwnerMethod'));
     $this->assertEqual($mixed->ownerMy(), 'my');
   }
 
+  function testGetOwnerVarFromMixin()
+  {
+    $mixed = new MixableTestVersion(array(new MixinCallingOwnerVar()));
+    $this->assertEqual($mixed->ownerVar(), 'var');
+  }
+
   function testMixinsOverriding()
   {
     $mixed = new lmbMixable();
-    $mixed->mixin(new FooMixin());
-    $mixed->mixin(new FooOverridingMixin());
+    $mixed->mixin(new MixinFoo());
+    $mixed->mixin(new MixinOverridinFoo());
     $this->assertEqual($mixed->foo(), 'overriden foo');
   }
 



More information about the limb-svn mailing list