Using a Config class to manage Google Apps Script's PropertiesService

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;







up vote
1
down vote

favorite












I created a Config class to manage the PropertiesService in Google Apps script. Right now it only uses the DocumentProperties, but it can easily be expanded to support the User and Script properties. The code is here on github (it's a little big for pasting here). The Config class is in the Helper.gs file.



It allows me to write Settings.PDF.save() to get data from the PropertyService instead ofJSON.parse(PropertiesService.getDocumentProperties().getProperty("pdf")).save; or Settings.PDF.save(true) to set it.



Note: I know the log() functions and comments are everywhere... I hope to clean that up in the future!




The actual question:



  1. The main thing I was to ask is if how I set this up is a good method to use. It seems to help make calling and setting properties easier, but I am not experience in JavaScript or functional language in general. I usually stick to OOD.

  2. Lastly, because this is my first Google Apps Script Addon I wanted to check if how I initialized my Settings variable (at the top of FormFusion.js) is a good/best practice.


PS: In case you were wondering the code is essentially a mail merge for forms. There are a few good ones out there already but most charge a fee to use them. I am creating it for an organization I volunteer with and whoever wishes to use it.




Main Section of Code - Helpers.gs



var Settings = Config(); //This is actually in FormFusion.gs

function Config()
var documentProperties = PropertiesService.getDocumentProperties();
var userProperties = PropertiesService.getUserProperties();
var devProperties = PropertiesService.getScriptProperties();

//If config is not setup use defaults...
setupDefaults(
config:
isSetup: false
,
pdf:
name: "",
location: "",
save: false,
email: false
,
doc:
name: "",
location: "",
save: false,
email: false
,
form:
markers: null
,
template:
id: "",
markers: null

);

var configSettings = getProp("document", "config");

this.PDF = new pdf();
this.DOC = new document();
this.FORM = new form();
this.TEMPLATE = new template();

this.isSetup = function(arg)
if(!arg)
return configSettings.isSetup;
else
configSettings.isSetup = arg;
setProp("document", "config", configSettings);

;

function form()
var propType = "document";
var key = "form";
var formSettings = getProp(propType, key);

this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function template()
var propType = "document";
var key = "template";
var formSettings = getProp(propType, key);

this.id = function(arg)
if(!arg)
return formSettings.id;
else
formSettings.id = arg;
updateProp();



this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function pdf()
var propType = "document";
var key = "pdf";
var pdfSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return pdfSettings.save;
else
pdfSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = pdfSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
pdfSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return pdfSettings.email;
else
pdfSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return pdfSettings.name;
else
pdfSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, pdfSettings);



function document()
var propType = "document";
var key = "doc";
var documentSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return documentSettings.save;
else
documentSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = documentSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
documentSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return documentSettings.email;
else
documentSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return documentSettings.name;
else
documentSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, documentSettings);



function email()
var propType = "document";
var key = "email";
var formSettings = getProp(propType, key);

function updateProp()
setProp(propType, key, formSettings);



function getProp(prop, key)
try
switch(prop)
case "document":
return JSON.parse(documentProperties.getProperty(key));
case "user":
return JSON.parse(userProperties.getProperty(key));
case "dev":
return JSON.parse(devProperties.getProperty(key));
default:
return "Can not find key: " + key;

catch(e)
log("getProp Error: " + e);
throw new e;




function setProp(prop, key, val)
try
switch(prop)
case "document":
documentProperties.setProperty(key, JSON.stringify(val));
break;
case "user":
userProperties.setProperty(key, JSON.stringify(val));
break;
case "dev":
devProperties.setProperty(key, JSON.stringify(val));
break;
default:
//TODO Throw error?
return "Can not find key: " + key;

catch(e)
log("setProp Error: " + e);
throw new e;



function setupDefaults(defaults)
if(!documentProperties.getKeys())

log("Setting defaults...");
for (var prop in defaults)
defaults[prop] = JSON.stringify(defaults[prop]);


