Skip to content

Commit

Permalink
fix(parsing): parsing www.github.com urls
Browse files Browse the repository at this point in the history
fixes #15
  • Loading branch information
bahmutov committed Dec 1, 2015
1 parent fab9a7a commit a713009
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 45 deletions.
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@
"marked": "0.3.5",
"marked-terminal": "https://github.com/mikaelbr/marked-terminal.git#35f6ddac9d9f32b11e85ceb6bc5f42642f06e456",
"marked-to-md": "1.0.1",
"parse-github-repo-url": "git+https://github.com/bahmutov/parse-github-repo-url.git#38adb1190c3015c4c98e8feea5d5120e2fb5f00a",
"parse-github-repo-url": "https://github.com/bahmutov/parse-github-repo-url.git#52c8b013e1ab3fa4ad8e305e8afeb9109313dc31",
"really-need": "1.7.2",
"simple-get": "1.4.3",
"update-notifier": "0.5.0"
},
Expand All @@ -70,7 +71,8 @@
"npm run example-npm",
"npm run example-github",
"npm run example-es6-docs",
"npm run test-search-in-text"
"npm run test-search-in-text",
"npm run test-hr"
],
"pre-push": [
"npm run size",
Expand All @@ -81,7 +83,6 @@
}
},
"devDependencies": {
"describe-it": "1.7.0",
"eslint": "1.10.1",
"exact-semver": "1.2.0",
"git-issues": "1.2.0",
Expand Down
9 changes: 6 additions & 3 deletions src/find-section-spec.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
var la = require('lazy-ass');
var check = require('check-more-types');
var partJs = require('path').join(__dirname, 'find-section.js');
var describeIt = require('describe-it');
var marked = require('marked');
var quote = require('quote');

/* global describe, it */

// had to remove describe-it - it was conflicting with really-need
/*
var partJs = require('path').join(__dirname, 'find-section.js');
var marked = require('marked');
var describeIt = require('describe-it');
describeIt(partJs, 'findSectionByHeader(search, tokens)', function () {
it('is a function', function () {
la(check.fn(this.findSectionByHeader));
Expand Down Expand Up @@ -88,6 +90,7 @@ describeIt(partJs, 'var toTokens', function () {
la(tokens[3].text === 'bar', tokens);
});
});
*/

describe('find section', function () {
var find = require('./find-section');
Expand Down
29 changes: 14 additions & 15 deletions src/get-readme-spec.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
var la = require('lazy-ass');
var check = require('check-more-types');
var describeIt = require('describe-it');
var getReadmeFilename = require('path').join(__dirname, 'get-readme.js');
var utils = require('./utils');

/* global it */
/* global describe, it */

describeIt(getReadmeFilename, 'maybeGithubRepoName(name)', function () {
describe('maybeGithubRepoName(name)', function () {
it('returns true for common repos', function () {
var cases = [
'foo/bar',
Expand All @@ -14,48 +13,48 @@ describeIt(getReadmeFilename, 'maybeGithubRepoName(name)', function () {
'bevacqua/es6'
];
cases.forEach(function (c) {
la(this.maybeGithubRepoName(c), c);
}.bind(this));
la(utils.maybeGithubRepoName(c), c);
});
});

it('returns false for non repos', function () {
la(!this.maybeGithubRepoName('foo/bar/baz'));
la(!this.maybeGithubRepoName('[email protected]:bahmutov/object-fitter.git'));
la(!utils.maybeGithubRepoName('foo/bar/baz'));
la(!utils.maybeGithubRepoName('[email protected]:bahmutov/object-fitter.git'));
});
});

describeIt(getReadmeFilename, 'maybeGithubRepoUrl(name)', function () {
describe('maybeGithubRepoUrl(name)', function () {
it('returns true for common repo urls', function () {
var cases = [
'https://github.com/bevacqua/es6',
'[email protected]:bevacqua/es6.git'
];
cases.forEach(function (c) {
la(this.maybeGithubRepoUrl(c), c);
}.bind(this));
la(utils.maybeGithubRepoUrl(c), c);
});
});
});

describeIt(getReadmeFilename, 'parseGithub(url)', function () {
describe('parseGithub(url)', function () {
it('parses es6 repo url', function () {
var url = 'https://github.com/bevacqua/es6';
var parsed = this.parseGithub(url);
var parsed = utils.parseGithub(url);
la(check.object(parsed), parsed);
la(parsed.user === 'bevacqua', 'invalid username', parsed);
la(parsed.repo === 'es6', 'invalid repo', parsed);
});

it('parses es6 .git repo url', function () {
var url = '[email protected]:bevacqua/es6.git';
var parsed = this.parseGithub(url);
var parsed = utils.parseGithub(url);
la(check.object(parsed), parsed);
la(parsed.user === 'bevacqua', 'invalid username', parsed);
la(parsed.repo === 'es6', 'invalid repo', parsed);
});

it('parses user/repo format', function () {
var url = 'bevacqua/es6';
var parsed = this.parseGithub(url);
var parsed = utils.parseGithub(url);
la(check.object(parsed), parsed);
la(parsed.user === 'bevacqua', 'invalid username', parsed);
la(parsed.repo === 'es6', 'invalid repo', parsed);
Expand Down
47 changes: 23 additions & 24 deletions src/get-readme.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
var log = require('debug')('manpm');
var la = require('lazy-ass');
var check = require('check-more-types');
var parseGithubRepoUrl = require('parse-github-repo-url');
var utils = require('./utils');

// working around github-url-to-object used inside get-package-readme
// that cannot handle www.github.com urls
/* eslint no-undef:0 */
require = require('really-need');
require('github-url-to-object', {
post: function () {
return function gh(url) {
log('parsing github url %s ourselves', url);
var parsed = parseGithubRepoUrl(url);
return {
user: parsed[0],
repo: parsed[1]
};
};
}
});

var Promise = require('bluebird');
var getReadmeFile = Promise.promisify(require('get-package-readme'));
var simpleGet = require('simple-get');
var parseGithubRepoUrl = require('parse-github-repo-url');

function get(url) {
return new Promise(function (resolve, reject) {
Expand All @@ -22,26 +41,6 @@ function get(url) {
});
}

// TODO move to kensho/check-more-types
function maybeGithubRepoName(name) {
var regular = /^[a-zA-Z0-9]+\/[a-zA-Z0-9\-\.]+$/;
return regular.test(name);
}

function maybeGithubRepoUrl(name) {
return Array.isArray(parseGithubRepoUrl(name));
}

function parseGithub(url) {
log('parsing github url', url);
var parsed = parseGithubRepoUrl(url);
la(check.array(parsed), 'could not parse github url', url);
return {
user: parsed[0],
repo: parsed[1]
};
}

var githubSchema = {
user: check.unemptyString,
repo: check.unemptyString
Expand All @@ -64,7 +63,7 @@ function formGithubUrl(info, filename) {
function getReadmeFromGithub(name) {
la(check.unemptyString(name), 'missing github info', name);
log('getting readme directly from github for', name);
var parsed = parseGithub(name);
var parsed = utils.parseGithub(name);
la(isValidGithubInfo(parsed), parsed, 'from', name);

var fullUrl = formGithubUrl(parsed, 'README.md');
Expand All @@ -84,10 +83,10 @@ function getReadmeFromGithub(name) {
function getReadme(name) {
la(check.unemptyString(name), 'missing name');

if (maybeGithubRepoName(name)) {
if (utils.maybeGithubRepoName(name)) {
log('fetching README for github repo', name);
return getReadmeFromGithub(name);
} else if (maybeGithubRepoUrl(name)) {
} else if (utils.maybeGithubRepoUrl(name)) {
log('fetching README for github url', name);
return getReadmeFromGithub(name);
} else {
Expand Down
30 changes: 30 additions & 0 deletions src/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
var log = require('debug')('manpm');
var la = require('lazy-ass');
var check = require('check-more-types');
var parseGithubRepoUrl = require('parse-github-repo-url');

// TODO move to kensho/check-more-types
function maybeGithubRepoName(name) {
var regular = /^[a-zA-Z0-9]+\/[a-zA-Z0-9\-\.]+$/;
return regular.test(name);
}

function maybeGithubRepoUrl(name) {
return Array.isArray(parseGithubRepoUrl(name));
}

function parseGithub(url) {
log('parsing github url', url);
var parsed = parseGithubRepoUrl(url);
la(check.array(parsed), 'could not parse github url', url);
return {
user: parsed[0],
repo: parsed[1]
};
}

module.exports = {
maybeGithubRepoName: maybeGithubRepoName,
maybeGithubRepoUrl: maybeGithubRepoUrl,
parseGithub: parseGithub
};

0 comments on commit a713009

Please sign in to comment.