requirejs-rails 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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