Skip to content

Commit fb130ad

Browse files
authored
Merge pull request #72 from Exabyte-io/feat/SOF-6749
feat/SOF-6749: modify extendAndPatchRegistry to support default values
2 parents 515ef1c + 81a9137 commit fb130ad

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

src/context/registry.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,27 @@ export class ContextProviderRegistryContainer {
4646
* };
4747
*
4848
*/
49-
export const extendAndPatchRegistry = (registryContainer, classConfigMap, classesToPatch = {}) => {
49+
export const extendAndPatchRegistry = (
50+
registryContainer,
51+
classConfigMap,
52+
classesToPatch = {},
53+
defaultSettings = {},
54+
) => {
5055
Object.entries(classConfigMap).forEach(([name, { providerCls, config }]) => {
5156
Object.entries(classesToPatch).forEach(([clsName, cls]) => {
5257
if (providerCls[clsName]) {
5358
providerCls[clsName] = cls;
5459
}
60+
const providerDefaultSettings = defaultSettings[providerCls.name];
61+
if (providerDefaultSettings) {
62+
Object.entries(providerDefaultSettings).forEach(([key, value]) => {
63+
if (providerCls[key]) {
64+
providerCls[key] = value;
65+
}
66+
});
67+
}
5568
});
69+
5670
registryContainer.addProvider({
5771
instance: providerCls.getConstructorConfig(config),
5872
name,
@@ -66,7 +80,16 @@ export const extendAndPatchRegistry = (registryContainer, classConfigMap, classe
6680
* @param {Object} classConfigMap
6781
* @param {{Material: SpecificMockMaterial}} classesToPatch
6882
*/
69-
export const createAndPatchRegistry = (classConfigMap, classesToPatch = {}) => {
83+
export const createAndPatchRegistry = (
84+
classConfigMap,
85+
classesToPatch = {},
86+
defaultSettings = {},
87+
) => {
7088
const registryContainer = new ContextProviderRegistryContainer();
71-
return extendAndPatchRegistry(registryContainer, classConfigMap, classesToPatch);
89+
return extendAndPatchRegistry(
90+
registryContainer,
91+
classConfigMap,
92+
classesToPatch,
93+
defaultSettings,
94+
);
7295
};

tests/context.tests.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ class ProviderEntity extends MaterialContextMixin(ApplicationContextMixin(Contex
3636
static Material = MockMaterial;
3737

3838
static Application = MockApplication;
39+
40+
static setting = 10;
3941
}
4042

4143
class DerivedProviderEntity extends ProviderEntity {
@@ -76,12 +78,24 @@ describe("ContextProviderRegistryContainer", () => {
7678
},
7779
};
7880

81+
const defaultSettings = {
82+
ProviderEntity: {
83+
setting: 100,
84+
},
85+
};
86+
7987
it("can be created and patched", () => {
80-
const registry = createAndPatchRegistry(classConfigObj, { Material: SpecificMockMaterial });
88+
const registry = createAndPatchRegistry(
89+
classConfigObj,
90+
{ Material: SpecificMockMaterial },
91+
defaultSettings,
92+
);
93+
8194
const _dataProvider = registry.findProviderInstanceByName("DataManager");
8295
const dataProvider = new _dataProvider.constructor(_dataProvider.config);
8396
const _appProvider = registry.findProviderInstanceByName("ApplicationDataManager");
8497
const appProvider = new _appProvider.constructor(_appProvider.config);
98+
expect(_dataProvider.constructor.setting).to.be.equal(100);
8599
expect(dataProvider.material).to.be.equal("defaultSpecificMockMaterial");
86100
expect(appProvider.application).to.be.equal("defaultSpecificMockApplication");
87101
});

0 commit comments

Comments
 (0)