documentProperties.setProperties(defaults);





The main function is Config() it contains a pdf(), document(), form(), and template() classes that contain functions for the different properties I need. Within Config its own high level properties (such as isSetup()) is the getProp() and setProp() functions that interact with the PropertiesService.







share|improve this question

















  • 1




    According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
    – Pieter Witvoet
    Feb 8 at 7:52










  • Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
    – Chris W
    Feb 8 at 17:25










  • I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
    – Chris W
    Feb 9 at 6:28
















up vote
1
down vote

favorite












I created a Config class to manage the PropertiesService in Google Apps script. Right now it only uses the DocumentProperties, but it can easily be expanded to support the User and Script properties. The code is here on github (it's a little big for pasting here). The Config class is in the Helper.gs file.



It allows me to write Settings.PDF.save() to get data from the PropertyService instead ofJSON.parse(PropertiesService.getDocumentProperties().getProperty("pdf")).save; or Settings.PDF.save(true) to set it.



Note: I know the log() functions and comments are everywhere... I hope to clean that up in the future!




The actual question:



  1. The main thing I was to ask is if how I set this up is a good method to use. It seems to help make calling and setting properties easier, but I am not experience in JavaScript or functional language in general. I usually stick to OOD.

  2. Lastly, because this is my first Google Apps Script Addon I wanted to check if how I initialized my Settings variable (at the top of FormFusion.js) is a good/best practice.


PS: In case you were wondering the code is essentially a mail merge for forms. There are a few good ones out there already but most charge a fee to use them. I am creating it for an organization I volunteer with and whoever wishes to use it.




Main Section of Code - Helpers.gs



var Settings = Config(); //This is actually in FormFusion.gs

function Config()
var documentProperties = PropertiesService.getDocumentProperties();
var userProperties = PropertiesService.getUserProperties();
var devProperties = PropertiesService.getScriptProperties();

//If config is not setup use defaults...
setupDefaults(
config:
isSetup: false
,
pdf:
name: "",
location: "",
save: false,
email: false
,
doc:
name: "",
location: "",
save: false,
email: false
,
form:
markers: null
,
template:
id: "",
markers: null

);

var configSettings = getProp("document", "config");

this.PDF = new pdf();
this.DOC = new document();
this.FORM = new form();
this.TEMPLATE = new template();

this.isSetup = function(arg)
if(!arg)
return configSettings.isSetup;
else
configSettings.isSetup = arg;
setProp("document", "config", configSettings);

;

function form()
var propType = "document";
var key = "form";
var formSettings = getProp(propType, key);

this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function template()
var propType = "document";
var key = "template";
var formSettings = getProp(propType, key);

this.id = function(arg)
if(!arg)
return formSettings.id;
else
formSettings.id = arg;
updateProp();



this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function pdf()
var propType = "document";
var key = "pdf";
var pdfSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return pdfSettings.save;
else
pdfSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = pdfSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
pdfSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return pdfSettings.email;
else
pdfSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return pdfSettings.name;
else
pdfSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, pdfSettings);



function document()
var propType = "document";
var key = "doc";
var documentSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return documentSettings.save;
else
documentSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = documentSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
documentSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return documentSettings.email;
else
documentSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return documentSettings.name;
else
documentSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, documentSettings);



function email()
var propType = "document";
var key = "email";
var formSettings = getProp(propType, key);

function updateProp()
setProp(propType, key, formSettings);



function getProp(prop, key)
try
switch(prop)
case "document":
return JSON.parse(documentProperties.getProperty(key));
case "user":
return JSON.parse(userProperties.getProperty(key));
case "dev":
return JSON.parse(devProperties.getProperty(key));
default:
return "Can not find key: " + key;

catch(e)
log("getProp Error: " + e);
throw new e;




