requirejs-rails 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -3,53 +3,50 @@
3
3
  # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
4
  # development environment upon cd'ing into the directory
5
5
 
6
- # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
7
- environment_id="ruby-1.9.3-p0@requirejs-rails"
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p125@requirejs-rails"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.10.2" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
8
17
 
9
- #
10
- # Uncomment following line if you want options to be set only for given project.
11
- #
12
- # PROJECT_JRUBY_OPTS=( --1.9 )
13
-
14
- #
15
18
  # First we attempt to load the desired environment directly from the environment
16
19
  # file. This is very fast and efficient compared to running through the entire
17
20
  # CLI and selector. If you want feedback on which environment was used then
18
21
  # insert the word 'use' after --create as this triggers verbose mode.
19
- #
20
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
21
23
  && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
22
24
  then
23
25
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
24
-
25
- if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
26
- then
27
- . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ if [[ $- == *i* ]] # check for interactive shells
29
+ then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
30
+ else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
28
31
  fi
29
32
  else
30
33
  # If the environment file has not yet been created, use the RVM CLI to select.
31
- if ! rvm --create use "$environment_id"
32
- then
34
+ rvm --create use "$environment_id" || {
33
35
  echo "Failed to create RVM environment '${environment_id}'."
34
36
  return 1
35
- fi
37
+ }
36
38
  fi
37
39
 
38
- #
39
- # If you use an RVM gemset file to install a list of gems (*.gems), you can have
40
- # it be automatically loaded. Uncomment the following and adjust the filename if
41
- # necessary.
42
- #
43
- # filename=".gems"
44
- # if [[ -s "$filename" ]]
40
+ # If you use bundler, this might be useful to you:
41
+ # if [[ -s Gemfile ]] && {
42
+ # ! builtin command -v bundle >/dev/null ||
43
+ # builtin command -v bundle | grep $rvm_path/bin/bundle >/dev/null
44
+ # }
45
45
  # then
46
- # rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
46
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
47
+ # gem install bundler
47
48
  # fi
48
-
49
- # If you use bundler, this might be useful to you:
50
- # if command -v bundle && [[ -s Gemfile ]]
49
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
51
50
  # then
52
- # bundle install
51
+ # bundle install | grep -vE '^Using|Your bundle is complete'
53
52
  # fi
54
-
55
-
@@ -1,3 +1,7 @@
1
+ # v0.5.6
2
+
3
+ - Upgrade to RequireJS and r.js 1.0.7
4
+
1
5
  # v0.5.5
2
6
 
3
7
  - Support for Rails 3.2.x. Rails 3.1.x is also supported by this release.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- requirejs-rails (0.5.5)
4
+ requirejs-rails (0.5.6)
5
5
  railties (>= 3.1.1, < 3.3)
6
6
 
7
7
  GEM
data/bin/r.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license r.js 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
2
+ * @license r.js 1.0.7 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
3
3
  * Available via the MIT or new BSD license.
4
4
  * see: http://github.com/jrburke/requirejs for details
5
5
  */
@@ -20,7 +20,7 @@ var requirejs, require, define;
20
20
 
21
21
  var fileName, env, fs, vm, path, exec, rhinoContext, dir, nodeRequire,
22
22
  nodeDefine, exists, reqMain, loadedOptimizedLib,
23
- version = '1.0.5',
23
+ version = '1.0.7',
24
24
  jsSuffixRegExp = /\.js$/,
25
25
  commandOption = '',
26
26
  useLibLoaded = {},
@@ -102,7 +102,7 @@ var requirejs, require, define;
102
102
  }
103
103
 
104
104
  /** vim: et:ts=4:sw=4:sts=4
105
- * @license RequireJS 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
105
+ * @license RequireJS 1.0.7 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
106
106
  * Available via the MIT or new BSD license.
107
107
  * see: http://github.com/jrburke/requirejs for details
108
108
  */
@@ -112,7 +112,7 @@ var requirejs, require, define;
112
112
 
