requirejs-rails 0.9.3 → 0.9.4

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.
@@ -17,14 +17,15 @@ module Requirejs::Rails
17
17
  self.tmp_dir = application.root + 'tmp'
18
18
  self.bin_dir = Pathname.new(__FILE__+'/../../../../bin').cleanpath
19
19
 
20
- self.source_dir = self.tmp_dir + 'assets'
20
+ self.source_dir = self.tmp_dir.join("requirejs/src")
21
+ self.build_dir = self.tmp_dir.join("requirejs/dst")
21
22
  self.target_dir = application.root + 'public/assets'
22
23
  self.rjs_path = self.bin_dir+'r.js'
23
24
 
24
25
  self.loader = :requirejs
25
26
 
26
27
  self.driver_template_path = Pathname.new(__FILE__+'/../rjs_driver.js.erb').cleanpath
27
- self.driver_path = self.tmp_dir + 'rjs_driver.js'
28
+ self.driver_path = self.tmp_dir.join("requirejs/rjs_driver.js")
28
29
 
29
30
  self.user_config = {}
30
31
 
@@ -142,10 +143,6 @@ module Requirejs::Rails
142
143
  end
143
144
  end
144
145
 
145
- def module_path_for(mod)
146
- self.target_dir+(module_name_for(mod)+'.js')
147
- end
148
-
149
146
  def get_binding
150
147
  return binding()
151
148
  end
@@ -20,12 +20,13 @@ module Requirejs
20
20
 
21
21
  config.assets.precompile += config.requirejs.precompile
22
22
 
23
- # Check for the existence of the requirejs:precompile:all top-level Rake task and disable asset pipeline
24
- # compression to ensure that `r.js` gets uncompressed assets.
23
+ # Check for the `requirejs:precompile:all` top-level Rake task and run the following initialization code.
25
24
  Rake.application.top_level_tasks.each do |task_name|
26
25
  case task_name
27
26
  when "requirejs:precompile:all"
28
- config.assets.js_compressor = false
27
+ # Enable class reloading so that Sprockets doesn't freeze the assets environment. This allows settings
28
+ # for JS compression to be changes on a per-file basis.
29
+ config.cache_classes = false
29
30
  end
30
31
  end if defined?(Rake.application)
31
32
 
@@ -1,46 +1,25 @@
1
- //Load the requirejs optimizer
2
- var requirejs = require('<%= rjs_path %>'),
3
- //Set up basic config, include config that is
4
- //common to all the optimize() calls.
5
- baseConfig = <%=
6
- modifiedHash = build_config.select {|k, _| k != "modules"}
7
- pathsHash = modifiedHash["paths"]
8
- modifiedHash["paths"] = pathsHash.select {|_, v| !v.is_a?(Array)} if !pathsHash.nil?
1
+ var requirejs = require(<%= rjs_path.to_s.dump %>)
2
+ var baseConfig = <%=
3
+ cdn_pattern = Regexp.new("\\Ahttps?://")
9
4
 
10
- JSON.pretty_generate(modifiedHash)
11
- %>;
5
+ modifiedHash = build_config.select { |k, _| k != "modules" }
6
+ pathsHash = modifiedHash["paths"]
7
+ modifiedHash["dir"] = build_dir.to_s
8
+ modifiedHash["paths"] = Hash[pathsHash
9
+ .select do |_, v|
10
+ !v.is_a?(Array)
11
+ end.map do |k, v|
12
+ [k, if !cdn_pattern.match(v) then v else "empty:" end]
13
+ end
14
+ ] if !pathsHash.nil?
12
15
 
13
- // Function used to mix in baseConfig to a new config target
14
- function mix(target) {
15
- for (var prop in baseConfig) {
16
- if (baseConfig.hasOwnProperty(prop)) {
17
- target[prop] = baseConfig[prop];
18
- }
19
- }
20
- return target;
21
- }
16
+ JSON.pretty_generate(modifiedHash)
17
+ %>;
22
18
 