function setProp(prop, key, val)
try
switch(prop)
case "document":
documentProperties.setProperty(key, JSON.stringify(val));
break;
case "user":
userProperties.setProperty(key, JSON.stringify(val));
break;
case "dev":
devProperties.setProperty(key, JSON.stringify(val));
break;
default:
//TODO Throw error?
return "Can not find key: " + key;

catch(e)
log("setProp Error: " + e);
throw new e;



function setupDefaults(defaults)
if(!documentProperties.getKeys())

log("Setting defaults...");
for (var prop in defaults)
defaults[prop] = JSON.stringify(defaults[prop]);


documentProperties.setProperties(defaults);





The main function is Config() it contains a pdf(), document(), form(), and template() classes that contain functions for the different properties I need. Within Config its own high level properties (such as isSetup()) is the getProp() and setProp() functions that interact with the PropertiesService.







share|improve this question

















  • 1




    According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
    – Pieter Witvoet
    Feb 8 at 7:52










  • Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
    – Chris W
    Feb 8 at 17:25










  • I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
    – Chris W
    Feb 9 at 6:28












up vote
1
down vote

favorite









up vote
1
down vote

favorite











I created a Config class to manage the PropertiesService in Google Apps script. Right now it only uses the DocumentProperties, but it can easily be expanded to support the User and Script properties. The code is here on github (it's a little big for pasting here). The Config class is in the Helper.gs file.



It allows me to write Settings.PDF.save() to get data from the PropertyService instead ofJSON.parse(PropertiesService.getDocumentProperties().getProperty("pdf")).save; or Settings.PDF.save(true) to set it.



Note: I know the log() functions and comments are everywhere... I hope to clean that up in the future!




The actual question:



  1. The main thing I was to ask is if how I set this up is a good method to use. It seems to help make calling and setting properties easier, but I am not experience in JavaScript or functional language in general. I usually stick to OOD.

  2. Lastly, because this is my first Google Apps Script Addon I wanted to check if how I initialized my Settings variable (at the top of FormFusion.js) is a good/best practice.


PS: In case you were wondering the code is essentially a mail merge for forms. There are a few good ones out there already but most charge a fee to use them. I am creating it for an organization I volunteer with and whoever wishes to use it.




Main Section of Code - Helpers.gs



var Settings = Config(); //This is actually in FormFusion.gs

function Config()
var documentProperties = PropertiesService.getDocumentProperties();
var userProperties = PropertiesService.getUserProperties();
var devProperties = PropertiesService.getScriptProperties();

//If config is not setup use defaults...
setupDefaults(
config:
isSetup: false
,
pdf:
name: "",
location: "",
save: false,
email: false
,
doc:
name: "",
location: "",
save: false,
email: false
,
form:
markers: null
,
template:
id: "",
markers: null

);

var configSettings = getProp("document", "config");

this.PDF = new pdf();
this.DOC = new document();
this.FORM = new form();
this.TEMPLATE = new template();

this.isSetup = function(arg)
if(!arg)
return configSettings.isSetup;
else
configSettings.isSetup = arg;
setProp("document", "config", configSettings);

;

function form()
var propType = "document";
var key = "form";
var formSettings = getProp(propType, key);

this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function template()
var propType = "document";
var key = "template";
var formSettings = getProp(propType, key);

this.id = function(arg)
if(!arg)
return formSettings.id;
else
formSettings.id = arg;
updateProp();



this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function pdf()
var propType = "document";
var key = "pdf";
var pdfSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return pdfSettings.save;
else
pdfSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = pdfSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
pdfSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return pdfSettings.email;
else
pdfSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return pdfSettings.name;
else
pdfSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, pdfSettings);



function document()
var propType = "document";
var key = "doc";
var documentSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return documentSettings.save;
else
documentSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = documentSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
documentSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return documentSettings.email;
else
documentSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return documentSettings.name;
else
documentSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, documentSettings);



function email()
var propType = "document";
var key = "email";
var formSettings = getProp(propType, key);

function updateProp()
setProp(propType, key, formSettings);



function getProp(prop, key)
try
switch(prop)
case "document":
return JSON.parse(documentProperties.getProperty(key));
case "user":
return JSON.parse(userProperties.getProperty(key));
case "dev":
return JSON.parse(devProperties.getProperty(key));
default:
return "Can not find key: " + key;

catch(e)
log("getProp Error: " + e);
throw new e;




function setProp(prop, key, val)
try
switch(prop)
case "document":
documentProperties.setProperty(key, JSON.stringify(val));
break;
case "user":
userProperties.setProperty(key, JSON.stringify(val));
break;
case "dev":
devProperties.setProperty(key, JSON.stringify(val));
break;
default:
//TODO Throw error?
return "Can not find key: " + key;

catch(e)
log("setProp Error: " + e);
throw new e;



function setupDefaults(defaults)
if(!documentProperties.getKeys())

log("Setting defaults...");
for (var prop in defaults)
defaults[prop] = JSON.stringify(defaults[prop]);


documentProperties.setProperties(defaults);





The main function is Config() it contains a pdf(), document(), form(), and template() classes that contain functions for the different properties I need. Within Config its own high level properties (such as isSetup()) is the getProp() and setProp() functions that interact with the PropertiesService.







share|improve this question













I created a Config class to manage the PropertiesService in Google Apps script. Right now it only uses the DocumentProperties, but it can easily be expanded to support the User and Script properties. The code is here on github (it's a little big for pasting here). The Config class is in the Helper.gs file.



It allows me to write Settings.PDF.save() to get data from the PropertyService instead ofJSON.parse(PropertiesService.getDocumentProperties().getProperty("pdf")).save; or Settings.PDF.save(true) to set it.



Note: I know the log() functions and comments are everywhere... I hope to clean that up in the future!




The actual question:



  1. The main thing I was to ask is if how I set this up is a good method to use. It seems to help make calling and setting properties easier, but I am not experience in JavaScript or functional language in general. I usually stick to OOD.

  2. Lastly, because this is my first Google Apps Script Addon I wanted to check if how I initialized my Settings variable (at the top of FormFusion.js) is a good/best practice.


PS: In case you were wondering the code is essentially a mail merge for forms. There are a few good ones out there already but most charge a fee to use them. I am creating it for an organization I volunteer with and whoever wishes to use it.




Main Section of Code - Helpers.gs



var Settings = Config(); //This is actually in FormFusion.gs

function Config()
var documentProperties = PropertiesService.getDocumentProperties();
var userProperties = PropertiesService.getUserProperties();
var devProperties = PropertiesService.getScriptProperties();

//If config is not setup use defaults...
setupDefaults(
config:
isSetup: false
,
pdf:
name: "",
location: "",
save: false,
email: false
,
doc:
name: "",
location: "",
save: false,
email: false
,
form:
markers: null
,
template:
id: "",
markers: null

);

var configSettings = getProp("document", "config");

this.PDF = new pdf();
this.DOC = new document();
this.FORM = new form();
this.TEMPLATE = new template();

this.isSetup = function(arg)
if(!arg)
return configSettings.isSetup;
else
configSettings.isSetup = arg;
setProp("document", "config", configSettings);

;

function form()
var propType = "document";
var key = "form";
var formSettings = getProp(propType, key);

this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function template()
var propType = "document";
var key = "template";
var formSettings = getProp(propType, key);

this.id = function(arg)
if(!arg)
return formSettings.id;
else
formSettings.id = arg;
updateProp();



this.markers = function(arg)
if(!arg)
return formSettings.markers;
else
formSettings.markers = arg;
updateProp();



function updateProp()
setProp(propType, key, formSettings);



function pdf()
var propType = "document";
var key = "pdf";
var pdfSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return pdfSettings.save;
else
pdfSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = pdfSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
pdfSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return pdfSettings.email;
else
pdfSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return pdfSettings.name;
else
pdfSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, pdfSettings);



function document()
var propType = "document";
var key = "doc";
var documentSettings = getProp(propType, key);

this.save = function save(arg)
if(!arg)
return documentSettings.save;
else
documentSettings.save = arg;
updateProp();



this.location = function(arg)
if(!arg)
var location = documentSettings.location;
return location ? DriveApp.getFolderById(location) : DriveApp.getRootFolder();
else
documentSettings.location = arg;
updateProp();



this.email = function(arg)
if(!arg)
return documentSettings.email;
else
documentSettings.email = arg;
updateProp();



this.name = function(arg)
if(!arg)
return documentSettings.name;
else
documentSettings.name = arg;
updateProp();



function updateProp()
setProp(propType, key, documentSettings);



function email()
var propType = "document";
var key = "email";
var formSettings = getProp(propType, key);

function updateProp()
setProp(propType, key, formSettings);



function getProp(prop, key)
try
switch(prop)
case "document":
return JSON.parse(documentProperties.getProperty(key));
case "user":
return JSON.parse(userProperties.getProperty(key));
case "dev":
return JSON.parse(devProperties.getProperty(key));
default:
return "Can not find key: " + key;

catch(e)
log("getProp Error: " + e);
throw new e;




function setProp(prop, key, val)
try
switch(prop)
case "document":
documentProperties.setProperty(key, JSON.stringify(val));
break;
case "user":
userProperties.setProperty(key, JSON.stringify(val));
break;
case "dev":
devProperties.setProperty(key, JSON.stringify(val));
break;
default:
//TODO Throw error?
return "Can not find key: " + key;

catch(e)
log("setProp Error: " + e);
throw new e;



function setupDefaults(defaults)
if(!documentProperties.getKeys())

log("Setting defaults...");
for (var prop in defaults)
defaults[prop] = JSON.stringify(defaults[prop]);


documentProperties.setProperties(defaults);





The main function is Config() it contains a pdf(), document(), form(), and template() classes that contain functions for the different properties I need. Within Config its own high level properties (such as isSetup()) is the getProp() and setProp() functions that interact with the PropertiesService.









share|improve this question












share|improve this question




share|improve this question








edited Feb 9 at 6:27
























asked Feb 8 at 7:00









Chris W

1063




1063







  • 1




    According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
    – Pieter Witvoet
    Feb 8 at 7:52










  • Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
    – Chris W
    Feb 8 at 17:25










  • I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
    – Chris W
    Feb 9 at 6:28












  • 1




    According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
    – Pieter Witvoet
    Feb 8 at 7:52










  • Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
    – Chris W
    Feb 8 at 17:25










  • I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
    – Chris W
    Feb 9 at 6:28







1




1




According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
– Pieter Witvoet
Feb 8 at 7:52




According to the site rules, code has to be included in the post itself. A couple hundred lines shouldn't be a problem.
– Pieter Witvoet
Feb 8 at 7:52












Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
– Chris W
Feb 8 at 17:25




Okay! Even after reading all the posts on how to post I missed that part! I fixed it up so it should be good to go?
– Chris W
Feb 8 at 17:25












I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
– Chris W
Feb 9 at 6:28




I've updated the questions to ask few parts. I really want to focus on how the Config object is setup. Is that a good way to do it?
– Chris W
Feb 9 at 6:28















active

oldest

votes











Your Answer




StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");

StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: false,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);








 

draft saved


draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f187071%2fusing-a-config-class-to-manage-google-apps-scripts-propertiesservice%23new-answer', 'question_page');

);

Post as a guest



































active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes










 

draft saved


draft discarded


























 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f187071%2fusing-a-config-class-to-manage-google-apps-scripts-propertiesservice%23new-answer', 'question_page');

);

Post as a guest













































































Popular posts from this blog

Greedy Best First Search implementation in Rust

Function to Return a JSON Like Objects Using VBA Collections and Arrays

C++11 CLH Lock Implementation