From 958edbc693ea12c868dae31cdf617c70987d744f Mon Sep 17 00:00:00 2001 From: andi pieper Date: Mon, 19 May 2014 15:26:32 +0200 Subject: [PATCH] added merge ability --- index.js | 10 ++++++++++ test/merge_test.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 test/merge_test.js diff --git a/index.js b/index.js index 2103cbb..4a56b9a 100644 --- a/index.js +++ b/index.js @@ -58,3 +58,13 @@ exports.stringify = function(obj) { return parts.join('/'); }; + +exports.merge = function(str, objToMerge) { + var obj = exports.parse(str); + for (var prop in objToMerge) { + if (['type', 'id', 'subtype', 'version', 'index'].indexOf(prop) > -1) { + obj[prop] = objToMerge[prop]; + } + } + return exports.stringify(obj); +}; diff --git a/test/merge_test.js b/test/merge_test.js new file mode 100644 index 0000000..931bf4b --- /dev/null +++ b/test/merge_test.js @@ -0,0 +1,42 @@ +'use strict'; + +var test = require('tap').test; +var merge = require('..').merge; + +test('changing type component', function(t) { + t.equal(merge('type/id/subtype/version/index', {type:'new_type'}), 'new_type/id/subtype/version/index', 'should return docuri string with type changed'); + t.end(); +}); + +test('changing id component', function(t) { + t.equal(merge('type/id/subtype/version/index', {id:'new_id'}), 'type/new_id/subtype/version/index', 'should return docuri string with id changed'); + t.end(); +}); + +test('changing subtype component', function(t) { + t.equal(merge('type/id/subtype/version/index', {subtype:'new_subtype'}), 'type/id/new_subtype/version/index', 'should return docuri string with subtype changed'); + t.end(); +}); + +test('changing version component', function(t) { + t.equal(merge('type/id/subtype/version/index', {version:'new_version'}), 'type/id/subtype/new_version/index', 'should return docuri string with version changed'); + t.end(); +}); + +test('changing index component', function(t) { + t.equal(merge('type/id/subtype/version/index', {index:'new_index'}), 'type/id/subtype/version/new_index', 'should return docuri string with index changed'); + t.end(); +}); + +test('changing unknown component', function(t) { + t.equal(merge('type/id/subtype/version/index', {unknown:'i dont know'}), 'type/id/subtype/version/index', 'should return unchanged docuri'); + t.end(); +}); + + +test('missing second argument', function(t) { + t.equal(merge('type/id/subtype/version/index'), 'type/id/subtype/version/index', 'should return unchanged docuri string'); + t.end(); +}); + +