Update the base model to use string service instead of each sub model

This commit is contained in:
gconsidine
2017-11-10 10:42:05 -05:00
parent e8fd40ace0
commit 8713e38c44
12 changed files with 70 additions and 101 deletions

View File

@@ -1,6 +1,7 @@
let $http; let $http;
let $q; let $q;
let cache; let cache;
let strings;
function request (method, resource, config) { function request (method, resource, config) {
let req = this.parseRequestConfig(method, resource, config); let req = this.parseRequestConfig(method, resource, config);
@@ -473,14 +474,14 @@ function parseRequestConfig (method, resource, config) {
/** /**
* Base functionality for API interaction. * Base functionality for API interaction.
* *
* @arg {string} path - The API resource for the model extending BaseModel to * @arg {string} resource - The API resource for the model extending BaseModel to
* use. * use.
* @arg {Object=} settings - Configuration applied to all instances of the * @arg {Object=} settings - Configuration applied to all instances of the
* extending model. * extending model.
* @arg {boolean=} settings.cache - Cache the model data. * @arg {boolean=} settings.cache - Cache the model data.
* *
*/ */
function BaseModel (path, settings) { function BaseModel (resource, settings) {
this.create = create; this.create = create;
this.find = find; this.find = find;
this.get = get; this.get = get;
@@ -511,18 +512,20 @@ function BaseModel (path, settings) {
}; };
this.model = {}; this.model = {};
this.path = this.normalizePath(path); this.path = this.normalizePath(resource);
this.label = strings.get(`${resource}.LABEL`);
this.settings = settings || {}; this.settings = settings || {};
} }
function BaseModelLoader (_$http_, _$q_, _cache_) { function BaseModelLoader (_$http_, _$q_, _cache_, ModelsStrings) {
$http = _$http_; $http = _$http_;
$q = _$q_; $q = _$q_;
cache = _cache_; cache = _cache_;
strings = ModelsStrings;
return BaseModel; return BaseModel;
} }
BaseModelLoader.$inject = ['$http', '$q', 'CacheService']; BaseModelLoader.$inject = ['$http', '$q', 'CacheService', 'ModelsStrings'];
export default BaseModelLoader; export default BaseModelLoader;

View File

@@ -5,7 +5,6 @@ let Project;
let JobTemplate; let JobTemplate;
let Inventory; let Inventory;
let InventorySource; let InventorySource;
let strings;
function createFormSchema (method, config) { function createFormSchema (method, config) {
if (!config) { if (!config) {
@@ -82,7 +81,6 @@ function CredentialModel (method, resource, config) {
this.createFormSchema = createFormSchema.bind(this); this.createFormSchema = createFormSchema.bind(this);
this.assignInputGroupValues = assignInputGroupValues.bind(this); this.assignInputGroupValues = assignInputGroupValues.bind(this);
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.CREDENTIAL');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
@@ -92,15 +90,13 @@ function CredentialModelLoader (
ProjectModel, ProjectModel,
JobTemplateModel, JobTemplateModel,
InventoryModel, InventoryModel,
InventorySourceModel, InventorySourceModel
ModelsStrings
) { ) {
Base = BaseModel; Base = BaseModel;
Project = ProjectModel; Project = ProjectModel;
JobTemplate = JobTemplateModel; JobTemplate = JobTemplateModel;
Inventory = InventoryModel; Inventory = InventoryModel;
InventorySource = InventorySourceModel; InventorySource = InventorySourceModel;
strings = ModelsStrings;
return CredentialModel; return CredentialModel;
} }
@@ -110,8 +106,7 @@ CredentialModelLoader.$inject = [
'ProjectModel', 'ProjectModel',
'JobTemplateModel', 'JobTemplateModel',
'InventoryModel', 'InventoryModel',
'InventorySourceModel', 'InventorySourceModel'
'ModelsStrings'
]; ];
export default CredentialModelLoader; export default CredentialModelLoader;

View File

@@ -1,6 +1,5 @@
let Base; let Base;
let Credential; let Credential;
let strings;
function categorizeByKind () { function categorizeByKind () {
const group = {}; const group = {};
@@ -50,27 +49,20 @@ function CredentialTypeModel (method, resource, config) {
this.categorizeByKind = categorizeByKind.bind(this); this.categorizeByKind = categorizeByKind.bind(this);
this.mergeInputProperties = mergeInputProperties.bind(this); this.mergeInputProperties = mergeInputProperties.bind(this);
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.CREDENTIAL_TYPE');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function CredentialTypeModelLoader ( function CredentialTypeModelLoader (BaseModel, CredentialModel) {
BaseModel,
CredentialModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
Credential = CredentialModel; Credential = CredentialModel;
strings = ModelsStrings;
return CredentialTypeModel; return CredentialTypeModel;
} }
CredentialTypeModelLoader.$inject = [ CredentialTypeModelLoader.$inject = [
'BaseModel', 'BaseModel',
'CredentialModel', 'CredentialModel'
'ModelsStrings'
]; ];
export default CredentialTypeModelLoader; export default CredentialTypeModelLoader;

View File

@@ -1,6 +1,5 @@
let Base; let Base;
let JobTemplate; let JobTemplate;
let strings;
function setDependentResources (id) { function setDependentResources (id) {
this.dependentResources = [ this.dependentResources = [
@@ -18,27 +17,20 @@ function InventoryModel (method, resource, config) {
this.Constructor = InventoryModel; this.Constructor = InventoryModel;
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.INVENTORY');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function InventoryModelLoader ( function InventoryModelLoader (BaseModel, JobTemplateModel) {
BaseModel,
JobTemplateModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
JobTemplate = JobTemplateModel; JobTemplate = JobTemplateModel;
strings = ModelsStrings;
return InventoryModel; return InventoryModel;
} }
InventoryModelLoader.$inject = [ InventoryModelLoader.$inject = [
'BaseModel', 'BaseModel',
'JobTemplateModel', 'JobTemplateModel'
'ModelsStrings'
]; ];
export default InventoryModelLoader; export default InventoryModelLoader;

View File

@@ -1,6 +1,5 @@
let Base; let Base;
let InventorySource; let InventorySource;
let strings;
function setDependentResources (id) { function setDependentResources (id) {
this.dependentResources = [ this.dependentResources = [
@@ -18,27 +17,20 @@ function InventoryScriptModel (method, resource, config) {
this.Constructor = InventoryScriptModel; this.Constructor = InventoryScriptModel;
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.INVENTORY_SCRIPT');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function InventoryScriptModelLoader ( function InventoryScriptModelLoader (BaseModel, InventorySourceModel) {
BaseModel,
InventorySourceModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
InventorySource = InventorySourceModel; InventorySource = InventorySourceModel;
strings = ModelsStrings;
return InventoryScriptModel; return InventoryScriptModel;
} }
InventoryScriptModelLoader.$inject = [ InventoryScriptModelLoader.$inject = [
'BaseModel', 'BaseModel',
'InventorySourceModel', 'InventorySourceModel'
'ModelsStrings'
]; ];
export default InventoryScriptModelLoader; export default InventoryScriptModelLoader;

View File

@@ -1,6 +1,5 @@
let Base; let Base;
let WorkflowJobTemplateNode; let WorkflowJobTemplateNode;
let strings;
function setDependentResources (id) { function setDependentResources (id) {
this.dependentResources = [ this.dependentResources = [
@@ -17,7 +16,6 @@ function InventorySourceModel (method, resource, config) {
Base.call(this, 'inventory_sources'); Base.call(this, 'inventory_sources');
this.Constructor = InventorySourceModel; this.Constructor = InventorySourceModel;
this.label = strings.get('labels.INVENTORY_SOURCE');
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
return this.create(method, resource, config); return this.create(method, resource, config);
@@ -25,20 +23,17 @@ function InventorySourceModel (method, resource, config) {
function InventorySourceModelLoader ( function InventorySourceModelLoader (
BaseModel, BaseModel,
WorkflowJobTemplateNodeModel, WorkflowJobTemplateNodeModel
ModelsStrings
) { ) {
Base = BaseModel; Base = BaseModel;
WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel; WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel;
strings = ModelsStrings;
return InventorySourceModel; return InventorySourceModel;
} }
InventorySourceModelLoader.$inject = [ InventorySourceModelLoader.$inject = [
'BaseModel', 'BaseModel',
'WorkflowJobTemplateNodeModel', 'WorkflowJobTemplateNodeModel'
'ModelsStrings'
]; ];
export default InventorySourceModelLoader; export default InventorySourceModelLoader;

View File

@@ -1,6 +1,5 @@
let Base; let Base;
let WorkflowJobTemplateNode; let WorkflowJobTemplateNode;
let strings;
function setDependentResources (id) { function setDependentResources (id) {
this.dependentResources = [ this.dependentResources = [
@@ -18,27 +17,20 @@ function JobTemplateModel (method, resource, config) {
this.Constructor = JobTemplateModel; this.Constructor = JobTemplateModel;
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.JOB_TEMPLATE');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function JobTemplateModelLoader ( function JobTemplateModelLoader (BaseModel, WorkflowJobTemplateNodeModel) {
BaseModel,
WorkflowJobTemplateNodeModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel; WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel;
strings = ModelsStrings;
return JobTemplateModel; return JobTemplateModel;
} }
JobTemplateModelLoader.$inject = [ JobTemplateModelLoader.$inject = [
'BaseModel', 'BaseModel',
'WorkflowJobTemplateNodeModel', 'WorkflowJobTemplateNodeModel'
'ModelsStrings'
]; ];
export default JobTemplateModelLoader; export default JobTemplateModelLoader;

View File

@@ -1,28 +1,21 @@
let Base; let Base;
let strings;
function OrganizationModel (method, resource, config) { function OrganizationModel (method, resource, config) {
Base.call(this, 'organizations'); Base.call(this, 'organizations');
this.Constructor = OrganizationModel; this.Constructor = OrganizationModel;
this.label = strings.get('labels.ORGANIZATION');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function OrganizationModelLoader ( function OrganizationModelLoader (BaseModel) {
BaseModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
strings = ModelsStrings;
return OrganizationModel; return OrganizationModel;
} }
OrganizationModelLoader.$inject = [ OrganizationModelLoader.$inject = [
'BaseModel', 'BaseModel'
'ModelsStrings'
]; ];
export default OrganizationModelLoader; export default OrganizationModelLoader;

View File

@@ -2,7 +2,6 @@ let Base;
let JobTemplate; let JobTemplate;
let WorkflowJobTemplateNode; let WorkflowJobTemplateNode;
let InventorySource; let InventorySource;
let strings;
function setDependentResources (id) { function setDependentResources (id) {
this.dependentResources = [ this.dependentResources = [
@@ -32,7 +31,6 @@ function ProjectModel (method, resource, config) {
this.Constructor = ProjectModel; this.Constructor = ProjectModel;
this.setDependentResources = setDependentResources.bind(this); this.setDependentResources = setDependentResources.bind(this);
this.label = strings.get('labels.PROJECT');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
@@ -42,13 +40,11 @@ function ProjectModelLoader (
JobTemplateModel, JobTemplateModel,
WorkflowJobTemplateNodeModel, WorkflowJobTemplateNodeModel,
InventorySourceModel, InventorySourceModel,
ModelsStrings
) { ) {
Base = BaseModel; Base = BaseModel;
JobTemplate = JobTemplateModel; JobTemplate = JobTemplateModel;
WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel; WorkflowJobTemplateNode = WorkflowJobTemplateNodeModel;
InventorySource = InventorySourceModel; InventorySource = InventorySourceModel;
strings = ModelsStrings;
return ProjectModel; return ProjectModel;
} }
@@ -57,8 +53,7 @@ ProjectModelLoader.$inject = [
'BaseModel', 'BaseModel',
'JobTemplateModel', 'JobTemplateModel',
'WorkflowJobTemplateNodeModel', 'WorkflowJobTemplateNodeModel',
'InventorySourceModel', 'InventorySourceModel'
'ModelsStrings'
]; ];
export default ProjectModelLoader; export default ProjectModelLoader;

View File

@@ -1,28 +1,21 @@
let Base; let Base;
let strings;
function WorkflowJobTemplateNodeModel (method, resource, config) { function WorkflowJobTemplateNodeModel (method, resource, config) {
Base.call(this, 'workflow_job_template_nodes'); Base.call(this, 'workflow_job_template_nodes');
this.Constructor = WorkflowJobTemplateNodeModel; this.Constructor = WorkflowJobTemplateNodeModel;
this.label = strings.get('labels.WORKFLOW_JOB_TEMPLATE_NODE');
return this.create(method, resource, config); return this.create(method, resource, config);
} }
function WorkflowJobTemplateNodeModelLoader ( function WorkflowJobTemplateNodeModelLoader (BaseModel) {
BaseModel,
ModelsStrings
) {
Base = BaseModel; Base = BaseModel;
strings = ModelsStrings;
return WorkflowJobTemplateNodeModel; return WorkflowJobTemplateNodeModel;
} }
WorkflowJobTemplateNodeModelLoader.$inject = [ WorkflowJobTemplateNodeModelLoader.$inject = [
'BaseModel', 'BaseModel'
'ModelsStrings'
]; ];
export default WorkflowJobTemplateNodeModelLoader; export default WorkflowJobTemplateNodeModelLoader;

View File

@@ -4,16 +4,46 @@ function ModelsStrings (BaseString) {
const { t } = this; const { t } = this;
const ns = this.models; const ns = this.models;
ns.labels = { ns.credentials = {
CREDENTIAL: t.s('Credentials'), LABEL: t.s('Credentials')
CREDENTIAL_TYPE: t.s('Credential Types'), };
INVENTORY: t.s('Inventories'),
INVENTORY_SCRIPT: t.s('Inventory Scripts'), ns.credential_types = {
INVENTORY_SOURCE: t.s('Inventory Sources'), LABEL: t.s('Credential Types')
JOB_TEMPLATE: t.s('Job Templates'), };
ORGANIZATION: t.s('Organizations'),
PROJECT: t.s('Projects'), ns.inventories = {
WORKFLOW_JOB_TEMPLATE_NODE: t.s('Workflow Job Template Nodes') LABEL: t.s('Inventories')
};
ns.inventory_scripts = {
LABEL: t.s('Inventory Scripts')
};
ns.inventory_sources = {
LABEL: t.s('Inventory Sources')
};
ns.job_templates = {
LABEL: t.s('Job Templates')
};
ns.organizations = {
LABEL: t.s('Organizations')
};
ns.projects = {
LABEL: t.s('Projects')
};
ns.workflow_job_template_nodes = {
LABEL: t.s('Workflow Job Template Nodes')
}; };
} }

View File

@@ -4,7 +4,6 @@ let i18n;
function BaseStringService (namespace) { function BaseStringService (namespace) {
const ERROR_NO_NAMESPACE = 'BaseString cannot be extended without providing a namespace'; const ERROR_NO_NAMESPACE = 'BaseString cannot be extended without providing a namespace';
const ERROR_NO_STRING = 'No string exists with this name';
if (!namespace) { if (!namespace) {
throw new Error(ERROR_NO_NAMESPACE); throw new Error(ERROR_NO_NAMESPACE);
@@ -67,8 +66,6 @@ function BaseStringService (namespace) {
* the more globally relevant strings defined here. Strings with with dots as delimeters are * the more globally relevant strings defined here. Strings with with dots as delimeters are
* supported to give flexibility to extending classes to nest strings as necessary. * supported to give flexibility to extending classes to nest strings as necessary.
* *
* If no match is found, an error is thrown to alert the developer immediately instead of
* failing silently.
* *
* The `t.s` and `t.p` calls should only be used where strings are defined in * The `t.s` and `t.p` calls should only be used where strings are defined in
* <name>.strings.js` files. To use translated strings elsewhere, access them through this * <name>.strings.js` files. To use translated strings elsewhere, access them through this
@@ -88,13 +85,13 @@ function BaseStringService (namespace) {
} else { } else {
value = value[key]; value = value[key];
} }
if (!value) {
throw new Error(`${ERROR_NO_STRING}: ${name}`);
}
}); });
return typeof value === 'string' ? value : value(...args); if (!value || typeof value === 'string') {
return value;
}
return value(...args);
}; };
} }