Skip to content

Commit

Permalink
Allow individual fields to be namespaced
Browse files Browse the repository at this point in the history
  • Loading branch information
Gnucki committed Dec 14, 2014
1 parent 3160ffe commit a82daab
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 11 deletions.
21 changes: 21 additions & 0 deletions lib/configuration/data-interpreter/namespaces.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,27 @@ define(function(require) {
}
}

// Check for individual fields needing to be prefixed.
if ('string' === typeof value && '[-]' === value.substr(0, 3)) {
value = this._namespacer.prefix(value.substr(3), parameters.module, parameters.modulesTree);
} else if ('object' === typeof value) {
for (var key in value) {
var field = value[key];

if ('string' === typeof field && '[-]' === field.substr(0, 3)) {
value[key] = this._namespacer.prefix(field.substr(3), parameters.module, parameters.modulesTree);
} else if ('object' === typeof field) {
for (var embeddedKey in field) {
var embeddedField = field[embeddedKey];

if ('string' === typeof embeddedField && '[-]' === embeddedField.substr(0, 3)) {
field[embeddedKey] = this._namespacer.prefix(embeddedField.substr(3), parameters.module, parameters.modulesTree);
}
}
}
}
}

return value;
}

Expand Down
7 changes: 7 additions & 0 deletions test/fixtures/app/interfaced-data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
'use strict';

module.exports = InterfacedData;

function InterfacedData() {}

InterfacedData.defineImplementedInterfaces(['data']);
41 changes: 30 additions & 11 deletions test/fixtures/danf.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,10 @@ module.exports = {
a: require('./app/a'),
b: require('./app/b'),
c: require('./app/c'),
computer: '%computerClass%',
manager: '%managerClass%',
trigger: '%triggerClass%'
computer: '%classes.computer%',
manager: '%classes.manager%',
trigger: '%classes.trigger%',
interfacedData: '%classes.interfacedData%'
},
parameters: {
'dep1:rule': {
Expand All @@ -66,10 +67,13 @@ module.exports = {
adapter: {
image: 'image'
},
managerClass: Manager,
computerClass: require('./app/computer'),
triggerClass: require('./app/trigger'),
callbackExecutor: require('./app/callback-executor')
classes: {
manager: Manager,
computer: require('./app/computer'),
trigger: require('./app/trigger'),
callbackExecutor: require('./app/callback-executor'),
interfacedData: require('./app/interfaced-data')
}
},
interfaces: {
ManagerInterface: {
Expand All @@ -78,27 +82,29 @@ module.exports = {
arguments: ['string/fileName']
}
}
},
data: {
}
},
services: {
polymorphous: {
class: require('./app/c')
},
trigger: {
class: '%triggerClass%',
class: '%classes.trigger%',
properties: {
eventsHandler: '#danf:event.eventsHandler#'
}
},
computer: {
class: '%computerClass%',
class: '%classes.computer%',
properties: {
counter: '#counter2#',
displayer: '#dep1:displayer#'
}
},
manager: {
class: '%managerClass%',
class: '%classes.manager%',
properties: {
providers: '&provider&',
timeOut: '$dep2:timeOut$',
Expand Down Expand Up @@ -184,7 +190,20 @@ module.exports = {
}
},
'danf:manipulation.callbackExecutor': {
class: '%callbackExecutor%'
class: '%classes.callbackExecutor%'
},
dataProvider: {
parent: 'danf:dependencyInjection.objectProvider',
properties: {
class: '%classes.interfacedData%',
interface: '[-]data'
}
},
currentDataProvider: {
parent: 'danf:dependencyInjection.contextProvider',
properties: {
interface: '[-]data'
}
}
},
events: {
Expand Down

0 comments on commit a82daab

Please sign in to comment.