Adding support for jruby and mri.

This commit is contained in:
Chris Cowan 2014-09-03 15:15:58 -07:00
parent c8b7e7ecf7
commit e5c1ba64bd
14 changed files with 160 additions and 28 deletions

View file

@ -12,6 +12,9 @@ module.exports = function (grunt) {
target: __dirname + '/target', // location of the compressed build targets
buildApp: __dirname + '/build/kibana', // build directory for the app
jrubyVersion: '1.7.14',
jrubyPath: __dirname + '/.jruby',
unitTestDir: __dirname + '/test/unit',
testUtilsDir: __dirname + '/test/utils',
bowerComponentsDir: __dirname + '/src/kibana/bower_components',

View file

@ -27,10 +27,14 @@
"istanbul": "~0.2.4",
"load-grunt-config": "~0.7.0",
"lodash": "~2.4.1",
"mkdirp": "^0.5.0",
"mocha": "~1.20.1",
"path-browserify": "0.0.0",
"progress": "^1.1.8",
"request": "^2.40.0",
"requirejs": "~2.1.14",
"rjs-build-analysis": "0.0.3"
"rjs-build-analysis": "0.0.3",
"tar": "^1.0.1"
},
"scripts": {
"test": "grunt test",

View file

@ -58,7 +58,7 @@ module Kibana
end
get '/throw' do
raise "SHIT!"
raise "Oops!"
end
# Routes go here

View file

@ -1,11 +1,25 @@
module.exports = function (grunt) {
var jrubyPath = grunt.config.get('jrubyPath');
var jruby = jrubyPath + '/bin/jruby';
var cmd = grunt.config.get('src') + '/server/bin/kibana';
var config = {
kibana_server: {
mri_server: {
options: {
wait: false
// quiet: true
},
cmd: 'src/server/bin/kibana'
cmd: cmd
},
jruby_server: {
options: {
wait: false
// quiet: true
},
cmd: jruby,
args: [
cmd
]
}
};

View file

@ -1,4 +1,16 @@
module.exports = function (grunt) {
var kibana_server_tasks = [];
if (grunt.option('use-mri')) {
kibana_server_tasks = [
'stop:mri_server',
'run:mri_server'
];
} else {
kibana_server_tasks = [
'stop:jruby_server',
'run:jruby_server'
];
}
var config = {
test: {
files: [
@ -31,10 +43,7 @@ module.exports = function (grunt) {
'src/server/**/*.rb',
'src/server/**/*.yml'
],
tasks: [
'stop:kibana_server',
'run:kibana_server'
],
tasks: kibana_server_tasks,
options: {
spawn: false
}

View file

@ -1,9 +1,21 @@
module.exports = function (grunt) {
grunt.registerTask('dev', [
var useMRI = grunt.option('use-mri');
var tasks = [
'less',
'jade',
'run:kibana_server',
'jade'
];
if (useMRI) {
tasks = tasks.concat(['run:mri_server']);
} else {
tasks = tasks.concat([
'download_jruby',
'install_gems',
'run:jruby_server',
'wait_for_jruby'
]);
}
grunt.registerTask('dev', tasks.concat([
'maybe_start_server',
'watch'
]);
]));
};

44
tasks/download_jruby.js Normal file
View file

@ -0,0 +1,44 @@
var zlib = require('zlib');
var tar = require('tar');
var request = require('request');
var mkdirp = require('mkdirp');
var ProgressBar = require('progress');
var fs = require('fs');
module.exports = function (grunt) {
grunt.registerTask('download_jruby', 'Downloads and installs jruby', function () {
var done = this.async();
var jrubyPath = grunt.config.get('jrubyPath');
var jrubyVersion = grunt.config.get('jrubyVersion');
var url = 'http://jruby.org.s3.amazonaws.com/downloads/' + jrubyVersion + '/jruby-bin-' + jrubyVersion + '.tar.gz';
fs.stat(jrubyPath, function (err, stat) {
if (err) {
mkdirp(jrubyPath, function (err) {
if (err) return done(err);
var unzip = zlib.createGunzip();
var out = tar.Extract({ path: jrubyPath, strip: 1 });
out.on('close', done).on('error', done);
var req = request.get(url);
var bar;
req.on('response', function (resp) {
var total = parseInt(resp.headers['content-length'], 10);
bar = new ProgressBar('[:bar] :percent :etas', {
complete: '=',
incomplete: ' ',
width: 80,
clear: true,
total: total
});
});
req.on('data', function (buffer) {
bar.tick(buffer.length);
});
req.pipe(unzip).pipe(out);
});
} else {
done();
}
});
});
};

20
tasks/install_gems.js Normal file
View file

@ -0,0 +1,20 @@
var child_process = require('child_process');
var join = require('path').join;
module.exports = function (grunt) {
grunt.registerTask('install_gems', 'Install Ruby Gems', function () {
var done = this.async();
var gemfile = join(grunt.config.get('src'), 'server', 'Gemfile');
var jrubyPath = grunt.config.get('jrubyPath');
var jruby = jrubyPath + '/bin/jruby -S';
var command = jruby + ' gem install bundler && ' + jruby + ' bundle install --gemfile ' + gemfile;
child_process.exec(command, function (err, stdout, stderr) {
if (err) {
grunt.log.error(stderr);
return done(err);
}
grunt.log.writeln(stdout);
return done();
});
});
};

View file

@ -1,20 +1,34 @@
var _ = require('lodash');
module.exports = function (grunt) {
/* jshint scripturl:true */
grunt.registerTask('test', [
var rubyTasks;
if (grunt.option('use-mri')) {
rubyTasks = [
'run:mri_server',
];
} else {
rubyTasks = [
'download_jruby',
'install_gems',
'run:jruby_server',
'wait_for_jruby'
];
}
grunt.registerTask('test', rubyTasks.concat([
'maybe_start_server',
'jade',
'mocha:unit',
'jshint'
]);
]));
grunt.registerTask('coverage', [
grunt.registerTask('coverage', rubyTasks.concat([
'blanket',
'maybe_start_server',
'mocha:coverage'
]);
]));
grunt.registerTask('test:watch', [
grunt.registerTask('test:watch', rubyTasks.concat([
'maybe_start_server',
'watch:test'
]);
]));
};

18
tasks/wait_for_jruby.js Normal file
View file

@ -0,0 +1,18 @@
var request = require('request');
module.exports = function (grunt) {
grunt.registerTask('wait_for_jruby', 'Is it started yet?', function () {
var done = this.async();
function checkJRuby() {
request('http://127.0.0.1:5601', function (err, resp) {
if (err) {
setTimeout(checkJRuby, 1000);
} else {
done();
}
});
}
checkJRuby();
});
};

View file

@ -3,7 +3,8 @@ var join = require('path').join;
module.exports = function (grunt) {
grunt.registerTask('warble', 'Creates an executable jar.', function () {
var done = this.async();
var command = 'jruby -S warble';
var jrubyPath = grunt.config.get('jrubyPath');
var command = jrubyPath + '/bin/jruby -S warble';
var options = {
cwd: join(grunt.config.get('build'), 'kibana')
};

View file

@ -7,7 +7,6 @@ define(function (require) {
require('angular-route');
// Load the code for the directive
require('index');
require('apps/visualize/index');
require('apps/dashboard/index');
@ -54,4 +53,4 @@ define(function (require) {
});
});
});

View file

@ -8,9 +8,6 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
// Load kibana and its applications
require('index');
require('apps/discover/index');
var $parentScope, $scope, $elem;
@ -123,4 +120,4 @@ define(function (require) {
});
});
});

View file

@ -2,9 +2,6 @@ define(function (require) {
var sinon = require('sinon/sinon');
require('components/state_management/global_state');
// Load kibana
require('index');
describe('State Management', function () {
var $rootScope, $location, state;