113
113
  (function () {
114
114
  //Change this version number for each release.
115
- var version = "1.0.5",
115
+ var version = "1.0.7",
116
116
  commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
117
117
  cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g,
118
118
  currDirRegExp = /^\.\//,
@@ -1156,6 +1156,7 @@ var requirejs, require, define;
1156
1156
  err = makeError("timeout", "Load timeout for modules: " + noLoads);
1157
1157
  err.requireType = "timeout";
1158
1158
  err.requireModules = noLoads;
1159
+ err.contextName = context.contextName;
1159
1160
  return req.onError(err);
1160
1161
  }
1161
1162
 
@@ -2976,15 +2977,17 @@ define('rhino/file', function () {
2976
2977
  * see: http://github.com/jrburke/requirejs for details
2977
2978
  */
2978
2979
 
2979
- /*jslint plusplus: false, strict: false */
2980
- /*global define: false */
2980
+ /*jslint plusplus: true */
2981
+ /*global define */
2981
2982
 
2982
2983
  define('lang', function () {
2984
+ 'use strict';
2985
+
2983
2986
  var lang = {
2984
2987
  backSlashRegExp: /\\/g,
2985
2988
  ostring: Object.prototype.toString,
2986
2989
 
2987
- isArray: Array.isArray ? Array.isArray : function (it) {
2990
+ isArray: Array.isArray || function (it) {
2988
2991
  return lang.ostring.call(it) === "[object Array]";
2989
2992
  },
2990
2993
 
@@ -2996,19 +2999,36 @@ define('lang', function () {
2996
2999
  return it && it instanceof RegExp;
2997
3000
  },
2998
3001
 
3002
+ _mixin: function(dest, source, override){
3003
+ var name;
3004
+ for (name in source) {
3005
+ if(source.hasOwnProperty(name)
3006
+ && (override || !dest.hasOwnProperty(name))) {
3007
+ dest[name] = source[name];
3008
+ }
3009
+ }
3010
+
3011
+ return dest; // Object
3012
+ },
3013
+
2999
3014
  /**
3000
- * Simple function to mix in properties from source into target,
3001
- * but only if target does not already have a property of the same name.
3015
+ * mixin({}, obj1, obj2) is allowed. If the last argument is a boolean,
3016
+ * then the source objects properties are force copied over to dest.
3002
3017
  */
3003
- mixin: function (target, source, override) {
3004
- //Use an empty object to avoid other bad JS code that modifies
3005
- //Object.prototype.
3006
- var empty = {}, prop;
3007
- for (prop in source) {
3008
- if (override || !(prop in target)) {
3009
- target[prop] = source[prop];
3010
- }
3018
+ mixin: function(dest){
3019
+ var parameters = Array.prototype.slice.call(arguments),
3020
+ override, i, l;
3021
+
3022
+ if (!dest) { dest = {}; }
3023
+
3024
+ if (parameters.length > 2 && typeof arguments[parameters.length-1] === 'boolean') {
3025
+ override = parameters.pop();
3011
3026
  }
3027
+
3028
+ for (i = 1, l = parameters.length; i < l; i++) {
3029
+ lang._mixin(dest, parameters[i], override);
3030
+ }
3031
+ return dest; // Object
3012
3032
  },
3013
3033
 
3014
3034
  delegate: (function () {
@@ -6577,7 +6597,7 @@ module.exports = uglify
6577
6597
  /*jslint plusplus: false, strict: false */
6578
6598
  /*global define: false */
6579
6599
 
6580
- define('parse', ['uglifyjs/index'], function (uglify) {
6600
+ define('parse', ['./uglifyjs/index'], function (uglify) {
6581
6601
  var parser = uglify.parser,
6582
6602
  processor = uglify.uglify,
6583
6603
  ostring = Object.prototype.toString,
@@ -7002,7 +7022,7 @@ define('parse', ['uglifyjs/index'], function (uglify) {
7002
7022
  * @returns {Array} an array of dependency strings. The dependencies
7003
7023
  * have not been normalized, they may be relative IDs.
7004
7024
  */
7005
- parse.findDependencies = function (fileName, fileContents) {
7025
+ parse.findDependencies = function (fileName, fileContents, options) {
7006
7026
  //This is a litle bit inefficient, it ends up with two uglifyjs parser
7007
7027
  //calls. Can revisit later, but trying to build out larger functional
7008
7028
  //pieces first.
@@ -7019,11 +7039,134 @@ define('parse', ['uglifyjs/index'], function (uglify) {
7019
7039
  if ((deps = getValidDeps(deps))) {
7020
7040
  dependencies = dependencies.concat(deps);
7021
7041
  }
7042
+ }, options);
7043
+
7044
+ return dependencies;
7045
+ };
7046
+
7047
+ /**
7048
+ * Finds only CJS dependencies, ones that are the form require('stringLiteral')
7049
+ */
7050
+ parse.findCjsDependencies = function (fileName, fileContents, options) {
7051
+ //This is a litle bit inefficient, it ends up with two uglifyjs parser
7052
+ //calls. Can revisit later, but trying to build out larger functional
7053
+ //pieces first.
7054
+ var dependencies = [],
7055
+ astRoot = parser.parse(fileContents);
7056
+
7057
+ parse.recurse(astRoot, function (dep) {
7058
+ dependencies.push(dep);
7059
+ }, options, function (node, onMatch) {
7060
+
7061
+ var call, args;
7062
+
7063
+ if (!isArray(node)) {
7064
+ return false;
7065
+ }
7066
+
7067
+ if (node[0] === 'call') {
7068
+ call = node[1];
7069
+ args = node[2];
7070
+
7071
+ if (call) {
7072
+ //A require('') use.
7073
+ if (call[0] === 'name' && call[1] === 'require' &&
7074
+ args[0][0] === 'string') {
7075
+ return onMatch(args[0][1]);
7076
+ }
7077
+ }
7078
+ }
7079
+
7080
+ return false;
7081
+
7022
7082
  });
7023
7083
 
7024
7084
  return dependencies;
7025
7085
  };
7026
7086
 
7087
+ /**
7088
+ * Determines if define(), require({}|[]) or requirejs was called in the
7089
+ * file. Also finds out if define() is declared and if define.amd is called.
7090
+ */
7091
+ parse.usesAmdOrRequireJs = function (fileName, fileContents, options) {
7092
+ var astRoot = parser.parse(fileContents),
7093
+ uses;
7094
+
7095
+ parse.recurse(astRoot, function (prop) {
7096
+ if (!uses) {
7097
+ uses = {};
7098
+ }
7099
+ uses[prop] = true;
7100
+ }, options, parse.findAmdOrRequireJsNode);
7101
+
7102
+ return uses;
7103
+ };
7104
+
7105
+ /**
7106
+ * Determines if require(''), exports.x =, module.exports =,
7107
+ * __dirname, __filename are used. So, not strictly traditional CommonJS,
7108
+ * also checks for Node variants.
7109
+ */
7110
+ parse.usesCommonJs = function (fileName, fileContents, options) {
7111
+ var uses = null,
7112
+ assignsExports = false,
7113
+ astRoot = parser.parse(fileContents);
7114
+
7115
+ parse.recurse(astRoot, function (prop) {
7116
+ if (prop === 'varExports') {
7117
+ assignsExports = true;
7118
+ } else if (prop !== 'exports' || !assignsExports) {
7119
+ if (!uses) {
7120
+ uses = {};
7121
+ }
7122
+ uses[prop] = true;
7123
+ }
7124
+ }, options, function (node, onMatch) {
7125
+
7126
+ var call, args;
7127
+
7128
+ if (!isArray(node)) {
7129
+ return false;
7130
+ }
7131
+
7132
+ if (node[0] === 'name' && (node[1] === '__dirname' || node[1] === '__filename')) {
7133
+ return onMatch(node[1].substring(2));
7134
+ } else if (node[0] === 'var' && node[1] && node[1][0] && node[1][0][0] === 'exports') {
7135
+ //Hmm, a variable assignment for exports, so does not use cjs exports.
7136
+ return onMatch('varExports');
7137
+ } else if (node[0] === 'assign' && node[2] && node[2][0] === 'dot') {
7138
+ args = node[2][1];
7139
+
7140
+ if (args) {
7141
+ //An exports or module.exports assignment.
7142
+ if (args[0] === 'name' && args[1] === 'module' &&
7143
+ node[2][2] === 'exports') {
7144
+ return onMatch('moduleExports');
7145
+ } else if (args[0] === 'name' && args[1] === 'exports') {
7146
+ return onMatch('exports');
7147
+ }
7148
+ }
7149
+ } else if (node[0] === 'call') {
7150
+ call = node[1];
7151
+ args = node[2];
7152
+
7153
+ if (call) {
7154
+ //A require('') use.
7155
+ if (call[0] === 'name' && call[1] === 'require' &&
7156
+ args[0][0] === 'string') {
7157
+ return onMatch('require');
7158
+ }
7159
+ }
7160
+ }
7161
+
7162
+ return false;
7163
+
7164
+ });
7165
+
7166
+ return uses;
7167
+ };
7168
+
7169
+
7027
7170
  parse.findRequireDepNames = function (node, deps) {
7028
7171
  var moduleName, i, n, call, args;
7029
7172
 
@@ -7181,6 +7324,54 @@ define('parse', ['uglifyjs/index'], function (uglify) {
7181
7324
  return false;
7182
7325
  };
7183
7326
 
7327
+ /**
7328
+ * Looks for define(), require({} || []), requirejs({} || []) calls.
7329
+ */
7330
+ parse.findAmdOrRequireJsNode = function (node, onMatch) {
7331
+ var call, args, configNode, type;
7332
+
7333
+ if (!isArray(node)) {
7334
+ return false;
7335
+ }
7336
+
7337
+ if (node[0] === 'defun' && node[1] === 'define') {
7338
+ type = 'declaresDefine';
7339
+ } else if (node[0] === 'assign' && node[2] && node[2][2] === 'amd' &&
7340
+ node[2][1] && node[2][1][0] === 'name' &&
7341
+ node[2][1][1] === 'define') {
7342
+ type = 'defineAmd';
7343
+ } else if (node[0] === 'call') {
7344
+ call = node[1];
7345
+ args = node[2];
7346
+
7347
+ if (call) {
7348
+ if ((call[0] === 'dot' &&
7349
+ (call[1] && call[1][0] === 'name' &&
7350
+ (call[1][1] === 'require' || call[1][1] === 'requirejs')) &&
7351
+ call[2] === 'config')) {
7352
+ //A require.config() or requirejs.config() call.
7353
+ type = call[1][1] + 'Config';
7354
+ } else if (call[0] === 'name' &&
7355
+ (call[1] === 'require' || call[1] === 'requirejs')) {
7356
+ //A require() or requirejs() config call.
7357
+ //Only want ones that start with an object or an array.
7358
+ configNode = args[0];
7359
+ if (configNode[0] === 'object' || configNode[0] === 'array') {
7360
+ type = call[1];
7361
+ }
7362
+ } else if (call[0] === 'name' && call[1] === 'define') {
7363
+ //A define call.
7364
+ type = 'define';
7365
+ }
7366
+ }
7367
+ }
7368
+
7369
+ if (type) {
7370
+ return onMatch(type);
7371
+ }
7372
+
7373
+ return false;
7374
+ };
7184
7375
 
7185
7376
  /**
7186
7377
  * Determines if a specific node is a valid require/requirejs config
@@ -7616,7 +7807,7 @@ define('rhino/optimize', ['logger'], function (logger) {
7616
7807
  * see: http://github.com/jrburke/requirejs for details
7617
7808
  */
7618
7809
 
7619
- /*jslint plusplus: false, nomen: false, regexp: false, strict: false */
7810
+ /*jslint plusplus: false, nomen: false, regexp: false */
7620
7811
  /*global define: false */
7621
7812
 
7622
7813
  define('optimize', [ 'lang', 'logger', 'env!env/optimize', 'env!env/file', 'parse',
@@ -7700,6 +7891,9 @@ function (lang, logger, envOptimize, file, parse,
7700
7891
  //If no slash, so must be just a file name. Use empty string then.
7701
7892
  importPath = (importEndIndex !== -1) ? importFileName.substring(0, importEndIndex + 1) : "";
7702
7893
 
7894
+ //fix url() on relative import (#5)
7895
+ importPath = importPath.replace(/^\.\//, '');
7896
+
7703
7897
  //Modify URL paths to match the path represented by this file.
7704
7898
  importContents = importContents.replace(cssUrlRegExp, function (fullMatch, urlMatch) {
7705
7899
  fixedUrlMatch = cleanCssUrlQuotes(urlMatch);
@@ -7760,11 +7954,37 @@ function (lang, logger, envOptimize, file, parse,
7760
7954
  var parts = (config.optimize + "").split('.'),
7761
7955
  optimizerName = parts[0],
7762
7956
  keepLines = parts[1] === 'keepLines',
7763
- licenseContents = '',
7764
- fileContents, optFunc, match, comment;
7957
+ fileContents;
7765
7958
 
7766
7959
  fileContents = file.readFile(fileName);
7767
7960
 
7961
+ fileContents = optimize.js(fileName, fileContents, optimizerName,
7962
+ keepLines, config, pluginCollector);
7963
+
7964
+ file.saveUtf8File(outFileName, fileContents);
7965
+ },
7966
+
7967
+ /**
7968
+ * Optimizes a file that contains JavaScript content. Optionally collects
7969
+ * plugin resources mentioned in a file, and then passes the content
7970
+ * through an minifier if one is specified via config.optimize.
7971
+ *
7972
+ * @param {String} fileName the name of the file that matches the
7973
+ * fileContents.
7974
+ * @param {String} fileContents the string of JS to optimize.
7975
+ * @param {String} [optimizerName] optional name of the optimizer to
7976
+ * use. 'uglify' is default.
7977
+ * @param {Boolean} [keepLines] whether to keep line returns in the optimization.
7978
+ * @param {Object} [config] the build config object.
7979
+ * @param {Array} [pluginCollector] storage for any plugin resources
7980
+ * found.
7981
+ */
7982
+ js: function (fileName, fileContents, optimizerName, keepLines, config, pluginCollector) {
7983
+ var licenseContents = '',
7984
+ optFunc, match, comment;
7985
+
7986
+ config = config || {};
7987
+
7768
7988
  //Apply pragmas/namespace renaming
7769
7989
  fileContents = pragma.process(fileName, fileContents, config, 'OnSave', pluginCollector);
7770
7990
 
@@ -7794,7 +8014,7 @@ function (lang, logger, envOptimize, file, parse,
7794
8014
  config[optimizerName]);
7795
8015
  }
7796
8016
 
7797
- file.saveUtf8File(outFileName, fileContents);
8017
+ return fileContents;
7798
8018
  },
7799
8019
 
7800
8020
  /**
@@ -7887,7 +8107,8 @@ function (lang, logger, envOptimize, file, parse,
7887
8107
  };
7888
8108
 
7889
8109
  return optimize;
7890
- });/**
8110
+ });
8111
+ /**
7891
8112
  * @license RequireJS Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
7892
8113
  * Available via the MIT or new BSD license.
7893
8114
  * see: http://github.com/jrburke/requirejs for details
@@ -7978,13 +8199,13 @@ function (file, pragma, parse) {
7978
8199
  * @returns {Boolean}
7979
8200
  */
7980
8201
  require._isSupportedBuildUrl = function (url) {
7981
- //Ignore URLs with protocols or question marks, means either network
8202
+ //Ignore URLs with protocols, hosts or question marks, means either network
7982
8203
  //access is needed to fetch it or it is too dynamic. Note that
7983
8204
  //on Windows, full paths are used for some urls, which include
7984
8205
  //the drive, like c:/something, so need to test for something other
7985
8206
  //than just a colon.
7986
8207
  return url.indexOf("://") === -1 && url.indexOf("?") === -1 &&
7987
- url.indexOf('empty:') !== 0;
8208
+ url.indexOf('empty:') !== 0 && url.indexOf('//') !== 0;
7988
8209
  };
7989
8210
 
7990
8211
  //Override define() to catch modules that just define an object, so that
@@ -8023,15 +8244,15 @@ function (file, pragma, parse) {
8023
8244
  /*jslint evil: true */
8024
8245
  var contents, pluginBuilderMatch, builderName;
8025
8246
 
8026
- //Adjust the URL if it was not transformed to use baseUrl.
8027
- url = normalizeUrlWithBase(context, moduleName, url);
8028
-
8029
8247
  context.scriptCount += 1;
8030
8248
 
8031
8249
  //Only handle urls that can be inlined, so that means avoiding some
8032
8250
  //URLs like ones that require network access or may be too dynamic,
8033
8251
  //like JSONP
8034
8252
  if (require._isSupportedBuildUrl(url)) {
8253
+ //Adjust the URL if it was not transformed to use baseUrl.
8254
+ url = normalizeUrlWithBase(context, moduleName, url);
8255
+
8035
8256
  //Save the module name to path and path to module name mappings.
8036
8257
  layer.buildPathMap[moduleName] = url;
8037
8258
  layer.buildFileToModule[url] = moduleName;
@@ -8049,6 +8270,12 @@ function (file, pragma, parse) {
8049
8270
  //Load the file contents, process for conditionals, then
8050
8271
  //evaluate it.
8051
8272
  contents = file.readFile(url);
8273
+
8274
+ //If there is a read filter, run it now.
8275
+ if (context.config.onBuildRead) {
8276
+ contents = context.config.onBuildRead(moduleName, url, contents);
8277
+ }
8278
+
8052
8279
  contents = pragma.process(url, contents, context.config, 'OnExecute');
8053
8280
 
8054
8281
  //Find out if the file contains a require() definition. Need to know
@@ -8341,14 +8568,16 @@ define('commonJs', ['env!env/file', 'uglifyjs/index'], function (file, uglify) {
8341
8568
  * see: http://github.com/jrburke/requirejs for details
8342
8569
  */
8343
8570
 
8344
- /*jslint regexp: false, plusplus: false, nomen: false, strict: false */
8345
- /*global define: false, require: false */
8571
+ /*jslint plusplus: true, nomen: true */
8572
+ /*global define, require */
8346
8573
 
8347
8574
 
8348
8575
  define('build', [ 'lang', 'logger', 'env!env/file', 'parse', 'optimize', 'pragma',
8349
8576
  'env!env/load', 'requirePatch'],
8350
8577
  function (lang, logger, file, parse, optimize, pragma,
8351
8578
  load, requirePatch) {
8579
+ 'use strict';
8580
+
8352
8581
  var build, buildBaseConfig,
8353
8582
  endsWithSemiColonRegExp = /;\s*$/;
8354
8583
 
@@ -8388,7 +8617,7 @@ function (lang, logger, file, parse, optimize, pragma,
8388
8617
  * sure to allow absolute paths on Windows, like C:\directory.
8389
8618
  */
8390
8619
  function disallowUrls(path) {
8391
- if (path.indexOf('://') !== -1 && path !== 'empty:') {
8620
+ if ((path.indexOf('://') !== -1 || path.indexOf('//') === 0) && path !== 'empty:') {
8392
8621
  throw new Error('Path is not supported: ' + path +
8393
8622
  '\nOptimizer can only handle' +
8394
8623
  ' local paths. Download the locally if necessary' +
@@ -8498,8 +8727,13 @@ function (lang, logger, file, parse, optimize, pragma,
8498
8727
  //Adjust baseUrl if config.appDir is in play, and set up build output paths.
8499
8728
  buildPaths = {};
8500
8729
  if (config.appDir) {
8501
- //All the paths should be inside the appDir
8502
- buildPaths = paths;
8730
+ //All the paths should be inside the appDir, so just adjust
8731
+ //the paths to use the dirBaseUrl
8732
+ for (prop in paths) {
8733
+ if (paths.hasOwnProperty(prop)) {
8734
+ buildPaths[prop] = paths[prop].replace(config.baseUrl, config.dirBaseUrl);
8735
+ }
8736
+ }
8503
8737
  } else {
8504
8738
  //If no appDir, then make sure to copy the other paths to this directory.
8505
8739
  for (prop in paths) {
@@ -8869,7 +9103,7 @@ function (lang, logger, file, parse, optimize, pragma,
8869
9103
  * to the absFilePath passed in.
8870
9104
  */
8871
9105
  build.makeAbsConfig = function (config, absFilePath) {
8872
- var props, prop, i, originalBaseUrl;
9106
+ var props, prop, i;
8873
9107
 
8874
9108
  props = ["appDir", "dir", "baseUrl"];
8875
9109
  for (i = 0; (prop = props[i]); i++) {
@@ -8877,24 +9111,17 @@ function (lang, logger, file, parse, optimize, pragma,
8877
9111
  //Add abspath if necessary, make sure these paths end in
8878
9112
  //slashes
8879
9113
  if (prop === "baseUrl") {
8880
- originalBaseUrl = config.baseUrl;
9114
+ config.originalBaseUrl = config.baseUrl;
8881
9115
  if (config.appDir) {
8882
9116
  //If baseUrl with an appDir, the baseUrl is relative to
8883
9117
  //the appDir, *not* the absFilePath. appDir and dir are
8884
9118
  //made absolute before baseUrl, so this will work.
8885
- config.baseUrl = build.makeAbsPath(originalBaseUrl, config.appDir);
8886
- //Set up dir output baseUrl.
8887
- config.dirBaseUrl = build.makeAbsPath(originalBaseUrl, config.dir);
9119
+ config.baseUrl = build.makeAbsPath(config.originalBaseUrl, config.appDir);
8888
9120
  } else {
8889
9121
  //The dir output baseUrl is same as regular baseUrl, both
8890
9122
  //relative to the absFilePath.
8891
9123
  config.baseUrl = build.makeAbsPath(config[prop], absFilePath);
8892
- config.dirBaseUrl = config.dir || config.baseUrl;
8893
9124
  }
8894
-
8895
- //Make sure dirBaseUrl ends in a slash, since it is
8896
- //concatenated with other strings.
8897
- config.dirBaseUrl = endsWithSlash(config.dirBaseUrl);
8898
9125
  } else {
8899
9126
  config[prop] = build.makeAbsPath(config[prop], absFilePath);
8900
9127
  }
@@ -8940,12 +9167,9 @@ function (lang, logger, file, parse, optimize, pragma,
8940
9167
  if (typeof value === 'object' && value &&
8941
9168
  !lang.isArray(value) && !lang.isFunction(value) &&
8942
9169
  !lang.isRegExp(value)) {
8943
- if (!target[prop]) {
8944
- target[prop] = {};
8945
- }
8946
- lang.mixin(target[prop], source[prop], true);
9170
+ target[prop] = lang.mixin({}, target[prop], value, true);
8947
9171
  } else {
8948
- target[prop] = source[prop];
9172
+ target[prop] = value;
8949
9173
  }
8950
9174
  }
8951
9175
  }
@@ -8967,12 +9191,13 @@ function (lang, logger, file, parse, optimize, pragma,
8967
9191
  var config = {}, buildFileContents, buildFileConfig, mainConfig,
8968
9192
  mainConfigFile, prop, buildFile, absFilePath;
8969
9193
 
8970
- lang.mixin(config, buildBaseConfig);
8971
- lang.mixin(config, cfg, true);
8972
-
8973
9194
  //Make sure all paths are relative to current directory.
8974
9195
  absFilePath = file.absPath('.');
8975
- build.makeAbsConfig(config, absFilePath);
9196
+ build.makeAbsConfig(cfg, absFilePath);
9197
+ build.makeAbsConfig(buildBaseConfig, absFilePath);
9198
+
9199
+ lang.mixin(config, buildBaseConfig);
9200
+ lang.mixin(config, cfg, true);
8976
9201
 
8977
9202
  if (config.buildFile) {
8978
9203
  //A build file exists, load it to get more config.
@@ -9034,6 +9259,19 @@ function (lang, logger, file, parse, optimize, pragma,
9034
9259
  //args should take precedence over build file values.
9035
9260
  mixConfig(config, cfg);
9036
9261
 
9262
+
9263
+ //Set final output dir
9264
+ if (config.hasOwnProperty("baseUrl")) {
9265
+ if (config.appDir) {
9266
+ config.dirBaseUrl = build.makeAbsPath(config.originalBaseUrl, config.dir);
9267
+ } else {
9268
+ config.dirBaseUrl = config.dir || config.baseUrl;
9269
+ }
9270
+ //Make sure dirBaseUrl ends in a slash, since it is
9271
+ //concatenated with other strings.
9272
+ config.dirBaseUrl = endsWithSlash(config.dirBaseUrl);
9273
+ }
9274
+
9037
9275
  //Check for errors in config
9038
9276
  if (config.cssIn && !config.out) {
9039
9277
  throw new Error("ERROR: 'out' option missing.");
@@ -9042,7 +9280,15 @@ function (lang, logger, file, parse, optimize, pragma,
9042
9280
  throw new Error("ERROR: 'baseUrl' option missing.");
9043
9281
  }
9044
9282
  if (!config.out && !config.dir) {
9045
- throw new Error('Missing either an "out" or "dir" config value.');
9283
+ throw new Error('Missing either an "out" or "dir" config value. ' +
9284
+ 'If using "appDir" for a full project optimization, ' +
9285
+ 'use "dir". If you want to optimize to one file, ' +
9286
+ 'use "out".');
9287
+ }
9288
+ if (config.appDir && config.out) {
9289
+ throw new Error('"appDir" is not compatible with "out". Use "dir" ' +
9290
+ 'instead. appDir is used to copy whole projects, ' +
9291
+ 'where "out" is used to just optimize to one file.');
9046
9292
  }
9047
9293
  if (config.out && config.dir) {
9048
9294
  throw new Error('The "out" and "dir" options are incompatible.' +
@@ -9051,10 +9297,11 @@ function (lang, logger, file, parse, optimize, pragma,
9051
9297
  ' or baseUrl directories optimized.');
9052
9298
  }
9053
9299
 
9054
- if (config.out && !config.cssIn) {
9055
- //Just one file to optimize.
9056
-
9057
- //Set up dummy module layer to build.
9300
+ if ((config.name || config.include) && !config.modules) {
9301
+ //Just need to build one file, but may be part of a whole appDir/
9302
+ //baseUrl copy, but specified on the command line, so cannot do
9303
+ //the modules array setup. So create a modules section in that
9304
+ //case.
9058
9305
  config.modules = [
9059
9306
  {
9060
9307
  name: config.name,
@@ -9064,6 +9311,10 @@ function (lang, logger, file, parse, optimize, pragma,
9064
9311
  excludeShallow: config.excludeShallow
9065
9312
  }
9066
9313
  ];
9314
+ }
9315
+
9316
+ if (config.out && !config.cssIn) {
9317
+ //Just one file to optimize.
9067
9318
 
9068
9319
  //Does not have a build file, so set up some defaults.
9069
9320
  //Optimizing CSS should not be allowed, unless explicitly
@@ -9281,23 +9532,37 @@ function (lang, logger, file, parse, optimize, pragma,
9281
9532
  if (builder.write) {
9282
9533
  writeApi = function (input) {
9283
9534
  fileContents += "\n" + addSemiColon(input);
9535
+ if (config.onBuildWrite) {
9536
+ fileContents = config.onBuildWrite(moduleName, path, fileContents);
9537
+ }
9284
9538
  };
9285
9539
  writeApi.asModule = function (moduleName, input) {
9286
9540
  fileContents += "\n" +
9287
9541
  addSemiColon(
9288
9542
  build.toTransport(anonDefRegExp, namespace, moduleName, path, input, layer));
9543
+ if (config.onBuildWrite) {
9544
+ fileContents = config.onBuildWrite(moduleName, path, fileContents);
9545
+ }
9289
9546
  };
9290
9547
  builder.write(parts.prefix, parts.name, writeApi);
9291
9548
  }
9292
9549
  } else {
9293
9550
  currContents = file.readFile(path);
9294
9551
 
9552
+ if (config.onBuildRead) {
9553
+ currContents = config.onBuildRead(moduleName, path, currContents);
9554
+ }
9555
+
9295
9556
  if (config.namespace) {
9296
9557
  currContents = pragma.namespace(currContents, config.namespace);
9297
9558
  }
9298
9559
 
9299
9560
  currContents = build.toTransport(anonDefRegExp, namespace, moduleName, path, currContents, layer);
9300
9561
 
9562
+ if (config.onBuildWrite) {
9563
+ currContents = config.onBuildWrite(moduleName, path, currContents);
9564
+ }
9565
+
9301
9566
  //Semicolon is for files that are not well formed when
9302
9567
  //concatenated with other content.
9303
9568
  fileContents += "\n" + addSemiColon(currContents);
@@ -9345,7 +9610,7 @@ function (lang, logger, file, parse, optimize, pragma,
9345
9610
  //define(\n//begin v1.x content
9346
9611
  //for a comment.
9347
9612
  return new RegExp('(^|[^\\.])(' + (namespace || '').replace(/\./g, '\\.') +
9348
- 'define|define)\\s*\\(\\s*(\\/\\/[^\\n\\r]*[\\r\\n])?(\\[|function|[\\w\\d_\\$]+\\s*\\)|\\{|["\']([^"\']+)["\'])(\\s*,\\s*f)?');
9613
+ 'define|define)\\s*\\(\\s*(\\/\\/[^\\n\\r]*[\\r\\n])?(\\[|function|[\\w\\d_\\-\\$]+\\s*\\)|\\{|["\']([^"\']+)["\'])(\\s*,\\s*f)?');
9349
9614
  };
9350
9615
 
9351
9616
  build.leadingCommaRegExp = /^\s*,/;
@@ -2,7 +2,7 @@
2
2
  var requirejs = require('<%= rjs_path %>'),
3
3
  //Set up basic config, include config that is
4
4
  //common to all the optimize() calls.
5
- basConfig = <%= JSON.pretty_generate(build_config) %>;
5
+ basConfig = <%= JSON.pretty_generate(build_config.reject {|k,v| k == 'modules'}) %>;
6
6
 
7
7
  // Function used to mix in baseConfig to a new config target
8
8
  function mix(target) {
@@ -1,5 +1,5 @@
1
1
  module Requirejs
2
2
  module Rails
3
- VERSION = "0.5.5"
3
+ VERSION = "0.5.6"
4
4
  end
5
5
  end
@@ -13,7 +13,7 @@ class RequirejsRailsTest < ActiveSupport::TestCase
13
13
  test "require.js version" do
14
14
  require_js = Pathname.new(__FILE__+'/../../vendor/assets/javascripts/require.js').cleanpath.read
15
15
  context = ExecJS.compile(require_js)
16
- assert_equal "1.0.5", context.eval("require.version")
16
+ assert_equal "1.0.7", context.eval("require.version")
17
17
  end
18
18
  end
19
19
 
@@ -1,5 +1,5 @@
1
1
  /** vim: et:ts=4:sw=4:sts=4
2
- * @license RequireJS 1.0.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
2
+ * @license RequireJS 1.0.7 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
3
3
  * Available via the MIT or new BSD license.
4
4
  * see: http://github.com/jrburke/requirejs for details
5
5
  */
@@ -9,7 +9,7 @@
9
9
  var requirejs, require, define;
10
10
  (function () {
11
11
  //Change this version number for each release.
12
- var version = "1.0.5",
12
+ var version = "1.0.7",
13
13
  commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
14
14
  cjsRequireRegExp = /require\(\s*["']([^'"\s]+)["']\s*\)/g,
15
15
  currDirRegExp = /^\.\//,
@@ -1053,6 +1053,7 @@ var requirejs, require, define;
1053
1053
  err = makeError("timeout", "Load timeout for modules: " + noLoads);
1054
1054
  err.requireType = "timeout";
1055
1055
  err.requireModules = noLoads;
1056
+ err.contextName = context.contextName;
1056
1057
  return req.onError(err);
1057
1058
  }
1058
1059
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: requirejs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.5.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-07 00:00:00.000000000 Z
12
+ date: 2012-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70232060928740 !ruby/object:Gem::Requirement
16
+ requirement: &70316642847980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '3.3'
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70232060928740
27
+ version_requirements: *70316642847980
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rails
30
- requirement: &70232060927640 !ruby/object:Gem::Requirement
30
+ requirement: &70316642846680 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -38,10 +38,10 @@ dependencies:
38
38
  version: '3.3'
39
39
  type: :development
40
40
  prerelease: false
41
- version_requirements: *70232060927640
41
+ version_requirements: *70316642846680
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: sqlite3
44
- requirement: &70232060926680 !ruby/object:Gem::Requirement
44
+ requirement: &70316642844860 !ruby/object:Gem::Requirement
45
45
  none: false
46
46
  requirements:
47
47
  - - ! '>='
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: '0'
50
50
  type: :development
51
51
  prerelease: false
52
- version_requirements: *70232060926680
52
+ version_requirements: *70316642844860
53
53
  description: This gem provides RequireJS support for your Rails 3 application.
54
54
  email:
55
55
  - whitley@bangpath.org
@@ -128,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  segments:
130
130
  - 0
131
- hash: 1037302164600132161
131
+ hash: -4183822375632730942
132
132
  required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  none: false
134
134
  requirements:
@@ -137,12 +137,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: '0'
138
138
  segments:
139
139
  - 0
140
- hash: 1037302164600132161
140
+ hash: -4183822375632730942
141
141
  requirements:
142
142
  - node.js is required for 'rake assets:precompile', used to run the r.js build
143
143
  - If needed, jQuery should be v1.7 or greater (jquery-rails >= 1.0.17).
144
144
  rubyforge_project:
145
- rubygems_version: 1.8.10
145
+ rubygems_version: 1.8.16
146
146
  signing_key:
147
147
  specification_version: 3
148
148
  summary: Use RequireJS with the Rails 3 Asset Pipeline