jenkins-bot has submitted this change and it was merged.

Change subject: Factor out getConfigPromise() method.
......................................................................


Factor out getConfigPromise() method.

Use `Promise.method` to ensure that any synchronous exceptions thrown
(either intentionally or by programmer error) get turned into rejected
Promises.  This also lets us use synchronous return/throw in the body for
readability.  Using return/throw also makes the control flow clearer,
ensuring that future maintainers don't have to worry about multiple
assignment.

Change-Id: I4d7bf027b9cc09b24859f6cf9dae3290e6e2530f
---
M lib/mediawiki.parser.environment.js
1 file changed, 35 insertions(+), 34 deletions(-)

Approvals:
  Arlolra: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/mediawiki.parser.environment.js 
b/lib/mediawiki.parser.environment.js
index c41d317..34326c7 100644
--- a/lib/mediawiki.parser.environment.js
+++ b/lib/mediawiki.parser.environment.js
@@ -278,45 +278,46 @@
        var nothingToDo = {};  // unique marker value
        var parsoid = env.conf.parsoid;
 
-       var getConfigPromise, uri;
-       if (!prefix) {
-               getConfigPromise = Promise.reject(new Error('Wiki prefix not 
provided'));
-       } else {
-               uri = parsoid.interwikiMap.get(prefix);
-               if (!uri) {
-                       // SSS: Ugh! Looks like parser tests use a prefix
-                       // that is not part of the interwikiMap -- so we
-                       // cannot crash with an error.  Hence defaulting
-                       // to enwiki api which is quite odd.  Does the
-                       // interwikiMap need updating or is this use-case
-                       // valid outside of parserTests??
-                       env.log('error', 'Did not find api uri for ' +
-                                       prefix + '; defaulting to enwiki');
-                       uri = parsoid.interwikiMap.get('enwiki');
-               }
-               parsoid.apiURI = uri;
-
-               if (env.confCache[prefix]) {
-                       env.conf.wiki = env.confCache[prefix];
-                       getConfigPromise = Promise.resolve(nothingToDo);
-               } else if (parsoid.fetchConfig) {
-                       getConfigPromise = ConfigRequest
-                               .promise(uri, env, env.getAPIProxy(prefix));
+       var uri;
+       var getConfigPromise = Promise.method(function() {
+               if (!prefix) {
+                       throw new Error('Wiki prefix not provided');
                } else {
-                       // Load the config from cached config on disk
-                       var localConfigFile = './baseconfig/' + prefix + 
'.json';
-                       var localConfig = require(localConfigFile);
-                       if (localConfig && localConfig.query) {
-                               getConfigPromise = 
Promise.resolve(localConfig.query);
+                       uri = parsoid.interwikiMap.get(prefix);
+                       if (!uri) {
+                               // SSS: Ugh! Looks like parser tests use a 
prefix
+                               // that is not part of the interwikiMap -- so we
+                               // cannot crash with an error.  Hence defaulting
+                               // to enwiki api which is quite odd.  Does the
+                               // interwikiMap need updating or is this 
use-case
+                               // valid outside of parserTests??
+                               env.log('error', 'Did not find api uri for ' +
+                                               prefix + '; defaulting to 
enwiki');
+                               uri = parsoid.interwikiMap.get('enwiki');
+                       }
+                       parsoid.apiURI = uri;
+
+                       if (env.confCache[prefix]) {
+                               env.conf.wiki = env.confCache[prefix];
+                               return nothingToDo;
+                       } else if (parsoid.fetchConfig) {
+                               return ConfigRequest
+                                       .promise(uri, env, 
env.getAPIProxy(prefix));
                        } else {
-                               getConfigPromise = Promise.reject(
-                                       new Error('Could not read valid config 
from file: ' +
-                                                localConfigFile));
+                               // Load the config from cached config on disk
+                               var localConfigFile = './baseconfig/' + prefix 
+ '.json';
+                               var localConfig = require(localConfigFile);
+                               if (localConfig && localConfig.query) {
+                                       return localConfig.query;
+                               } else {
+                                       throw new Error('Could not read valid 
config from file: ' +
+                                               localConfigFile);
+                               }
                        }
                }
-       }
+       });
 
-       return getConfigPromise.then(function(resultConf) {
+       return getConfigPromise().then(function(resultConf) {
                if (resultConf === nothingToDo) { return; }
                env.conf.wiki = new WikiConfig(env, resultConf, prefix, uri,
                                env.getAPIProxy(prefix));

-- 
To view, visit https://gerrit.wikimedia.org/r/206481
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I4d7bf027b9cc09b24859f6cf9dae3290e6e2530f
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Cscott <canan...@wikimedia.org>
Gerrit-Reviewer: Arlolra <abrea...@wikimedia.org>
Gerrit-Reviewer: Subramanya Sastry <ssas...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to