Skip to content

Commit

Permalink
testing and bug fixing
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford committed Mar 15, 2013
1 parent 6eae833 commit 51ade68
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 18 deletions.
1 change: 1 addition & 0 deletions test/app-built.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/app.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,3 @@
define(['v!jquery#>=1.9'], function($) {
console.log($.version);
});
2 changes: 2 additions & 0 deletions test/build.sh
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,2 @@
r.js -o baseUrl=. name=app out=app-built.js map.*.v='../v'

3 changes: 3 additions & 0 deletions test/jquery-1.8.1.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,3 @@
define({
version: '1.8.1'
});
3 changes: 3 additions & 0 deletions test/jquery-2.0.0.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,3 @@
define({
version: '2.0.0'
});
3 changes: 3 additions & 0 deletions test/jquery-2.0.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,3 @@
define({
version: '1.8.1'
});
6 changes: 6 additions & 0 deletions test/jquery.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,6 @@
define(function() {
return [
'1.8.1',
'2.0.0'
];
});
17 changes: 17 additions & 0 deletions test/test-built.html
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,17 @@
<!doctype html>
<script>
var require = {
baseUrl: '.',
map: {
'*': {
'v': '../v'
}
}
};
</script>
<script src="require.js"></script>
<script src="app-built.js"></script>
<script>
require(['app']);
</script>

10 changes: 9 additions & 1 deletion test/test.html
Original file line number Original file line Diff line number Diff line change
@@ -1,8 +1,16 @@
<!doctype html> <!doctype html>
<script> <script>
var require = { var require = {
baseUrl: '../' baseUrl: '.',
map: {
'*': {
'v': '../v'
}
}
}; };
</script> </script>
<script src="require.js"></script> <script src="require.js"></script>
<script>
require(['app']);
</script>


49 changes: 32 additions & 17 deletions v.js
Original file line number Original file line Diff line number Diff line change
@@ -1,46 +1,61 @@
define(['./semver'], function(semver) { define(['./semver', 'require'], function(semver, req) {
return { return {
loadedVersions: {}, loadedVersions: {},
getVersionNum: function(name, callback) { getVersionNum: function(name, build, callback) {
var hashIndex = name.lastIndexOf('#'); var hashIndex = name.lastIndexOf('#');
var moduleName = name.substr(0, hashIndex); var moduleName = name.substr(0, hashIndex);
var versionRange = name.substr(hashIndex + 1); var versionRange = name.substr(hashIndex + 1);


var loadedCache = this.loadedVersions; var loadedVersions = this.loadedVersions;


if (!semver.validRange(versionRange)) if (!semver.validRange(versionRange))
throw moduleName + '#' + versionRange + ' has an invalid version range.'; throw moduleName + '#' + versionRange + ' has an invalid version range.';


// load the version ranges for the given moduleName var checkVersions = function(supportedVersions) {
req([moduleName], function(supportedVersions) {
// first check if we have any loaded versions for this module // first check if we have any loaded versions for this module
if (loadedVersions[moduleName]) { if (loadedVersions[moduleName])
for (var v in loadedVersions[moduleName]) for (var v in loadedVersions[moduleName])
if (semver.satisfies(v, version)) if (semver.satisfies(v, versionRange))
return callback(v); return callback(moduleName, v);
}


// no supported loaded version - need to load a version // no supported loaded version - need to load a version
callback(semver.maxSatisfying(supportedVersions, version)); callback(moduleName, semver.maxSatisfying(supportedVersions, versionRange));
}


}, function(err) { if (build) {
throw 'You need to provide a "' + moduleName + '" module providing the version array.'; var fs = require.nodeRequire('fs');
}); checkVersions(eval(''
+ '(function(){ \n'
+ ' var defined; \n'
+ ' var define = function(factory){ \n'
+ ' defined = factory(); \n'
+ ' } \n'
+ fs.readFileSync(req.toUrl(moduleName) + '.js') + '\n'
+ ' return defined; \n'
+ '})()'
));
}
else {
// load the version ranges for the given moduleName
req([moduleName], checkVersions, function(err) {
throw 'You need to provide a "' + moduleName + '" module providing the version array.';
});
}
}, },
load: function(name, req, load, config) { load: function(name, req, load, config) {
var loadedVersions = this.loadedVersions; var loadedVersions = this.loadedVersions;
this.getVersionNum(name, function(version) { this.getVersionNum(name, config.isBuild, function(moduleName, version) {
// load from the expected filename convention // load from the expected filename convention
req([moduleName + '-' + version], function(m) { req([moduleName + '-' + version], function(m) {
loadedVersions[moduleName] = loadedVersions[moduleName] || {}; loadedVersions[moduleName] = loadedVersions[moduleName] || {};
loadedVersions[moduleName][loadVersion] = true; loadedVersions[moduleName][version] = true;
load(m); load(m);
}); });
}); });
}, },
write: function(pluginName, name, write) { write: function(pluginName, name, write) {
this.getVersionNum(name, function(version) { this.getVersionNum(name, true, function(moduleName, version) {
write.asModule(pluginName + '!' + moduleName, "define(['" + name + '-' + version + "'], function(m){ return m; });") write.asModule(pluginName + '!' + name, "define(['" + moduleName + '-' + version + "'], function(m){ return m; });")
}); });
} }
}; };
Expand Down

0 comments on commit 51ade68

Please sign in to comment.