/* SVN FILE: $Id: FakeObject.as 42 2008-03-26 03:18:02Z xpointsh $ */ /** * Description * * Fake * Copyright 2008, Sean Chatman and Garrett Woodworth * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright Copyright 2008, Sean Chatman and Garrett Woodworth * @link http://code.google.com/p/fake-as3/ * @package fake * @subpackage com.fake * @since 2008-03-06 * @version $Revision: 42 $ * @modifiedby $LastChangedBy: xpointsh $ * @lastmodified $Date: 2008-03-25 20:18:02 -0700 (Tue, 25 Mar 2008) $ * @license http://www.opensource.org/licenses/mit-license.php The MIT License */ package com.fake { import flash.utils.*; /** * FakeObject is the root object for all classes * in Fake. It contains a reference to the class name * and class object. These are obtained by using the * reflection classes in flash.utils. */ public dynamic class FakeObject extends Proxy { /** * The name of the top level subclass */ [Transient] public var className:String; /** * A reference to the top level subclass */ [Transient] public var ClassRef:Class; private var __item:Array; public function FakeObject() { getClassInfo(); __item = new Array(); } /** * This method is called by the constructor. Populates the className and ClassRef using * getQualifiedClassName and getDefinitionByName */ private function getClassInfo():void { var qcName:Array = getQualifiedClassName(this).split("::"); className = qcName[1]; var classPath:String = getQualifiedClassName(this).replace( "::", "." ); ClassRef = getDefinitionByName(classPath) as Class; } /** * Override the callProperty of the flash_proxy * @param method * @param args * @return * */ override flash_proxy function callProperty(method: *, ...args):* { try { return ClassRef.prototype[method].apply(method, args); } catch (e:Error) { return overload(method, args); } } /** * To be overriden by subclasses. Allows calling any method on any object that extends FakeOject * @param method * @param args * */ protected function overload(method:*, args:Array):void { } /** * get a property on the object * @param name * @return * */ override flash_proxy function getProperty(name:*):* { return overloadGetProperty(name); } protected function overloadGetProperty(name:*):* { return __item[name]; } /** * Set a property on the object * @param name * @param value * */ override flash_proxy function setProperty(name:*, value:*):void { overloadSetProperty(name, value) } protected function overloadSetProperty(name:*, value:*):void { __item[name] = value; } /** * Check if the property exits * @param name * @param value * */ override flash_proxy function hasProperty(name:*):Boolean { if (__item[name]) { return true; } return false; } } }