relateurl
Advanced tools
Comparing version 0.2.3 to 0.2.4
@@ -25,2 +25,3 @@ "use strict"; | ||
schemeRelative: true, | ||
site: undefined, | ||
slashesDenoteHost: true | ||
@@ -54,2 +55,3 @@ }); | ||
options = getOptions(options, this.options); | ||
from = from || options.site; | ||
from = parseUrl.from(from, options, this.from); | ||
@@ -83,5 +85,3 @@ | ||
{ | ||
var instance = new RelateUrl(from, options); | ||
return instance.relate(to); | ||
return new RelateUrl().relate(from, to, options); | ||
} | ||
@@ -88,0 +88,0 @@ |
{ | ||
"name": "relateurl", | ||
"description": "Minify URLs by converting them from absolute to relative.", | ||
"version": "0.2.3", | ||
"version": "0.2.4", | ||
"homepage": "https://github.com/stevenvachon/relateurl", | ||
@@ -6,0 +6,0 @@ "author": { |
@@ -85,2 +85,8 @@ # relateurl [![NPM Version](http://badge.fury.io/js/relateurl.svg)](http://badge.fury.io/js/relateurl) [![Build Status](https://secure.travis-ci.org/stevenvachon/relateurl.svg)](http://travis-ci.org/stevenvachon/relateurl) | ||
#### options.site | ||
Type: `String` | ||
Default value: `undefined` | ||
An options-based version of the [`from`](#examples) argument. If both are specified, `from` takes priority. | ||
#### options.slashesDenoteHost | ||
@@ -123,2 +129,3 @@ Type: `Boolean` | ||
## Release History | ||
* 0.2.4 added `options.site` | ||
* 0.2.3 added browserify npm-script | ||
@@ -131,4 +138,4 @@ * 0.2.2 removed task runner | ||
## Roadmap | ||
* 0.2.4 shorten absolute URLs like `http://domain.com/?var` to `http://domain.com?var`, etc | ||
* 0.2.5 decipher and return invalid input (special cases) to complete test suite | ||
* 0.2.5 shorten absolute URLs like `http://domain.com/?var` to `http://domain.com?var`, etc | ||
* 0.2.6 decipher and return invalid input (special cases) to complete test suite | ||
* 0.3.0 test `options.slashesDenoteHost=false`, add something like `options.externalDirectoryIndexes=[]` for external sites | ||
@@ -135,0 +142,0 @@ |
@@ -10,199 +10,490 @@ var expect = require("chai").expect; | ||
describe("Default and overriding options", function() | ||
describe("API variations", function() | ||
{ | ||
after( function() | ||
describe("of arguments", function() | ||
{ | ||
console.log(" (Processed "+urlCount+" URLs)"); | ||
}); | ||
it("should work with reusable instances", function(done) | ||
{ | ||
var data,urls,instance; | ||
data = | ||
var data = | ||
{ | ||
site: "http://www.domain.com/asdf/", | ||
href: "http://www.domain.com/asdf/asdf", | ||
expected_ABSOLUTE: "http://www.domain.com/asdf/asdf", | ||
expected_ROOT_RELATIVE: "/asdf/asdf", | ||
expected_SHORTEST: "asdf" | ||
site: "http://www.domain.com/asdf/", | ||
href: "http://www.domain.com/asdf/asdf", | ||
expect_site: "asdf", | ||
expect_options_site: "/asdf/asdf", | ||
options: {site:"http://www.domain.com/asdf2/"} | ||
}; | ||
// Test 1 | ||
instance = new RelateUrl(data.site); | ||
describe("in reusable instances", function() | ||
{ | ||
it("should support: new RelateUrl(from,options).relate(from,to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site, data.options).relate(data.site, data.href, data.options); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from,options).relate(from,to)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site, data.options).relate(data.site, data.href); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from,options).relate(to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site, data.options).relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from,options).relate(to)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site, data.options).relate(data.href); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from).relate(from,to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site).relate(data.site, data.href, data.options); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from).relate(from,to)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site).relate(data.site, data.href); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from).relate(to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site).relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(from).relate(to)", function(done) | ||
{ | ||
var result = new RelateUrl(data.site).relate(data.href); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(null,options).relate(from,to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(null, data.options).relate(data.site, data.href, data.options); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(null,options).relate(from,to)", function(done) | ||
{ | ||
var result = new RelateUrl(null, data.options).relate(data.site, data.href); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(null,options).relate(to,options)", function(done) | ||
{ | ||
var result = new RelateUrl(null, data.options).relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl(null,options).relate(to)", function(done) | ||
{ | ||
var result = new RelateUrl(null, data.options).relate(data.href); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl().relate(from,to,options)", function(done) | ||
{ | ||
var result = new RelateUrl().relate(data.site, data.href, data.options); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl().relate(from,to)", function(done) | ||
{ | ||
var result = new RelateUrl().relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should support: new RelateUrl().relate(to,options)", function(done) | ||
{ | ||
var result = new RelateUrl().relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(from,options).relate(options)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(data.site,data.options).relate(data.options) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(from,options).relate()", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(data.site,data.options).relate() } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(null,options).relate(options)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(null,data.options).relate(data.options) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(null,options).relate()", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(null,data.options).relate() } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(from).relate(options)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(data.site).relate(data.options) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl(from).relate()", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl(data.site).relate() } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl().relate(to)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl().relate(data.href) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl().relate(options)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl().relate(data.options) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: new RelateUrl().relate()", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl().relate() } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
}); | ||
urls = | ||
[ | ||
instance.relate(data.href, {output:RelateUrl.ABSOLUTE}), | ||
instance.relate(data.site, data.href, {output:RelateUrl.ROOT_RELATIVE}), | ||
instance.relate(data.href), | ||
instance.relate(data.site, data.href) | ||
]; | ||
describe("in single-use instances", function() | ||
{ | ||
it("should support: RelateUrl.relate(from,to,options)", function(done) | ||
{ | ||
var result = RelateUrl.relate(data.site, data.href, data.options); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: RelateUrl.relate(from,to)", function(done) | ||
{ | ||
var result = RelateUrl.relate(data.site, data.href); | ||
expect(result).to.equal(data.expect_site); | ||
done(); | ||
}); | ||
it("should support: RelateUrl.relate(to,options)", function(done) | ||
{ | ||
var result = RelateUrl.relate(data.href, data.options); | ||
expect(result).to.equal(data.expect_options_site); | ||
done(); | ||
}); | ||
it("should not support: RelateUrl.relate(from)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl.relate(data.site) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: RelateUrl.relate(options)", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl.relate(data.options) } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
it("should not support: RelateUrl.relate()", function(done) | ||
{ | ||
var result,error; | ||
try{ result=new RelateUrl.relate() } | ||
catch(err){ error=err } | ||
expect(result).to.be.undefined; | ||
expect(error).to.be.an.instanceof(Error); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[2]).to.equal(data.expected_SHORTEST); | ||
expect(urls[3]).to.equal(data.expected_SHORTEST); | ||
describe("of options", function() | ||
{ | ||
after( function() | ||
{ | ||
console.log(" (Processed "+urlCount+" URLs)"); | ||
}); | ||
// Test 2 | ||
instance = new RelateUrl(data.site, {output:RelateUrl.ROOT_RELATIVE}); | ||
urls = | ||
[ | ||
instance.relate(data.href, {output:RelateUrl.ABSOLUTE}), | ||
instance.relate(data.site, data.href, {output:RelateUrl.SHORTEST}), | ||
instance.relate(data.href), | ||
instance.relate(data.site, data.href) | ||
]; | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_SHORTEST); | ||
expect(urls[2]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[3]).to.equal(data.expected_ROOT_RELATIVE); | ||
it("should work with reusable instances", function(done) | ||
{ | ||
var data,urls,instance; | ||
data = | ||
{ | ||
site: "http://www.domain.com/asdf/", | ||
href: "http://www.domain.com/asdf/asdf", | ||
expected_ABSOLUTE: "http://www.domain.com/asdf/asdf", | ||
expected_ROOT_RELATIVE: "/asdf/asdf", | ||
expected_SHORTEST: "asdf" | ||
}; | ||
// Test 1 | ||
instance = new RelateUrl(data.site); | ||
urls = | ||
[ | ||
instance.relate(data.href, {output:RelateUrl.ABSOLUTE}), | ||
instance.relate(data.site, data.href, {output:RelateUrl.ROOT_RELATIVE}), | ||
instance.relate(data.href), | ||
instance.relate(data.site, data.href) | ||
]; | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[2]).to.equal(data.expected_SHORTEST); | ||
expect(urls[3]).to.equal(data.expected_SHORTEST); | ||
// Test 2 | ||
instance = new RelateUrl(data.site, {output:RelateUrl.ROOT_RELATIVE}); | ||
urls = | ||
[ | ||
instance.relate(data.href, {output:RelateUrl.ABSOLUTE}), | ||
instance.relate(data.site, data.href, {output:RelateUrl.SHORTEST}), | ||
instance.relate(data.href), | ||
instance.relate(data.site, data.href) | ||
]; | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_SHORTEST); | ||
expect(urls[2]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[3]).to.equal(data.expected_ROOT_RELATIVE); | ||
urlCount += 6; // including sites | ||
done(); | ||
}); | ||
urlCount += 6; // including sites | ||
done(); | ||
}); | ||
it("should work with single-use instances", function(done) | ||
{ | ||
var data = | ||
it("should work with single-use instances", function(done) | ||
{ | ||
site: "http://www.domain.com/asdf/", | ||
href: "http://www.domain.com/asdf/asdf", | ||
expected_ABSOLUTE: "http://www.domain.com/asdf/asdf", | ||
expected_ROOT_RELATIVE: "/asdf/asdf", | ||
expected_SHORTEST: "asdf" | ||
}; | ||
var data = | ||
{ | ||
site: "http://www.domain.com/asdf/", | ||
href: "http://www.domain.com/asdf/asdf", | ||
expected_ABSOLUTE: "http://www.domain.com/asdf/asdf", | ||
expected_ROOT_RELATIVE: "/asdf/asdf", | ||
expected_SHORTEST: "asdf" | ||
}; | ||
var urls = | ||
[ | ||
RelateUrl.relate(data.site, data.href, {output:RelateUrl.ABSOLUTE}), | ||
RelateUrl.relate(data.site, data.href, {output:RelateUrl.ROOT_RELATIVE}), | ||
RelateUrl.relate(data.site, data.href), | ||
RelateUrl.relate(data.site, data.href) | ||
]; | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[2]).to.equal(data.expected_SHORTEST); | ||
expect(urls[3]).to.equal(data.expected_SHORTEST); | ||
urlCount += 8; // including sites | ||
done(); | ||
}); | ||
var urls = | ||
[ | ||
RelateUrl.relate(data.site, data.href, {output:RelateUrl.ABSOLUTE}), | ||
RelateUrl.relate(data.site, data.href, {output:RelateUrl.ROOT_RELATIVE}), | ||
RelateUrl.relate(data.site, data.href), | ||
RelateUrl.relate(data.site, data.href) | ||
]; | ||
expect(urls[0]).to.equal(data.expected_ABSOLUTE); | ||
expect(urls[1]).to.equal(data.expected_ROOT_RELATIVE); | ||
expect(urls[2]).to.equal(data.expected_SHORTEST); | ||
expect(urls[3]).to.equal(data.expected_SHORTEST); | ||
urlCount += 8; // including sites | ||
done(); | ||
}); | ||
it("should support options.defaultPorts", function(done) | ||
{ | ||
urlCount += process( data["options.defaultPorts"], true, | ||
it("should support options.defaultPorts", function(done) | ||
{ | ||
defaultPorts: {sftp:22, ssh:22} | ||
urlCount += process( data["options.defaultPorts"], true, | ||
{ | ||
defaultPorts: {sftp:22, ssh:22} | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.directoryIndexes", function(done) | ||
{ | ||
urlCount += process( data["options.directoryIndexes"], true, | ||
it("should support options.directoryIndexes", function(done) | ||
{ | ||
directoryIndexes: ["default.html"] | ||
urlCount += process( data["options.directoryIndexes"], true, | ||
{ | ||
directoryIndexes: ["default.html"] | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.ignore_www = true", function(done) | ||
{ | ||
urlCount += process( data["options.ignore_www"], true, | ||
it("should support options.ignore_www = true", function(done) | ||
{ | ||
ignore_www: true | ||
urlCount += process( data["options.ignore_www"], true, | ||
{ | ||
ignore_www: true | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.rejectedSchemes", function(done) | ||
{ | ||
urlCount += process( data["options.rejectedSchemes"], true, | ||
it("should support options.rejectedSchemes", function(done) | ||
{ | ||
rejectedSchemes: ["dunno"] | ||
urlCount += process( data["options.rejectedSchemes"], true, | ||
{ | ||
rejectedSchemes: ["dunno"] | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.removeAuth = true", function(done) | ||
{ | ||
urlCount += process( data["options.removeAuth"], true, | ||
it("should support options.removeAuth = true", function(done) | ||
{ | ||
removeAuth: true | ||
urlCount += process( data["options.removeAuth"], true, | ||
{ | ||
removeAuth: true | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.removeDirectoryIndexes = false", function(done) | ||
{ | ||
urlCount += process( data["options.removeDirectoryIndexes"], true, | ||
it("should support options.removeDirectoryIndexes = false", function(done) | ||
{ | ||
removeDirectoryIndexes: false | ||
urlCount += process( data["options.removeDirectoryIndexes"], true, | ||
{ | ||
removeDirectoryIndexes: false | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.removeEmptyQueries = true", function(done) | ||
{ | ||
urlCount += process( data["options.removeEmptyQueries"], true, | ||
it("should support options.removeEmptyQueries = true", function(done) | ||
{ | ||
removeEmptyQueries: true | ||
urlCount += process( data["options.removeEmptyQueries"], true, | ||
{ | ||
removeEmptyQueries: true | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it("should support options.schemeRelative = false", function(done) | ||
{ | ||
urlCount += process( data["options.schemeRelative"], true, | ||
it("should support options.schemeRelative = false", function(done) | ||
{ | ||
schemeRelative: false | ||
urlCount += process( data["options.schemeRelative"], true, | ||
{ | ||
schemeRelative: false | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
it.skip("should support options.slashesDenoteHost = false", function(done) | ||
{ | ||
urlCount += process( data["options.slashesDenoteHost"], true, | ||
it.skip("should support options.slashesDenoteHost = false", function(done) | ||
{ | ||
slashesDenoteHost: false | ||
urlCount += process( data["options.slashesDenoteHost"], true, | ||
{ | ||
slashesDenoteHost: false | ||
}); | ||
done(); | ||
}); | ||
done(); | ||
}); | ||
}); |
160482
5248
142