Skip to content

Commit a9cf0ff

Browse files
committed
refactor checks into reducers
1 parent e7f12ef commit a9cf0ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+484
-232
lines changed

lib/actions/actionTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
exports.SET_PROJECT = 'SET_PROJECT';
3-
exports.SETUP_WARNING = 'SETUP_WARNING';
3+
exports.VERIFY_SETUP = 'VERIFY_SETUP';
44
exports.LOAD_TUTORIALS = 'LOAD_TUTORIALS';
55
exports.SET_ROUTE = 'SET_ROUTE';
66
exports.SET_PAGE = 'SET_PAGE';

lib/actions/actions.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ function setProject() {
66
return { type: Type.SET_PROJECT };
77
}
88
exports.setProject = setProject;
9-
function setupWarning(warning) {
10-
return { type: Type.SETUP_WARNING, payload: { warning: warning } };
9+
function verifySetup() {
10+
return { type: Type.VERIFY_SETUP };
1111
}
12-
exports.setupWarning = setupWarning;
12+
exports.verifySetup = verifySetup;
1313
function setProgress() {
1414
return { type: Type.SET_PROGRESS };
1515
}

lib/atom/main.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ var render_1 = require('../components/render');
33
var polyfills_1 = require('../services/polyfills');
44
var subscriptions_1 = require('./subscriptions');
55
var editor_1 = require('./editor');
6-
var setup_1 = require('../services/setup/setup');
6+
var store_1 = require('../store/store');
7+
var Action = require('../actions/actions');
78
var Main = (function () {
89
function Main() {
910
window.coderoad = {
1011
dir: null
1112
};
1213
polyfills_1.default();
1314
editor_1.setAtomGlobals();
14-
setup_1.verifySetupComplete();
15+
store_1.store.dispatch(Action.verifySetup());
1516
this.root = render_1.initRoot();
1617
}
1718
Main.prototype.activate = function () {

lib/components/start/setup.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ var _components_1 = require('../_components');
88
var setup_1 = require('../../services/setup/setup');
99
exports.SetupGuide = function (_a) {
1010
var warning = _a.warning;
11-
return (React.createElement("div", {className: 'cr-setup'}, React.createElement(list_1.default, null, React.createElement(Subheader_1.default, null, "Setup"), React.createElement(list_item_1.default, {key: warning.key}, React.createElement("h4", null, warning.title), React.createElement(_components_1.MarkdownText, {text: warning.text}))), React.createElement("br", null), !!warning.button ? React.createElement("div", {class: 'cr-setup-action'}, React.createElement(raised_button_1.default, {primary: true, label: warning.button, onTouchTap: warning.click}), React.createElement("br", null), React.createElement("br", null)) : null, !!warning.verify ? React.createElement("div", {class: 'cr-setup-action'}, React.createElement(raised_button_1.default, {label: "Verify " + warning.verify, secondary: true, onTouchTap: setup_1.verifySetupComplete}), React.createElement("br", null), React.createElement("br", null)) : null, React.createElement("div", {className: 'setup-guide'}, React.createElement("span", null, "Check the", React.createElement("a", {href: 'https://coderoad.github.io/docs#install'}, " ", React.createElement("strong", null, "Install Guide"))))));
11+
return (React.createElement("div", {className: 'cr-setup'}, React.createElement(list_1.default, null, React.createElement(Subheader_1.default, null, "Setup"), React.createElement(list_item_1.default, {key: warning.key}, React.createElement("h4", null, warning.title), React.createElement(_components_1.MarkdownText, {text: warning.text}))), React.createElement("br", null), !!warning.button ? React.createElement("div", {class: 'cr-setup-action'}, React.createElement(raised_button_1.default, {primary: true, label: warning.button, onTouchTap: warning.click}), React.createElement("br", null), React.createElement("br", null)) : null, !!warning.verify ? React.createElement("div", {class: 'cr-setup-action'}, React.createElement(raised_button_1.default, {label: "Verify " + warning.verify, secondary: true, onTouchTap: setup_1.verifySetupComplete}), React.createElement("br", null), React.createElement("br", null)) : null));
1212
};

lib/components/start/start.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/reducers/checks/check-setup.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"use strict";
2+
var tutorials_1 = require('../tutorials/tutorials');
3+
function hasDirectory() {
4+
return new Promise(function (resolve, reject) {
5+
var hasDirectory = !!window.coderoad.dir;
6+
if (!hasDirectory) {
7+
resolve(true);
8+
}
9+
else {
10+
resolve(true);
11+
}
12+
});
13+
}
14+
exports.hasDirectory = hasDirectory;
15+
function hasPackageJson() {
16+
return new Promise(function (resolve, reject) {
17+
var hasPackageJson = tutorials_1.packageJsonExists();
18+
if (!hasPackageJson) {
19+
resolve(true);
20+
}
21+
resolve(true);
22+
});
23+
}
24+
exports.hasPackageJson = hasPackageJson;
25+
function hasTutorialDep() {
26+
return new Promise(function (resolve, reject) {
27+
var packageJson = hasPackageJson ? tutorials_1.loadRootPackageJson() : null;
28+
var hasTutorialDep = !!packageJson && _tutorialInstalled(packageJson.dependencies) ||
29+
_tutorialInstalled(packageJson.devDependencies);
30+
if (!hasTutorialDep) {
31+
resolve(true);
32+
}
33+
resolve(true);
34+
});
35+
}
36+
exports.hasTutorialDep = hasTutorialDep;
37+
function _hasKeys(obj) {
38+
return Object.keys(obj).length > 0;
39+
}
40+
function _tutorialInstalled(location) {
41+
return !!location && _hasKeys(location) &&
42+
tutorials_1.searchForTutorials(location).length > 0;
43+
}

lib/reducers/checks/check-system.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"use strict";
2+
var command_line_1 = require('../../services/command-line');
3+
function npmVersionThreeOrLater() {
4+
var minVersion = 3;
5+
return new Promise(function (resolve, reject) {
6+
var threeOrLater = command_line_1.default('npm', '-v').then(function (res) { return parseInt(res, 10) >= minVersion; });
7+
if (!threeOrLater) {
8+
resolve(false);
9+
}
10+
else {
11+
resolve(true);
12+
}
13+
});
14+
}
15+
exports.npmVersionThreeOrLater = npmVersionThreeOrLater;

lib/reducers/checks/checks.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"use strict";
2+
var Type = require('../../actions/actionTypes');
3+
var setup_1 = require('./setup');
4+
var defaultChecks = {
5+
passed: false,
6+
system: {
7+
node: false,
8+
npm: false
9+
},
10+
setup: {
11+
dir: false,
12+
packageJson: false,
13+
tutorial: false
14+
}
15+
};
16+
function checksReducer(checks, action) {
17+
if (checks === void 0) { checks = defaultChecks; }
18+
switch (action.type) {
19+
case Type.VERIFY_SETUP:
20+
return setup_1.default();
21+
default:
22+
return checks;
23+
}
24+
}
25+
Object.defineProperty(exports, "__esModule", { value: true });
26+
exports.default = checksReducer;

lib/reducers/checks/setup-actions.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
var path = require('path');
3+
var editor_1 = require('../../atom/editor');
4+
var actions_1 = require('../../atom/actions');
5+
var setup_1 = require('./setup');
6+
var packageData = "{\n \"name\": \"demo\",\n \"dependencies\": {\n \"coderoad-functional-school\": \"^0.2.1\"\n }\n}";
7+
function createPackageJson() {
8+
var packagePath = path.join(window.coderoad.dir, 'package.json');
9+
return new Promise(function (resolve, reject) {
10+
editor_1.open(packagePath);
11+
setTimeout(function () {
12+
resolve();
13+
});
14+
}).then(function () {
15+
editor_1.set(packageData);
16+
setup_1.verifySetupComplete();
17+
});
18+
}
19+
exports.createPackageJson = createPackageJson;
20+
function openDirectory() {
21+
return actions_1.openFolder();
22+
}
23+
exports.openDirectory = openDirectory;
24+
function installTutorial() {
25+
return actions_1.openTerminal();
26+
}
27+
exports.installTutorial = installTutorial;

lib/reducers/checks/setup.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"use strict";
2+
var check_system_1 = require('./check-system');
3+
var check_setup_1 = require('./check-setup');
4+
function allTrue(obj) {
5+
return Object.values(obj).every(function (x) { return x === true; });
6+
}
7+
function verified(checks) {
8+
return allTrue(checks.system) && allTrue(checks.setup);
9+
}
10+
function result(x) {
11+
return x;
12+
}
13+
function verifySetup() {
14+
var checks = {
15+
system: {
16+
node: true,
17+
npm: check_system_1.npmVersionThreeOrLater().then(result)
18+
},
19+
setup: {
20+
dir: check_setup_1.hasDirectory().then(result),
21+
packageJson: check_setup_1.hasPackageJson().then(result),
22+
tutorial: check_setup_1.hasTutorialDep().then(result)
23+
}
24+
};
25+
checks.passed = verified(checks);
26+
return checks;
27+
}
28+
Object.defineProperty(exports, "__esModule", { value: true });
29+
exports.default = verifySetup;

lib/reducers/globals/globals.js

Whitespace-only changes.

lib/reducers/reducer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var run_tests_1 = require('./run-tests/run-tests');
1414
var editor_actions_1 = require('./editor-actions/editor-actions');
1515
var tutorials_1 = require('./tutorials/tutorials');
1616
var log_1 = require('./log/log');
17-
var warning_1 = require('./warning/warning');
17+
var checks_1 = require('./checks/checks');
1818
Object.defineProperty(exports, "__esModule", { value: true });
1919
exports.default = redux_1.combineReducers({
2020
project: project_1.default,
@@ -31,5 +31,5 @@ exports.default = redux_1.combineReducers({
3131
editorActions: editor_actions_1.default,
3232
tutorials: tutorials_1.default,
3333
log: log_1.default,
34-
warning: warning_1.default
34+
checks: checks_1.default
3535
});
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
"use strict";
2+
var path = require('path');
3+
var fs = require('fs');
4+
var exists_1 = require('../../services/exists');
5+
var tutorialError = 'This is an error with the tutorial itself';
6+
function packageJsonExists() {
7+
var pathToPackageJson = path.join(window.coderoad.dir, 'package.json');
8+
return exists_1.fileExists(pathToPackageJson);
9+
}
10+
exports.packageJsonExists = packageJsonExists;
11+
function loadRootPackageJson() {
12+
var pathToPackageJson = path.join(window.coderoad.dir, 'package.json');
13+
if (exists_1.fileExists(pathToPackageJson)) {
14+
return JSON.parse(fs.readFileSync(pathToPackageJson, 'utf8'));
15+
}
16+
return null;
17+
}
18+
exports.loadRootPackageJson = loadRootPackageJson;
19+
function _isTutorial(name) {
20+
var pathToTutorialPackageJson = path.join(window.coderoad.dir, 'node_modules', name, 'package.json');
21+
if (!exists_1.fileExists(pathToTutorialPackageJson)) {
22+
console.log("Error with " + name + ": no package.json file found. " + tutorialError);
23+
return false;
24+
}
25+
var packageJson = JSON.parse(fs.readFileSync(pathToTutorialPackageJson, 'utf8'));
26+
if (!packageJson.main && packageJson.main.match(/coderoad.json$/)) {
27+
console.log("Error with " + name + ": main does not load a coderoad.json file. " + tutorialError);
28+
return false;
29+
}
30+
var pathToCoderoadJson = path.join(window.coderoad.dir, 'node_modules', name, packageJson.main);
31+
if (!exists_1.fileExists(pathToCoderoadJson)) {
32+
console.log("Error with " + name + ": no coderoad.json file. " + tutorialError);
33+
return false;
34+
}
35+
;
36+
if (!packageJson.config || !packageJson.config.testRunner) {
37+
console.log("Error with " + name + ": no test runner specified. " + tutorialError);
38+
return false;
39+
}
40+
return true;
41+
}
42+
function searchForTutorials(deps) {
43+
if (!!deps && Object.keys(deps).length > 0) {
44+
return Object.keys(deps)
45+
.filter(function (name) { return _isTutorial(name); })
46+
.map(function (name) {
47+
var pathToTutorialPackageJson = path.join(window.coderoad.dir, 'node_modules', name, 'package.json');
48+
if (!exists_1.fileExists(pathToTutorialPackageJson)) {
49+
console.log("Error with " + name + ": no package.json file found. " + tutorialError);
50+
return {
51+
name: name,
52+
version: 'NOT INSTALLED'
53+
};
54+
}
55+
var packageJson = JSON.parse(fs.readFileSync(pathToTutorialPackageJson, 'utf8'));
56+
return {
57+
name: name,
58+
version: packageJson.version,
59+
latest: true
60+
};
61+
});
62+
}
63+
else {
64+
return [];
65+
}
66+
}
67+
exports.searchForTutorials = searchForTutorials;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
"use strict";
2+
function canUpdateTutorial(name, currentVersion) {
3+
}
4+
exports.canUpdateTutorial = canUpdateTutorial;

lib/services/package.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
var path = require('path');
3-
var set_globals_1 = require('./setup/set-globals');
3+
var set_globals_1 = require('./set-globals');
44
var Action = require('../actions/actions');
55
var _base_1 = require('../_base');
66
var _ = require('lodash');

lib/services/polyfills.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
"use strict";
22
function loadPolyfills() {
3+
if (typeof Object.values !== 'function') {
4+
Object.values = function (obj) {
5+
var vals = [];
6+
for (var key in obj) {
7+
vals.push(obj[key]);
8+
}
9+
return vals;
10+
};
11+
}
312
if (typeof Object.assign !== 'function') {
413
(function () {
514
Object.assign = function (target) {

lib/services/set-globals.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"use strict";
2+
var path = require('path');
3+
var exists_1 = require('./exists');
4+
function setGlobals(config) {
5+
window.coderoad = Object.assign(window.coderoad, {
6+
tutorial: config.name,
7+
suffix: config.config.testSuffix.substring(config.config.testSuffix.lastIndexOf('.') + 1, config.config.testSuffix.length),
8+
tutorialDir: path.join(window.coderoad.dir, 'node_modules', config.name, config.config.testDir),
9+
testRunner: config.config.testRunner,
10+
testRunnerOptions: config.config.testRunnerOptions || {}
11+
});
12+
loadRepo(config);
13+
loadRunnerDep(config);
14+
}
15+
exports.setGlobals = setGlobals;
16+
function loadRunnerDep(config) {
17+
var flatDep = path.join(window.coderoad.dir, 'node_modules', config.config.testRunner, 'package.json');
18+
var treeDep = path.join(window.coderoad.dir, 'node_modules', config.name, 'node_modules', config.config.testRunner, 'package.json');
19+
var runnerMain;
20+
var runnerRoot;
21+
if (exists_1.fileExists(flatDep)) {
22+
runnerMain = require(flatDep).main;
23+
runnerRoot = flatDep;
24+
}
25+
else if (exists_1.fileExists(treeDep)) {
26+
runnerMain = require(treeDep).main;
27+
runnerRoot = treeDep;
28+
}
29+
else {
30+
var message = 'Error loading test runner. Post an issue. https://github.com/coderoad/atom-coderoad/issues';
31+
console.log(message);
32+
throw message;
33+
}
34+
var slash = window.coderoad.win ? '\\' : '/';
35+
runnerMain = path.join.apply(null, runnerMain.split(slash));
36+
runnerRoot = runnerRoot.substring(0, runnerRoot.lastIndexOf(slash));
37+
var pathToMain = path.join(runnerRoot, runnerMain);
38+
if (!!require(pathToMain).default) {
39+
window.coderoad.runner = require(pathToMain).default;
40+
}
41+
else {
42+
window.coderoad.runner = require(pathToMain);
43+
}
44+
}
45+
function loadRepo(config) {
46+
if (config.bugs && config.bugs.url) {
47+
window.coderoad.issuesPath = config.bugs.url;
48+
}
49+
if (config.repo && config.repo.url) {
50+
var repo = config.repo.url;
51+
if (!!repo.match(/\.git$/)) {
52+
repo = repo.slice(0, repo.length - 4);
53+
}
54+
window.coderoad.repo = repo;
55+
}
56+
window.coderoad.edit = config.config.edit && !!window.coderoad.repo || false;
57+
}

lib/store/init.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
var store_1 = require('./store');
3+
var Action = require('../actions/actions');
4+
store_1.store.dispatch(Action.setGlobals);
5+
store_1.store.dispatch(Action.verifySetup);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"material-ui": "0.15.0-alpha.2",
4646
"react": "15.0.1",
4747
"react-dom": "15.0.1",
48-
"react-redux": "4.4.2",
48+
"react-redux": "4.4.4",
4949
"react-tap-event-plugin": "1.0.0",
5050
"redux": "3.4.0"
5151
},

src/actions/actionTypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Project
22
export const SET_PROJECT = 'SET_PROJECT';
3-
export const SETUP_WARNING = 'SETUP_WARNING';
3+
export const VERIFY_SETUP = 'VERIFY_SETUP';
44
export const LOAD_TUTORIALS = 'LOAD_TUTORIALS';
55

66
// Navigation

0 commit comments

Comments
 (0)