@samitouri / QOS-React-2 / commits / 520c4f96d4

Move react-source gem out of project root

Now it requires a build step. At least the confusing lib directory is gone though.

Paul O’Shannessy committed Jul 21, 2014 at 20:41 UTC 520c4f96d4703d13ec97e5a2e9ee69f312d075a6
5 files changed +73 -12
Gruntfile.js
+6 -9
@@ -12,6 +12,7 @@ var releaseTasks = require('./grunt/tasks/release');
12 var npmReactTasks = require('./grunt/tasks/npm-react');
13 var npmReactToolsTasks = require('./grunt/tasks/npm-react-tools');
14 var versionCheckTask = require('./grunt/tasks/version-check');
15 +var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
16
17 module.exports = function(grunt) {
18
@@ -68,6 +69,8 @@ module.exports = function(grunt) {
69 grunt.registerTask('npm-react:pack', npmReactTasks.packRelease);
70 grunt.registerTask('npm-react-tools:release', npmReactToolsTasks.buildRelease);
71 grunt.registerTask('npm-react-tools:pack', npmReactToolsTasks.packRelease);
72 + grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
73 + grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
74
75 grunt.registerTask('version-check', versionCheckTask);
76
@@ -96,6 +99,7 @@ module.exports = function(grunt) {
99 'populist:test'
100 ]);
101 grunt.registerTask('build:npm-react', ['version-check', 'jsx:normal', 'npm-react:release']);
102 + grunt.registerTask('build:gem-react-source', ['build', 'gem-react-source:release'])
103
104 grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
105
@@ -238,7 +242,8 @@ module.exports = function(grunt) {
242 'release:setup',
243 'clean',
244 'build',
241 - 'gem:only',
245 + 'gem-react-source:release',
246 + 'gem-react-source:pack',
247 'release:bower',
248 'release:starter',
249 'compress',
@@ -246,14 +251,6 @@ module.exports = function(grunt) {
251 'release:msg'
252 ]);
253
249 - // `gem` task to build the react-source gem
250 - grunt.registerTask('gem', ['build', 'gem:only']);
251 -
252 - grunt.registerTask('gem:only', function() {
253 - var done = this.async();
254 - exec('gem build react-source.gemspec', done);
255 - });
256 -
254 // The default task - build - to keep setup easy
255 grunt.registerTask('default', ['build']);
256 };
gem-react-source/lib/react/source.rb renamed
gem-react-source/react-source.gemspec renamed
+4 -1
@@ -1,7 +1,10 @@
1 #encoding: utf-8
2
3 require('json')
4 -package = JSON.parse(File.read('package.json'))
4 +
5 +# Because of build process, does not necessarily reflect directory path in the
6 +# repository.
7 +package = JSON.parse(File.read('../../package.json'))
8
9 gemspec = Gem::Specification.new do |s|
10 s.name = 'react-source'
grunt/tasks/gem-react-source.js new
+61
@@ -0,0 +1,61 @@
1 +'use strict';
2 +
3 +var fs = require('fs');
4 +var grunt = require('grunt');
5 +
6 +var src = 'gem-react-source/';
7 +var dest = 'build/gem-react-source/';
8 +var build = dest + 'build/';
9 +var buildFiles = [
10 + 'react.js', 'react.min.js', 'JSXTransformer.js',
11 + 'react-with-addons.js', 'react-with-addons.min.js'
12 +];
13 +
14 +function buildRelease() {
15 + grunt.file.exists(dest) && grunt.file.delete(dest);
16 +
17 + // Copy gem-react-source/**/* to build/gem-react-source
18 + var mappings = [].concat(
19 + grunt.file.expandMapping('**/*', dest, {cwd: src})
20 + );
21 + mappings.forEach(function(mapping) {
22 + var src = mapping.src[0];
23 + var dest = mapping.dest;
24 + if (grunt.file.isDir(src)) {
25 + grunt.file.mkdir(dest);
26 + } else {
27 + grunt.file.copy(src, dest);
28 + }
29 + });
30 +
31 + // Make built source available inside npm package
32 + grunt.file.mkdir(build);
33 + buildFiles.forEach(function(file) {
34 + grunt.file.copy('build/' + file, build + file);
35 + });
36 +}
37 +
38 +function packRelease() {
39 + /*jshint validthis:true */
40 + var done = this.async();
41 + var spawnCmd = {
42 + cmd: 'gem',
43 + args: ['build', 'react-source.gemspec'],
44 + opts: {
45 + cwd: dest
46 + }
47 + };
48 + grunt.util.spawn(spawnCmd, function(err, result) {
49 + // Gem packing does weird things to versions so 0.12.0-alpha becomes
50 + // 0.12.0.pre.alpha. We need to get the filename printed to stdout.
51 + var filename = result.stdout.match(/File: (.*)$/)[1];
52 + var src = 'build/gem-react-source/' + filename;
53 + var dest = 'build/react-source.tgz';
54 + fs.rename(src, dest, done);
55 + });
56 +}
57 +
58 +module.exports = {
59 + buildRelease: buildRelease,
60 + packRelease: packRelease
61 +};
grunt/tasks/npm-react-tools.js
+2 -2
@@ -20,9 +20,9 @@ function buildRelease() {
20
21 pkgFiles.map(function(file) {
22 if (grunt.file.isDir(file)) {
23 - mappings = mappings.concat(grunt.file.expandMapping(file + '**/*', dest))
23 + mappings = mappings.concat(grunt.file.expandMapping(file + '**/*', dest));
24 } else {
25 - mappings.push({src: [file], dest: dest + file})
25 + mappings.push({src: [file], dest: dest + file});
26 }
27 });
28