Created
February 3, 2010 23:16
-
-
Save rjungemann/294170 to your computer and use it in GitHub Desktop.
A generic locator class for ActionScript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.thefifthcircuit.utils { | |
public class Locator { | |
private static var obj:* = {}; | |
private function shallowGet(query:String):* { | |
var parsed:String = "^" + query + "$"; | |
var matches:Array = []; | |
for(var key:String in obj) { | |
if(key.match(new RegExp(parsed))) { | |
matches.push(obj[key]) | |
} | |
} | |
return matches[0]; | |
} | |
private function shallowSet(query:String, value:*):* { | |
var parsed:String = "^" + query + "$"; | |
var matches:Array = []; | |
for(var key:String in obj) { | |
if(key.match(new RegExp(parsed))) { | |
obj[key] = value; | |
matches.push(obj[key]); | |
} | |
} | |
if(matches.length < 1) { | |
obj[query] = value; | |
} | |
return value; | |
} | |
private function deepGet(query:String):* { | |
var keys:Array = query.split("/"); | |
var currentObj:* = obj; | |
for(var i = 0; i < keys.length; i++) { | |
var val:* = shallowGet(currentObj, keys[i]); | |
currentObj = val; | |
if(val == null || val == undefined) break; | |
} | |
var value:* = currentObj; | |
return (i < keys.length - 1) ? null : value; | |
} | |
private function deepSet(query:String, value:*):* { | |
var keys:Array = query.split("/"); | |
var currentObj:* = obj; | |
for(var i = 0; i < keys.length; i++) { | |
var val:* = shallowGet(currentObj, keys[i]); | |
if(val == null || val == undefined) break; | |
else currentObj = val; | |
} | |
var value:* = (i < keys.length - 1) ? null : | |
shallowSet(currentObj, keys[keys.length - 1], value); | |
return value; | |
} | |
public static function $(query:String, value:* = undefined):* { | |
return(value == undefined ? deepGet(obj, query) : deepSet(obj, query, value)); | |
} | |
} | |
} | |
// Locator.$ can take 1 or 2 arguments (getter ver. or the setter ver.) | |
// * path (a string containing "/"-delimited tokens, each of which can be a | |
// string or regexp) | |
// * object (any object to place at the particular path) | |
// | |
// Locator.$("foo", {}); | |
// Locator.$("foo/new", {}); | |
// Locator.$("foo/new/hello-whee", "bar"); | |
// trace(Locator.$("foo/.*/hello-whee")); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment