From eb36f8bed5d8e8b241765db2ba40b37729d17329 Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Fri, 21 Dec 2018 19:14:54 -0200 Subject: [PATCH] Move rocketchat settings to specific package --- .meteor/packages | 3 +- .meteor/versions | 1 + packages/rocketchat-lib/lib/settings.js | 102 +------------------ packages/rocketchat-lib/package.js | 1 + packages/rocketchat-settings/client/index.js | 5 + packages/rocketchat-settings/lib/settings.js | 97 ++++++++++++++++++ packages/rocketchat-settings/package.js | 14 +++ packages/rocketchat-settings/server/index.js | 5 + 8 files changed, 127 insertions(+), 101 deletions(-) create mode 100644 packages/rocketchat-settings/client/index.js create mode 100644 packages/rocketchat-settings/lib/settings.js create mode 100644 packages/rocketchat-settings/package.js create mode 100644 packages/rocketchat-settings/server/index.js diff --git a/.meteor/packages b/.meteor/packages index b77a8aa4096c..52b54f3db3fa 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -200,4 +200,5 @@ rocketchat:bigbluebutton rocketchat:mailmessages juliancwirko:postcss littledata:synced-cron -rocketchat:utils \ No newline at end of file +rocketchat:utils +rocketchat:settings \ No newline at end of file diff --git a/.meteor/versions b/.meteor/versions index 447e1583da9c..c422d1b1304f 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -212,6 +212,7 @@ rocketchat:reactions@0.0.1 rocketchat:retention-policy@0.0.1 rocketchat:sandstorm@0.0.1 rocketchat:search@0.0.1 +rocketchat:settings@0.0.1 rocketchat:setup-wizard@0.0.1 rocketchat:slackbridge@0.0.1 rocketchat:slashcommands-archive@0.0.1 diff --git a/packages/rocketchat-lib/lib/settings.js b/packages/rocketchat-lib/lib/settings.js index f86ab11bcd25..7b90e489b732 100644 --- a/packages/rocketchat-lib/lib/settings.js +++ b/packages/rocketchat-lib/lib/settings.js @@ -1,101 +1,3 @@ -import { Meteor } from 'meteor/meteor'; -import _ from 'underscore'; +import { settings } from 'meteor/rocketchat:settings'; -/* -* RocketChat.settings holds all packages settings -* @namespace RocketChat.settings -*/ -RocketChat.settings = { - callbacks: {}, - regexCallbacks: {}, - ts: new Date, - get(_id, callback) { - if (callback != null) { - RocketChat.settings.onload(_id, callback); - if (!Meteor.settings) { - return; - } - if (_id === '*') { - return Object.keys(Meteor.settings).forEach((key) => { - const value = Meteor.settings[key]; - callback(key, value); - }); - } - if (_.isRegExp(_id) && Meteor.settings) { - return Object.keys(Meteor.settings).forEach((key) => { - if (!_id.test(key)) { - return; - } - const value = Meteor.settings[key]; - callback(key, value); - }); - } - return Meteor.settings[_id] != null && callback(_id, Meteor.settings[_id]); - } else { - if (!Meteor.settings) { - return; - } - if (_.isRegExp(_id)) { - return Object.keys(Meteor.settings).reduce((items, key) => { - const value = Meteor.settings[key]; - if (_id.test(key)) { - items.push({ - key, - value, - }); - } - return items; - }, []); - } - return Meteor.settings && Meteor.settings[_id]; - } - }, - set(_id, value, callback) { - return Meteor.call('saveSetting', _id, value, callback); - }, - batchSet(settings, callback) { - // async -> sync - // http://daemon.co.za/2012/04/simple-async-with-only-underscore/ - const save = function(setting) { - return function(callback) { - return Meteor.call('saveSetting', setting._id, setting.value, setting.editor, callback); - }; - }; - const actions = _.map(settings, (setting) => save(setting)); - return _(actions).reduceRight(_.wrap, (err, success) => callback(err, success))(); - }, - load(key, value, initialLoad) { - ['*', key].forEach((item) => { - if (RocketChat.settings.callbacks[item]) { - RocketChat.settings.callbacks[item].forEach((callback) => callback(key, value, initialLoad)); - } - }); - Object.keys(RocketChat.settings.regexCallbacks).forEach((cbKey) => { - const cbValue = RocketChat.settings.regexCallbacks[cbKey]; - if (!cbValue.regex.test(key)) { - return; - } - cbValue.callbacks.forEach((callback) => callback(key, value, initialLoad)); - }); - }, - onload(key, callback) { - // if key is '*' - // for key, value in Meteor.settings - // callback key, value, false - // else if Meteor.settings?[_id]? - // callback key, Meteor.settings[_id], false - const keys = [].concat(key); - keys.forEach((k) => { - if (_.isRegExp(k)) { - RocketChat.settings.regexCallbacks[name = k.source] = RocketChat.settings.regexCallbacks[name = k.source] || { - regex: k, - callbacks: [], - }; - RocketChat.settings.regexCallbacks[k.source].callbacks.push(callback); - } else { - RocketChat.settings.callbacks[k] = RocketChat.settings.callbacks[k] || []; - RocketChat.settings.callbacks[k].push(callback); - } - }); - }, -}; +RocketChat.settings = settings; diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index d055661ffbbc..b81ad6206f9f 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -32,6 +32,7 @@ Package.onUse(function(api) { api.use('rocketchat:version'); api.use('rocketchat:logger'); api.use('rocketchat:mailer'); + api.use('rocketchat:settings'); api.use('mizzao:timesync'); api.use('rocketchat:custom-oauth'); api.use('konecty:multiple-instances-status'); diff --git a/packages/rocketchat-settings/client/index.js b/packages/rocketchat-settings/client/index.js new file mode 100644 index 000000000000..8f93e01fb4f4 --- /dev/null +++ b/packages/rocketchat-settings/client/index.js @@ -0,0 +1,5 @@ +import { settings } from '../lib/settings'; + +export { + settings, +}; diff --git a/packages/rocketchat-settings/lib/settings.js b/packages/rocketchat-settings/lib/settings.js new file mode 100644 index 000000000000..35b08414514f --- /dev/null +++ b/packages/rocketchat-settings/lib/settings.js @@ -0,0 +1,97 @@ +import { Meteor } from 'meteor/meteor'; +import _ from 'underscore'; + +export const settings = { + callbacks: {}, + regexCallbacks: {}, + ts: new Date, + get(_id, callback) { + if (callback != null) { + settings.onload(_id, callback); + if (!Meteor.settings) { + return; + } + if (_id === '*') { + return Object.keys(Meteor.settings).forEach((key) => { + const value = Meteor.settings[key]; + callback(key, value); + }); + } + if (_.isRegExp(_id) && Meteor.settings) { + return Object.keys(Meteor.settings).forEach((key) => { + if (!_id.test(key)) { + return; + } + const value = Meteor.settings[key]; + callback(key, value); + }); + } + return Meteor.settings[_id] != null && callback(_id, Meteor.settings[_id]); + } else { + if (!Meteor.settings) { + return; + } + if (_.isRegExp(_id)) { + return Object.keys(Meteor.settings).reduce((items, key) => { + const value = Meteor.settings[key]; + if (_id.test(key)) { + items.push({ + key, + value, + }); + } + return items; + }, []); + } + return Meteor.settings && Meteor.settings[_id]; + } + }, + set(_id, value, callback) { + return Meteor.call('saveSetting', _id, value, callback); + }, + batchSet(settings, callback) { + // async -> sync + // http://daemon.co.za/2012/04/simple-async-with-only-underscore/ + const save = function(setting) { + return function(callback) { + return Meteor.call('saveSetting', setting._id, setting.value, setting.editor, callback); + }; + }; + const actions = _.map(settings, (setting) => save(setting)); + return _(actions).reduceRight(_.wrap, (err, success) => callback(err, success))(); + }, + load(key, value, initialLoad) { + ['*', key].forEach((item) => { + if (settings.callbacks[item]) { + settings.callbacks[item].forEach((callback) => callback(key, value, initialLoad)); + } + }); + Object.keys(settings.regexCallbacks).forEach((cbKey) => { + const cbValue = settings.regexCallbacks[cbKey]; + if (!cbValue.regex.test(key)) { + return; + } + cbValue.callbacks.forEach((callback) => callback(key, value, initialLoad)); + }); + }, + onload(key, callback) { + // if key is '*' + // for key, value in Meteor.settings + // callback key, value, false + // else if Meteor.settings?[_id]? + // callback key, Meteor.settings[_id], false + const keys = [].concat(key); + keys.forEach((k) => { + if (_.isRegExp(k)) { + settings.regexCallbacks[name = k.source] = settings.regexCallbacks[name = k.source] || { + regex: k, + callbacks: [], + }; + settings.regexCallbacks[k.source].callbacks.push(callback); + } else { + settings.callbacks[k] = settings.callbacks[k] || []; + settings.callbacks[k].push(callback); + } + }); + }, +}; diff --git a/packages/rocketchat-settings/package.js b/packages/rocketchat-settings/package.js new file mode 100644 index 000000000000..9d63fec60647 --- /dev/null +++ b/packages/rocketchat-settings/package.js @@ -0,0 +1,14 @@ +Package.describe({ + name: 'rocketchat:settings', + version: '0.0.1', + summary: '', + git: '', +}); + +Package.onUse(function(api) { + api.use([ + 'ecmascript', + ]); + api.mainModule('client/index.js', 'client'); + api.mainModule('server/index.js', 'server'); +}); diff --git a/packages/rocketchat-settings/server/index.js b/packages/rocketchat-settings/server/index.js new file mode 100644 index 000000000000..8f93e01fb4f4 --- /dev/null +++ b/packages/rocketchat-settings/server/index.js @@ -0,0 +1,5 @@ +import { settings } from '../lib/settings'; + +export { + settings, +};