[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