23
- var module_specs = [
24
- <% build_config['modules'].each do |m| %>
25
- <%= JSON.pretty_generate(m.merge 'out' => module_path_for(m).to_s ) %>,
19
+ baseConfig.modules = [
20
+ <% build_config["modules"].each do |m| %>
21
+ <%= JSON.pretty_generate(m) %>,
26
22
  <% end %>
27
23
  ];
28
24
 
29
- // Error handler invoked in case requirejs compilation fails
30
- var errback = function(error) {
31
- process.stderr.write(error.toString());
32
- process.exit(1);
33
- }
34
-
35
- // Do a series of builds of individual files, using the args suggested by:
36
- // http://requirejs.org/docs/optimization.html#onejs
37
- //
38
- // r.js will eventually need a nested call idiom to handle async
39
- // builds. Anticipating that need.
40
- var async_runner = module_specs.reduceRight(function(prev, curr) {
41
- return function (buildReportText) {
42
- requirejs.optimize(mix(curr), prev, errback);
43
- };
44
- }, function(buildReportText) {} );
45
-
46
- async_runner();
25
+ requirejs.optimize(baseConfig);
@@ -1,6 +1,6 @@
1
1
  module Requirejs
2
2
  module Rails
3
- Version = "0.9.3"
4
- LibVersion = "2.1.11"
3
+ Version = "0.9.4"
4
+ LibVersion = "2.1.14"
5
5
  end
6
6
  end
@@ -34,12 +34,12 @@ namespace :requirejs do
34
34
 
35
35
  requirejs = ActiveSupport::OrderedOptions.new
36
36
 
37
- task :clean => ["requirejs:setup"] do
37
+ task clean: ["requirejs:setup"] do
38
38
  FileUtils.remove_entry_secure(requirejs.config.source_dir, true)
39
39
  FileUtils.remove_entry_secure(requirejs.driver_path, true)
40
40
  end
41
41
 
42
- task :setup => ["assets:environment"] do
42
+ task setup: ["assets:environment"] do
43
43
  unless defined?(Sprockets)
44
44
  warn "Cannot precompile assets if sprockets is disabled. Please set config.assets.enabled to true"
45
45
  exit
@@ -72,41 +72,67 @@ OS X Homebrew users can use 'brew install node'.
72
72
  end
73
73
 
74
74
  namespace :precompile do
75
- task :all => ["requirejs:precompile:prepare_source",
76
- "requirejs:precompile:generate_rjs_driver",
77
- "requirejs:precompile:run_rjs",
78
- "requirejs:precompile:digestify_and_compress"]
75
+ task all: ["requirejs:precompile:prepare_source",
76
+ "requirejs:precompile:generate_rjs_driver",
77
+ "requirejs:precompile:run_rjs",
78
+ "requirejs:precompile:digestify_and_compress"]
79
79
 
80
80
  # Invoke another ruby process if we're called from inside
81
81
  # assets:precompile so we don't clobber the environment
82
82
  #
83
83
  # We depend on test_node here so we'll fail early and hard if node
84
84
  # isn't available.
85
- task :external => ["requirejs:test_node"] do
85
+ task external: ["requirejs:test_node"] do
86
86
  ruby_rake_task "requirejs:precompile:all"
87
87
  end
88
88
 
89
- # copy all assets to tmp/assets
90
- task :prepare_source => ["requirejs:setup",
91
- "requirejs:clean"] do
89
+ # Copy all assets to the temporary staging directory.
90
+ task prepare_source: ["requirejs:setup",
91
+ "requirejs:clean"] do
92
+ bower_json_pattern = Regexp.new("\\A(.*)/bower\\.json\\z")
93
+ js_ext = requirejs.env.extension_for_mime_type("application/javascript")
94
+
92
95
  requirejs.config.source_dir.mkpath
96
+
97
+ # Save the original JS compressor and cache, which will be restored later.
98
+
99
+ original_js_compressor = requirejs.env.js_compressor
100
+ requirejs.env.js_compressor = false
101
+
102
+ original_cache = requirejs.env.cache
103
+ requirejs.env.cache = nil
104
+
93
105
  requirejs.env.each_logical_path do |logical_path|
94
- next unless requirejs.config.asset_allowed?(logical_path)
95
- if asset = requirejs.env.find_asset(logical_path)
96
- filename = requirejs.config.source_dir + asset.logical_path
106
+ m = bower_json_pattern.match(logical_path)
107
+ bower_logical_path = m && "#{m[1]}#{js_ext}"
108
+
109
+ next \
110
+ if !(requirejs.config.asset_allowed?(logical_path) || bower_logical_path)
111
+
112
+ asset = requirejs.env.find_asset(logical_path)
113
+
114
+ if asset
115
+ # If a `bower.json` was found, then substitute the logical path with the parsed module name.
116
+ filename = requirejs.config.source_dir.join(bower_logical_path || asset.logical_path)
97
117
  filename.dirname.mkpath
98
118
  asset.write_to(filename)
99
119
  end
100
120
  end
121
+
122
+ # Restore the original JS compressor and cache.
123
+ requirejs.env.js_compressor = original_js_compressor
124
+ requirejs.env.cache = original_cache
101
125
  end
102
126
 
103
- task :generate_rjs_driver => ["requirejs:setup"] do
127
+ task generate_rjs_driver: ["requirejs:setup"] do
104
128
  requirejs.builder.generate_rjs_driver
105
129
  end
106
130
 
107
- task :run_rjs => ["requirejs:setup",
108
- "requirejs:test_node"] do
131
+ task run_rjs: ["requirejs:setup",
132
+ "requirejs:test_node"] do
133
+ requirejs.config.build_dir.mkpath
109
134
  requirejs.config.target_dir.mkpath
135
+ requirejs.config.driver_path.dirname.mkpath
110
136
 
111
137
  result = `node "#{requirejs.config.driver_path}"`
112
138
  unless $?.success?
@@ -116,12 +142,16 @@ OS X Homebrew users can use 'brew install node'.
116
142
 
117
143
  # Copy each built asset, identified by a named module in the
118
144
  # build config, to its Sprockets digestified name.
119
- task :digestify_and_compress => ["requirejs:setup"] do
145
+ task digestify_and_compress: ["requirejs:setup"] do
120
146
  requirejs.config.build_config['modules'].each do |m|
121
147
  asset_name = "#{requirejs.config.module_name_for(m)}.js"
122
- built_asset_path = requirejs.config.target_dir + asset_name
148
+ built_asset_path = requirejs.config.build_dir.join(asset_name)
123
149
  digest_name = asset_name.sub(/\.(\w+)$/) { |ext| "-#{requirejs.builder.digest_for(built_asset_path)}#{ext}" }
124
150
  digest_asset_path = requirejs.config.target_dir + digest_name
151
+
152
+ # Ensure that the parent directory `a/b` for modules with names like `a/b/c` exist.
153
+ digest_asset_path.dirname.mkpath
154
+
125
155
  requirejs.manifest[asset_name] = digest_name
126
156
  FileUtils.cp built_asset_path, digest_asset_path
127
157
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["John Whitley"]
11
11
  s.email = ["whitley@bangpath.org"]
12
12
  s.homepage = "http://github.com/jwhitley/requirejs-rails"
13
- s.summary = "Use RequireJS with the Rails 3 Asset Pipeline"
13
+ s.summary = "Use RequireJS with the Rails 3+ Asset Pipeline"
14
14
  s.description = "This gem provides RequireJS support for your Rails 3 application."
15
15
 
16
16
  git_test_files, git_files = `git ls-files`.split("\n").partition { |f| f =~ /^test/ }
@@ -1,5 +1,5 @@
1
1
  /** vim: et:ts=4:sw=4:sts=4
2
- * @license RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
2
+ * @license RequireJS 2.1.14 Copyright (c) 2010-2014, 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
  */
@@ -12,7 +12,7 @@ var requirejs, require, define;
12
12
  (function (global) {
13
13
  var req, s, head, baseElement, dataMain, src,
14
14
  interactiveScript, currentlyAddingScript, mainScript, subPath,
15
- version = '2.1.11',
15
+ version = '2.1.14',
16
16
  commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
17
17
  cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
18
18
  jsSuffixRegExp = /\.js$/,
@@ -180,7 +180,7 @@ var requirejs, require, define;
180
180
 
181
181
  if (typeof requirejs !== 'undefined') {
182
182
  if (isFunction(requirejs)) {
183
- //Do not overwrite and existing requirejs instance.
183
+ //Do not overwrite an existing requirejs instance.
184
184
  return;
185
185
  }
186
186
  cfg = requirejs;
@@ -232,21 +232,20 @@ var requirejs, require, define;
232
232
  * @param {Array} ary the array of path segments.
233
233
  */
234
234
  function trimDots(ary) {
235
- var i, part, length = ary.length;
236
- for (i = 0; i < length; i++) {
235
+ var i, part;
236
+ for (i = 0; i < ary.length; i++) {
237
237
  part = ary[i];
238
238
  if (part === '.') {
239
239
  ary.splice(i, 1);
240
240
  i -= 1;
241
241
  } else if (part === '..') {
242
- if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
243
- //End of the line. Keep at least one non-dot
244
- //path segment at the front so it can be mapped
245
- //correctly to disk. Otherwise, there is likely
246
- //no path mapping for a path starting with '..'.
247
- //This can still fail, but catches the most reasonable
248
- //uses of ..
249
- break;
242
+ // If at the start, or previous value is still ..,
243
+ // keep them so that when converted to a path it may
244
+ // still work when converted to a path, even though
245
+ // as an ID it is less than ideal. In larger point
246
+ // releases, may be better to just kick out an error.
247
+ if (i === 0 || (i == 1 && ary[2] === '..') || ary[i - 1] === '..') {
248
+ continue;
250
249
  } else if (i > 0) {
251
250
  ary.splice(i - 1, 2);
252
251
  i -= 2;
@@ -267,43 +266,37 @@ var requirejs, require, define;
267
266
  */
268
267
  function normalize(name, baseName, applyMap) {
269
268
  var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex,
270
- foundMap, foundI, foundStarMap, starI,
271
- baseParts = baseName && baseName.split('/'),
272
- normalizedBaseParts = baseParts,
269
+ foundMap, foundI, foundStarMap, starI, normalizedBaseParts,
270
+ baseParts = (baseName && baseName.split('/')),
273
271
  map = config.map,
274
272
  starMap = map && map['*'];
275
273
 
276
274
  //Adjust any relative paths.
277
- if (name && name.charAt(0) === '.') {
278
- //If have a base name, try to normalize against it,
279
- //otherwise, assume it is a top-level require that will
280
- //be relative to baseUrl in the end.
281
- if (baseName) {
275
+ if (name) {
276
+ name = name.split('/');
277
+ lastIndex = name.length - 1;
278
+
279
+ // If wanting node ID compatibility, strip .js from end
280
+ // of IDs. Have to do this here, and not in nameToUrl
281
+ // because node allows either .js or non .js to map
282
+ // to same file.
283
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
284
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
285
+ }
286
+
287
+ // Starts with a '.' so need the baseName
288
+ if (name[0].charAt(0) === '.' && baseParts) {
282
289
  //Convert baseName to array, and lop off the last part,
283
290
  //so that . matches that 'directory' and not name of the baseName's
284
291
  //module. For instance, baseName of 'one/two/three', maps to
285
292
  //'one/two/three.js', but we want the directory, 'one/two' for
286
293
  //this normalization.
287
294
  normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
288
- name = name.split('/');
289
- lastIndex = name.length - 1;
290
-
291
- // If wanting node ID compatibility, strip .js from end
292
- // of IDs. Have to do this here, and not in nameToUrl
293
- // because node allows either .js or non .js to map
294
- // to same file.
295
- if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
296
- name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
297
- }
298
-
299
295
  name = normalizedBaseParts.concat(name);
300
- trimDots(name);
301
- name = name.join('/');
302
- } else if (name.indexOf('./') === 0) {
303
- // No baseName, so this is ID is resolved relative
304
- // to baseUrl, pull off the leading dot.
305
- name = name.substring(2);
306
296
  }
297
+
298
+ trimDots(name);
299
+ name = name.join('/');
307
300
  }
308
301
 
309
302
  //Apply map config if available.
@@ -379,7 +372,13 @@ var requirejs, require, define;
379
372
  //retry
380
373
  pathConfig.shift();
381
374
  context.require.undef(id);
382
- context.require([id]);
375
+
376
+ //Custom require that does not do map translation, since
377
+ //ID is "absolute", already mapped/resolved.
378
+ context.makeRequire(null, {
379
+ skipMap: true
380
+ })([id]);
381
+
383
382
  return true;
384
383
  }
385
384
  }
@@ -445,7 +444,16 @@ var requirejs, require, define;
445
444
  return normalize(name, parentName, applyMap);
446
445
  });
447
446
  } else {
448
- normalizedName = normalize(name, parentName, applyMap);
447
+ // If nested plugin references, then do not try to
448
+ // normalize, as it will not normalize correctly. This
449
+ // places a restriction on resourceIds, and the longer
450
+ // term solution is not to normalize until plugins are
451
+ // loaded and all normalizations to allow for async
452
+ // loading of a loader plugin. But for now, fixes the
453
+ // common uses. Details in #1131
454
+ normalizedName = name.indexOf('!') === -1 ?
455
+ normalize(name, parentName, applyMap) :
456
+ name;
449
457
  }
450
458
  } else {
451
459
  //A regular module.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: requirejs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Whitley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-22 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -139,7 +139,7 @@ rubyforge_project:
139
139
  rubygems_version: 2.2.2
140
140
  signing_key:
141
141
  specification_version: 4
142
- summary: Use RequireJS with the Rails 3 Asset Pipeline
142
+ summary: Use RequireJS with the Rails 3+ Asset Pipeline
143
143
  test_files:
144
144
  - test/dummy/.rvmrc
145
145
  - test/dummy/Rakefile
@@ -176,3 +176,4 @@ test_files:
176
176
  - test/dummy/script/rails
177
177
  - test/requirejs-rails_test.rb
178
178
  - test/test_helper.rb
179
+ has_rdoc: