Skip to content

Commit e49261d

Browse files
committed
check for tutorial package updates
1 parent 9688277 commit e49261d

File tree

13 files changed

+93
-64
lines changed

13 files changed

+93
-64
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
44

55
## [0.8.0] - in progress
66
- save tutorial progress to localStorage
7+
- check for tutorial package updates
78

89
## [0.7.0] - 2016-04-23
910

lib/reducers/checks/verify.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use strict";
22
var check_system_1 = require('./check-system');
33
var store_1 = require('../../store');
4-
var check_tutorials_1 = require('../tutorials/check-tutorials');
4+
var check_1 = require('../tutorials/check');
55
var result = function (x) { return x; };
66
function allTrue(obj) {
77
return Object.values(obj).every(function (x) { return x === true; });
@@ -15,7 +15,7 @@ function setupVerify() {
1515
packageJson = !!pj;
1616
}
1717
if (dir && packageJson) {
18-
tutorial = !!check_tutorials_1.searchForTutorials(pj.dependencies).length || !!check_tutorials_1.searchForTutorials(pj.devDependencies).length;
18+
tutorial = !!check_1.searchForTutorials(pj.dependencies).length || !!check_1.searchForTutorials(pj.devDependencies).length;
1919
}
2020
var checks = {
2121
system: {

lib/reducers/tutorials/check-tutorials.js renamed to lib/reducers/tutorials/check.js

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var fs_1 = require('fs');
44
var exists_1 = require('../../services/exists');
55
var is_tutorial_1 = require('./is-tutorial');
66
var store_1 = require('../../store');
7+
var update_1 = require('./update');
78
function searchForTutorials(deps) {
89
if (!!deps && Object.keys(deps).length > 0) {
910
var dir_1 = store_1.default.getState().dir;
@@ -23,6 +24,7 @@ function searchForTutorials(deps) {
2324
return {
2425
name: name,
2526
version: version,
27+
latest: !update_1.canUpdateTutorial(name, version)
2628
};
2729
}));
2830
}

lib/reducers/tutorials/index.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
"use strict";
22
var _types_1 = require('../../actions/_types');
3-
var update_tutorial_1 = require('./update-tutorial');
3+
var update_1 = require('./update');
44
var store_1 = require('../../store');
5-
var check_tutorials_1 = require('./check-tutorials');
5+
var check_1 = require('./check');
66
function tutorialsReducer(tutorials, action) {
77
if (tutorials === void 0) { tutorials = []; }
88
switch (action.type) {
99
case _types_1.TUTORIAL_UPDATE:
10-
update_tutorial_1.tutorialUpdate(action.payload.name);
10+
update_1.tutorialUpdate(action.payload.name);
1111
case _types_1.TUTORIALS_FIND:
1212
var packageJson = store_1.default.getState().packageJson;
1313
return ([]
14-
.concat(check_tutorials_1.searchForTutorials(packageJson.dependencies))
15-
.concat(check_tutorials_1.searchForTutorials(packageJson.devDependencies)));
14+
.concat(check_1.searchForTutorials(packageJson.dependencies))
15+
.concat(check_1.searchForTutorials(packageJson.devDependencies)));
1616
default:
1717
return tutorials;
1818
}

lib/reducers/tutorials/update-tutorial.js

-11
This file was deleted.

lib/reducers/tutorials/update.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"use strict";
2+
var command_line_1 = require('../../services/command-line');
3+
var store_1 = require('../../store');
4+
var actions_1 = require('../../actions');
5+
function tutorialUpdate(name) {
6+
command_line_1.default('npm', "install --save-dev " + name)
7+
.then(function () {
8+
store_1.default.dispatch(actions_1.tutorialsFind());
9+
});
10+
}
11+
exports.tutorialUpdate = tutorialUpdate;
12+
function canUpdateTutorial(name, currentVersion) {
13+
if (!navigator.onLine) {
14+
return false;
15+
}
16+
return (command_line_1.default('npm', "outdated " + name).then(function (res) {
17+
console.log(res);
18+
if (res.length > 0) {
19+
var linked = res.match(/[0-9\.]+\s+linked/);
20+
if (linked) {
21+
return false;
22+
}
23+
var match = res.match(/[0-9\.]+\s+[0-9\.]+\s+([0-9\.]+)/);
24+
if (match.length >= 2) {
25+
return true;
26+
}
27+
}
28+
return false;
29+
}));
30+
}
31+
exports.canUpdateTutorial = canUpdateTutorial;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"atom": ">=1.0.0 <2.0.0"
3939
},
4040
"dependencies": {
41-
"classnames": "2.2.3",
41+
"classnames": "2.2.4",
4242
"highlights": "1.3.1",
4343
"marked": "0.3.5",
4444
"material-ui": "0.15.0-beta.2",

src/reducers/checks/verify.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {npmMinVersion, nodeMinVersion} from './check-system';
22
import store from '../../store';
3-
import {searchForTutorials} from '../tutorials/check-tutorials';
3+
import {searchForTutorials} from '../tutorials/check';
44

55
const result = x => x;
66
function allTrue(obj: Object): boolean {

src/reducers/tutorials/check-tutorials.ts renamed to src/reducers/tutorials/check.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {readFileSync} from 'fs';
33
import {fileExists} from '../../services/exists';
44
import {isTutorial, tutorialError} from './is-tutorial';
55
import store from '../../store';
6-
// import {canUpdateTutorial} from './update-tutorial';
6+
import {canUpdateTutorial} from './update';
77

88
export function searchForTutorials(deps: Object): Tutorial.Info[] {
99
if (!!deps && Object.keys(deps).length > 0) {
@@ -25,14 +25,14 @@ export function searchForTutorials(deps: Object): Tutorial.Info[] {
2525
}
2626

2727
let tutorialPackageJson = JSON.parse(readFileSync(pathToTutorialPackageJson, 'utf8'));
28-
const version = tutorialPackageJson.version;
28+
const version = tutorialPackageJson.version;
2929

30-
return {
31-
name,
32-
version,
33-
// latest: !!canUpdateTutorial(name, version)
34-
};
35-
}));
30+
return {
31+
name,
32+
version,
33+
latest: !canUpdateTutorial(name, version)
34+
};
35+
}));
3636
} else {
3737
return [];
3838
}

src/reducers/tutorials/index.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import {TUTORIAL_UPDATE, TUTORIALS_FIND} from '../../actions/_types';
2-
import {tutorialUpdate} from './update-tutorial';
2+
import {tutorialUpdate} from './update';
33
import store from '../../store';
4-
import {searchForTutorials} from './check-tutorials';
4+
import {searchForTutorials} from './check';
55

66
export default function tutorialsReducer(
77
tutorials = [], action: Action
88
): Tutorial.Info[] {
99
switch (action.type) {
1010
case TUTORIAL_UPDATE:
1111
tutorialUpdate(action.payload.name);
12-
/* falls through */
12+
/* falls through */
1313
case TUTORIALS_FIND:
14-
const packageJson = store.getState().packageJson;
15-
return ([]
16-
.concat(searchForTutorials(packageJson.dependencies))
17-
.concat(searchForTutorials(packageJson.devDependencies)));
14+
const packageJson = store.getState().packageJson;
15+
return ([]
16+
.concat(searchForTutorials(packageJson.dependencies))
17+
.concat(searchForTutorials(packageJson.devDependencies)));
1818
default:
1919
return tutorials;
2020
}

src/reducers/tutorials/update-tutorial.ts

-27
This file was deleted.

src/reducers/tutorials/update.ts

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import commandLine from '../../services/command-line';
2+
import store from '../../store';
3+
import {tutorialsFind} from '../../actions';
4+
5+
export function tutorialUpdate(name: string): void {
6+
commandLine('npm', `install --save-dev ${name}`)
7+
.then(() => {
8+
store.dispatch(tutorialsFind());
9+
});
10+
}
11+
12+
export function canUpdateTutorial(
13+
name: string, currentVersion: string
14+
): Promise<boolean> | boolean {
15+
if (!navigator.onLine) {
16+
return false;
17+
}
18+
return (commandLine('npm', `outdated ${name}`).then(
19+
(res: string) => {
20+
console.log(res);
21+
if (res.length > 0) {
22+
let linked = res.match(/[0-9\.]+\s+linked/);
23+
if (linked) { return false; }
24+
let match = res.match(/[0-9\.]+\s+[0-9\.]+\s+([0-9\.]+)/);
25+
if (match.length >= 2) {
26+
// return match[1];
27+
return true;
28+
}
29+
}
30+
return false;
31+
})
32+
);
33+
}

tsconfig.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@
106106
"src/reducers/test-run/test-result.ts",
107107
"src/reducers/tutorial/index.ts",
108108
"src/reducers/tutorial/tutorial-config.ts",
109-
"src/reducers/tutorials/check-tutorials.ts",
109+
"src/reducers/tutorials/check.ts",
110110
"src/reducers/tutorials/index.ts",
111111
"src/reducers/tutorials/is-tutorial.ts",
112-
"src/reducers/tutorials/update-tutorial.ts",
112+
"src/reducers/tutorials/update.ts",
113113
"src/services/command-line.ts",
114114
"src/services/exists.ts",
115115
"src/services/polyfills.ts",

0 commit comments

Comments
 (0)