| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- var Namespace = function (name, parentNamespace) {
- this.name = name;
- this.parentNamespace = parentNamespace;
- this.childNamespaces = {};
- this.tasks = {};
- this.rules = {};
- this.path = this.getPath();
- };
- Namespace.prototype = new (function () {
- this.resolveTask = function(relativeName) {
- var parts = relativeName.split(':')
- , name = parts.pop()
- , ns = this.resolveNamespace(parts.join(':'));
- return (ns && ns.tasks[name]) ||
- (this.parentNamespace &&
- this.parentNamespace.resolveTask(relativeName));
- };
- this.resolveNamespace = function(relativeName) {
- var parts = relativeName.split(':')
- , ns;
- if (!relativeName) {
- return this;
- }
- ns = this;
- for (var i = 0, ii = parts.length; ns && i < ii; i++) {
- ns = ns.childNamespaces[parts[i]];
- }
- return (ns || (this.parentNamespace &&
- this.parentNamespace.resolveNamespace(relativeName)));
- };
- this.matchRule = function(relativeName) {
- var parts = relativeName.split(':')
- , name = parts.pop()
- , ns = this.resolveNamespace(parts.join(':'))
- , rules = ns ? ns.rules : []
- , r
- , match;
- for (var p in rules) {
- r = rules[p];
- if (r.match(relativeName)) {
- match = r;
- }
- }
- return (ns && match) ||
- (this.parentNamespace &&
- this.parentNamespace.matchRule(relativeName));
- };
- this.getPath = function () {
- var parts = []
- , next = this;
- while (!!next) {
- parts.push(next.name);
- next = next.parentNamespace;
- }
- parts.pop(); // Remove 'default'
- return parts.reverse().join(':');
- };
- })();
- module.exports.Namespace = Namespace;
|