loris 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/closure-compiler/compiler.jar +0 -0
- data/lib/file_actioner.rb +4 -1
- data/lib/filters/modified_filter.rb +8 -1
- data/lib/google-lint/fixjsstyle +9 -0
- data/lib/google-lint/gjslint +9 -0
- data/lib/jasmine-node/lib/jasmine/index.js +1 -1
- data/lib/jasmine-node/specs.js +164 -6
- data/lib/loris.rb +74 -1
- data/lib/poller.rb +3 -2
- data/lib/task_manager.rb +2 -1
- data/lib/tasks/closure_compiler/closure_compiler_config.rb +17 -0
- data/lib/tasks/closure_compiler/closure_compiler_parser.rb +46 -0
- data/lib/tasks/closure_compiler/closure_compiler_runner.rb +47 -0
- data/lib/tasks/google_lint/google_lint_config.rb +17 -0
- data/lib/tasks/google_lint/google_lint_parser.rb +41 -0
- data/lib/tasks/google_lint/google_lint_runner.rb +62 -0
- data/lib/tasks/jasmine_node/jasmine_node_config.rb +30 -0
- data/lib/tasks/jasmine_node/jasmine_node_parser.rb +1 -1
- data/lib/tasks/jasmine_node/jasmine_node_runner.rb +10 -6
- data/lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb +36 -0
- data/lib/tasks/jasmine_node_coverage/js_coverage.rb +11 -0
- data/loris.gemspec +19 -4
- data/loris.tmproj +201 -5
- metadata +75 -17
data/Rakefile
CHANGED
@@ -14,6 +14,7 @@ begin
|
|
14
14
|
gem.homepage = "http://github.com/karl/loris"
|
15
15
|
gem.authors = ["Karl O'Keeffe"]
|
16
16
|
|
17
|
+
gem.add_dependency('json', [">= 1.4.3"])
|
17
18
|
gem.add_dependency('bind', [">= 0.2.6"])
|
18
19
|
gem.add_dependency('karl-growl', [">= 1.0.6"])
|
19
20
|
gem.add_dependency('extensions', [">= 0.6.0"])
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
Binary file
|
data/lib/file_actioner.rb
CHANGED
@@ -9,6 +9,7 @@ class FileActioner
|
|
9
9
|
|
10
10
|
def run
|
11
11
|
begin
|
12
|
+
num_tasks_run = 0
|
12
13
|
files = @file_finder.find
|
13
14
|
|
14
15
|
# Refactor this to the file_finder class
|
@@ -16,13 +17,15 @@ class FileActioner
|
|
16
17
|
files[:filtered] = files[:filtered] | changes
|
17
18
|
|
18
19
|
if (files[:filtered] != [])
|
19
|
-
@task_manager.run(files)
|
20
|
+
num_tasks_run = @task_manager.run(files)
|
20
21
|
end
|
21
22
|
|
22
23
|
@prev_all_files = files[:all]
|
23
24
|
rescue Exception => e
|
24
25
|
@task_manager.output_exception(e);
|
25
26
|
end
|
27
|
+
|
28
|
+
num_tasks_run > 0
|
26
29
|
end
|
27
30
|
|
28
31
|
end
|
@@ -4,13 +4,20 @@ class ModifiedFilter
|
|
4
4
|
@file_class = file_class
|
5
5
|
@last_modified = last_modified
|
6
6
|
@modifieds = []
|
7
|
+
@prev_file_sizes = {}
|
7
8
|
end
|
8
9
|
|
9
10
|
def filter(path)
|
10
11
|
modified = @file_class.mtime(path)
|
11
12
|
@modifieds << modified
|
12
13
|
|
13
|
-
|
14
|
+
file_size = @file_class.size(path)
|
15
|
+
prev_file_size = @prev_file_sizes[path]
|
16
|
+
modified = @last_modified.nil? || modified > @last_modified || prev_file_size.nil? || file_size != prev_file_size
|
17
|
+
|
18
|
+
@prev_file_sizes[path] = file_size
|
19
|
+
|
20
|
+
return modified
|
14
21
|
end
|
15
22
|
|
16
23
|
def complete
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/python
|
2
|
+
# EASY-INSTALL-ENTRY-SCRIPT: 'closure-linter==2.2.5','console_scripts','fixjsstyle'
|
3
|
+
__requires__ = 'closure-linter==2.2.5'
|
4
|
+
import sys
|
5
|
+
from pkg_resources import load_entry_point
|
6
|
+
|
7
|
+
sys.exit(
|
8
|
+
load_entry_point('closure-linter==2.2.5', 'console_scripts', 'fixjsstyle')()
|
9
|
+
)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/python
|
2
|
+
# EASY-INSTALL-ENTRY-SCRIPT: 'closure-linter==2.2.5','console_scripts','gjslint'
|
3
|
+
__requires__ = 'closure-linter==2.2.5'
|
4
|
+
import sys
|
5
|
+
from pkg_resources import load_entry_point
|
6
|
+
|
7
|
+
sys.exit(
|
8
|
+
load_entry_point('closure-linter==2.2.5', 'console_scripts', 'gjslint')()
|
9
|
+
)
|
data/lib/jasmine-node/specs.js
CHANGED
@@ -2,6 +2,7 @@ require.paths.push(__dirname + "/lib");
|
|
2
2
|
require.paths.push("./");
|
3
3
|
|
4
4
|
var sys = require('sys');
|
5
|
+
var fs = require('fs');
|
5
6
|
var jasmine = require('jasmine');
|
6
7
|
|
7
8
|
for(var key in jasmine) {
|
@@ -10,18 +11,175 @@ for(var key in jasmine) {
|
|
10
11
|
|
11
12
|
var isVerbose = false;
|
12
13
|
var showColors = true;
|
13
|
-
var
|
14
|
+
var config = null;
|
15
|
+
var sourceDirectory;
|
16
|
+
var prev = null;
|
14
17
|
process.argv.forEach(function(arg){
|
15
18
|
switch(arg) {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
case '--color': showColors = true; break;
|
20
|
+
case '--noColor': showColors = false; break;
|
21
|
+
case '--verbose': isVerbose = true; break;
|
22
|
+
default:
|
23
|
+
if (prev === '--source-directory') {
|
24
|
+
sourceDirectory = arg;
|
25
|
+
} else {
|
26
|
+
config_path = arg;
|
27
|
+
}
|
28
|
+
break;
|
20
29
|
}
|
30
|
+
prev = arg;
|
21
31
|
});
|
22
32
|
|
33
|
+
var dir = config_path.substring(0, config_path.lastIndexOf('/'));
|
23
34
|
|
24
|
-
|
35
|
+
// read in config
|
36
|
+
var config = fs.readFileSync(config_path);
|
37
|
+
config = JSON.parse(config + "");
|
38
|
+
|
39
|
+
// get the spec directory (or use the default)
|
40
|
+
|
41
|
+
|
42
|
+
// add source dir to requires path (or given source dir argument)
|
43
|
+
require.paths.unshift(sourceDirectory || config.sourceDirectory);
|
44
|
+
|
45
|
+
// require all the requires files
|
46
|
+
for (var i = 0, len = config.requires.length; i < len; ++i){
|
47
|
+
require(config.requires[i]);
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
jasmine.executeSpecsInFolder.call(this, config.specDirectory || dir + '/spec', function(runner, log) {
|
52
|
+
|
53
|
+
if (typeof _$jscoverage === 'object') {
|
54
|
+
reportCoverage(_$jscoverage);
|
55
|
+
}
|
56
|
+
|
25
57
|
// Cannot call process.exit, standard out and standard error do not get flushed
|
26
58
|
// process.exit(runner.results().failedCount);
|
27
59
|
}, isVerbose, showColors);
|
60
|
+
|
61
|
+
function reportCoverage(cov) {
|
62
|
+
populateCoverage(cov);
|
63
|
+
// Stats
|
64
|
+
sys.print('\n [bold]{Test Coverage}\n');
|
65
|
+
var sep = ' +------------------------------------------+----------+------+------+--------+',
|
66
|
+
lastSep = ' +----------+------+------+--------+';
|
67
|
+
sys.puts(sep);
|
68
|
+
sys.puts(' | filename | coverage | LOC | SLOC | missed |');
|
69
|
+
sys.puts(sep);
|
70
|
+
for (var name in cov) {
|
71
|
+
var file = cov[name];
|
72
|
+
if (file instanceof Array) {
|
73
|
+
sys.print(' | ' + rpad(name, 40));
|
74
|
+
sys.print(' | ' + lpad(file.coverage.toFixed(2), 8));
|
75
|
+
sys.print(' | ' + lpad(file.LOC, 4));
|
76
|
+
sys.print(' | ' + lpad(file.SLOC, 4));
|
77
|
+
sys.print(' | ' + lpad(file.totalMisses, 6));
|
78
|
+
sys.print(' |\n');
|
79
|
+
}
|
80
|
+
}
|
81
|
+
sys.puts(sep);
|
82
|
+
sys.print(' ' + rpad('', 40));
|
83
|
+
sys.print(' | ' + lpad(cov.coverage.toFixed(2), 8));
|
84
|
+
sys.print(' | ' + lpad(cov.LOC, 4));
|
85
|
+
sys.print(' | ' + lpad(cov.SLOC, 4));
|
86
|
+
sys.print(' | ' + lpad(cov.totalMisses, 6));
|
87
|
+
sys.print(' |\n');
|
88
|
+
sys.puts(lastSep);
|
89
|
+
// // Source
|
90
|
+
// for (var name in cov) {
|
91
|
+
// if (name.match(/\.js$/)) {
|
92
|
+
// var file = cov[name];
|
93
|
+
// sys.print('\n [bold]{' + name + '}:');
|
94
|
+
// sys.print(file.source);
|
95
|
+
// sys.print('\n');
|
96
|
+
// }
|
97
|
+
// }
|
98
|
+
}
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Populate code coverage data.
|
102
|
+
*
|
103
|
+
* @param {Object} cov
|
104
|
+
* @api private
|
105
|
+
*/
|
106
|
+
|
107
|
+
function populateCoverage(cov) {
|
108
|
+
cov.LOC =
|
109
|
+
cov.SLOC =
|
110
|
+
cov.totalFiles =
|
111
|
+
cov.totalHits =
|
112
|
+
cov.totalMisses =
|
113
|
+
cov.coverage = 0;
|
114
|
+
for (var name in cov) {
|
115
|
+
var file = cov[name];
|
116
|
+
if (file instanceof Array) {
|
117
|
+
// Stats
|
118
|
+
++cov.totalFiles;
|
119
|
+
cov.totalHits += file.totalHits = coverage(file, true);
|
120
|
+
cov.totalMisses += file.totalMisses = coverage(file, false);
|
121
|
+
file.totalLines = file.totalHits + file.totalMisses;
|
122
|
+
cov.SLOC += file.SLOC = file.totalLines;
|
123
|
+
cov.LOC += file.LOC = file.source.length;
|
124
|
+
file.coverage = (file.totalHits / file.totalLines) * 100;
|
125
|
+
// Source
|
126
|
+
var width = file.source.length.toString().length;
|
127
|
+
file.source = file.source.map(function(line, i){
|
128
|
+
++i;
|
129
|
+
var hits = file[i] === 0 ? 0 : (file[i] || ' ');
|
130
|
+
return '\n ' + lpad(i, width) + ' | ' + hits + ' | ' + line;
|
131
|
+
}).join('');
|
132
|
+
}
|
133
|
+
}
|
134
|
+
cov.coverage = (cov.totalHits / cov.SLOC) * 100;
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Total coverage for the given file data.
|
139
|
+
*
|
140
|
+
* @param {Array} data
|
141
|
+
* @return {Type}
|
142
|
+
* @api private
|
143
|
+
*/
|
144
|
+
|
145
|
+
function coverage(data, val) {
|
146
|
+
var n = 0;
|
147
|
+
for (var i = 0, len = data.length; i < len; ++i) {
|
148
|
+
if (data[i] !== undefined && data[i] == val) ++n;
|
149
|
+
}
|
150
|
+
return n;
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Pad the given string to the maximum width provided.
|
155
|
+
*
|
156
|
+
* @param {String} str
|
157
|
+
* @param {Number} width
|
158
|
+
* @return {String}
|
159
|
+
* @api private
|
160
|
+
*/
|
161
|
+
|
162
|
+
function lpad(str, width) {
|
163
|
+
str = String(str);
|
164
|
+
var n = width - str.length;
|
165
|
+
if (n < 1) return str;
|
166
|
+
while (n--) str = ' ' + str;
|
167
|
+
return str;
|
168
|
+
}
|
169
|
+
|
170
|
+
/**
|
171
|
+
* Pad the given string to the maximum width provided.
|
172
|
+
*
|
173
|
+
* @param {String} str
|
174
|
+
* @param {Number} width
|
175
|
+
* @return {String}
|
176
|
+
* @api private
|
177
|
+
*/
|
178
|
+
|
179
|
+
function rpad(str, width) {
|
180
|
+
str = String(str);
|
181
|
+
var n = width - str.length;
|
182
|
+
if (n < 1) return str;
|
183
|
+
while (n--) str = str + ' ';
|
184
|
+
return str;
|
185
|
+
}
|
data/lib/loris.rb
CHANGED
@@ -7,6 +7,7 @@ require 'rbconfig'
|
|
7
7
|
require 'find'
|
8
8
|
require 'Growl'
|
9
9
|
require 'yaml'
|
10
|
+
require 'json'
|
10
11
|
require 'uri'
|
11
12
|
|
12
13
|
|
@@ -40,10 +41,19 @@ require 'tasks/coffeescript/coffeescript_runner'
|
|
40
41
|
require 'tasks/coffeescript/coffeescript_parser'
|
41
42
|
require 'tasks/javascript_lint/javascript_lint_runner'
|
42
43
|
require 'tasks/javascript_lint/javascript_lint_parser'
|
44
|
+
require 'tasks/google_lint/google_lint_runner'
|
45
|
+
require 'tasks/google_lint/google_lint_config'
|
46
|
+
require 'tasks/google_lint/google_lint_parser'
|
47
|
+
require 'tasks/jasmine_node/jasmine_node_config'
|
43
48
|
require 'tasks/jasmine_node/jasmine_node_runner'
|
44
49
|
require 'tasks/jasmine_node/jasmine_node_parser'
|
50
|
+
require 'tasks/jasmine_node_coverage/jasmine_node_coverage_runner'
|
51
|
+
require 'tasks/jasmine_node_coverage/js_coverage'
|
45
52
|
require 'tasks/rspec/rspec_runner'
|
46
53
|
require 'tasks/rspec/rspec_parser'
|
54
|
+
require 'tasks/closure_compiler/closure_compiler_config'
|
55
|
+
require 'tasks/closure_compiler/closure_compiler_runner'
|
56
|
+
require 'tasks/closure_compiler/closure_compiler_parser'
|
47
57
|
|
48
58
|
|
49
59
|
include Config
|
@@ -107,10 +117,13 @@ module Loris
|
|
107
117
|
tm.add(ListTask.new) if debug
|
108
118
|
tm.add(coffeescript_task(dir))
|
109
119
|
tm.add(javascript_lint_task(dir))
|
120
|
+
tm.add(google_lint_task(dir))
|
110
121
|
tm.add(jasmine_node_task(dir))
|
122
|
+
tm.add(jasmine_node_coverage_task(dir))
|
111
123
|
tm.add(CommandLineTask.new(JSpecRunner.new(dir, ExtensionFilter.new(File, 'js')), JSpecParser.new)) unless is_windows
|
112
124
|
tm.add(jsTestDriverTask(dir))
|
113
125
|
tm.add(CommandLineTask.new(RSpecRunner.new(dir, ExtensionFilter.new(File, 'rb'), EndsWithFilter.new('_spec.rb')), RSpecParser.new))
|
126
|
+
tm.add(closure_compiler_task(dir))
|
114
127
|
|
115
128
|
a = FileActioner.new(ff, tm)
|
116
129
|
|
@@ -144,7 +157,28 @@ module Loris
|
|
144
157
|
node,
|
145
158
|
spec_dir,
|
146
159
|
dir,
|
147
|
-
ExtensionFilter.new(File, 'js')
|
160
|
+
ExtensionFilter.new(File, 'js'),
|
161
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
162
|
+
),
|
163
|
+
JasmineNodeParser.new(dir)
|
164
|
+
)
|
165
|
+
end
|
166
|
+
|
167
|
+
def jasmine_node_coverage_task(dir)
|
168
|
+
node = '/usr/local/bin/node'
|
169
|
+
spec_dir = File.join(LIBDIR, 'jasmine-node')
|
170
|
+
|
171
|
+
return CommandLineTask.new(
|
172
|
+
JasmineNodeCoverageRunner.new(
|
173
|
+
JasmineNodeRunner.new(
|
174
|
+
node,
|
175
|
+
spec_dir,
|
176
|
+
dir,
|
177
|
+
ExtensionFilter.new(File, 'js'),
|
178
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
179
|
+
),
|
180
|
+
JsCoverage.new("node-jscoverage"),
|
181
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
148
182
|
),
|
149
183
|
JasmineNodeParser.new(dir)
|
150
184
|
)
|
@@ -165,6 +199,45 @@ module Loris
|
|
165
199
|
)
|
166
200
|
end
|
167
201
|
|
202
|
+
def google_lint_task(dir)
|
203
|
+
binary = File.join(LIBDIR, 'google-lint' , 'gjslint')
|
204
|
+
fix_style_binary = File.join(LIBDIR, 'google-lint' , 'fixjsstyle')
|
205
|
+
|
206
|
+
return CommandLineTask.new(
|
207
|
+
GoogleLintRunner.new(
|
208
|
+
binary,
|
209
|
+
fix_style_binary,
|
210
|
+
dir,
|
211
|
+
ExtensionFilter.new(File, 'js'),
|
212
|
+
GoogleLintConfig.new(
|
213
|
+
dir,
|
214
|
+
YAML,
|
215
|
+
URI
|
216
|
+
)
|
217
|
+
),
|
218
|
+
GoogleLintParser.new(dir)
|
219
|
+
)
|
220
|
+
end
|
221
|
+
|
222
|
+
def closure_compiler_task(dir)
|
223
|
+
jar = File.join(LIBDIR, 'closure-compiler' , 'compiler.jar')
|
224
|
+
|
225
|
+
return CommandLineTask.new(
|
226
|
+
ClosureCompilerRunner.new(
|
227
|
+
jar,
|
228
|
+
dir,
|
229
|
+
ExtensionFilter.new(File, 'js'),
|
230
|
+
ClosureCompilerConfig.new(
|
231
|
+
dir,
|
232
|
+
YAML,
|
233
|
+
URI
|
234
|
+
)
|
235
|
+
),
|
236
|
+
ClosureCompilerParser.new(dir)
|
237
|
+
)
|
238
|
+
end
|
239
|
+
|
240
|
+
|
168
241
|
# Will need to be refactored into a factory
|
169
242
|
def jsTestDriverTask(dir)
|
170
243
|
require 'tasks/js_test_driver/js_test_driver_runner'
|
data/lib/poller.rb
CHANGED
data/lib/task_manager.rb
CHANGED
@@ -48,6 +48,7 @@ class TaskManager
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
+
@num_tasks_run
|
51
52
|
end
|
52
53
|
|
53
54
|
def run_task(files, task)
|
@@ -73,7 +74,7 @@ class TaskManager
|
|
73
74
|
:title => 'Task',
|
74
75
|
:summary => 'Exception',
|
75
76
|
:first => ex.message,
|
76
|
-
:detail => ex.backtrace
|
77
|
+
:detail => ex.message + "\n" + ex.backtrace.join("\n")
|
77
78
|
}
|
78
79
|
end
|
79
80
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ClosureCompilerConfig
|
2
|
+
|
3
|
+
def initialize(dir, yaml, uri)
|
4
|
+
@config_file = dir + '/closure-compiler.yml'
|
5
|
+
@yaml = yaml
|
6
|
+
@uri = uri
|
7
|
+
end
|
8
|
+
|
9
|
+
def reload
|
10
|
+
@conf = @yaml.load_file(@config_file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def conf
|
14
|
+
return @conf
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class ClosureCompilerParser
|
2
|
+
|
3
|
+
def initialize(dir)
|
4
|
+
@dir = dir
|
5
|
+
|
6
|
+
# TODO: Tidy!
|
7
|
+
if (RUBY_PLATFORM =~ /mswin32/)
|
8
|
+
@dir = @dir.gsub('/', '\\')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_result(detail)
|
13
|
+
summary_line = detail.grep( /\d+\s+error.*,\s+\d+\s+warning.*/ )[0]
|
14
|
+
|
15
|
+
if summary_line.nil?
|
16
|
+
# error
|
17
|
+
error_info = (detail + "\nUnknown Error!").to_a[0].strip
|
18
|
+
return :error, 'Error', error_info
|
19
|
+
end
|
20
|
+
|
21
|
+
if summary_line =~ /([1-9]+)\d*\s+error/
|
22
|
+
num_failures = $1
|
23
|
+
error_info = detail.grep(/ ERROR - /)[0].strip
|
24
|
+
return :failure, num_failures + ' Errors', strip_dir(error_info)
|
25
|
+
end
|
26
|
+
|
27
|
+
if summary_line =~ /([1-9]+)\d*\s+warning/
|
28
|
+
num_failures = $1
|
29
|
+
error_info = detail.grep(/ WARNING - /)[0].strip
|
30
|
+
return :warning, num_failures + ' Warnings', strip_dir(error_info)
|
31
|
+
end
|
32
|
+
|
33
|
+
return :success, 'All files compiled successfully', ''
|
34
|
+
end
|
35
|
+
|
36
|
+
def strip_dir(text)
|
37
|
+
|
38
|
+
# Move to function/class w/ win32 related code
|
39
|
+
if (text[0, @dir.length] == @dir)
|
40
|
+
text = text[(@dir.length + 1)..-1]
|
41
|
+
end
|
42
|
+
|
43
|
+
text
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class ClosureCompilerRunner
|
2
|
+
|
3
|
+
def initialize(jar, dir, filter, config)
|
4
|
+
@jar = jar
|
5
|
+
@config_file = dir + '/closure-compiler.yml'
|
6
|
+
@dir = dir
|
7
|
+
@filter = filter
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
return 'Closure Compiler'
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
@config.reload
|
17
|
+
conf = @config.conf
|
18
|
+
|
19
|
+
input_params = ''
|
20
|
+
|
21
|
+
conf.each do |param, value|
|
22
|
+
|
23
|
+
if value.kind_of? Array
|
24
|
+
|
25
|
+
value.each do |inner_value|
|
26
|
+
input_params += " --#{param} \"#{inner_value}\""
|
27
|
+
end
|
28
|
+
|
29
|
+
elsif value.kind_of? Integer
|
30
|
+
input_params += " --#{param} #{value}"
|
31
|
+
else
|
32
|
+
input_params += " --#{param} \"#{value}\""
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
return `java -Xmx1024m -jar "#{@jar}" #{input_params} 2>&1`
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_configured?(all_files)
|
40
|
+
return all_files.include?(@config_file)
|
41
|
+
end
|
42
|
+
|
43
|
+
def should_run?(modified_files)
|
44
|
+
return !(modified_files.detect { |file| @filter.filter(file) && file != @output }).nil? || modified_files.include?(@config_file)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class GoogleLintParser
|
2
|
+
|
3
|
+
def initialize(dir)
|
4
|
+
@dir = dir
|
5
|
+
|
6
|
+
# TODO: Tidy!
|
7
|
+
if (RUBY_PLATFORM =~ /mswin32/)
|
8
|
+
@dir = @dir.gsub('/', '\\')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_result(detail)
|
13
|
+
summary_line = detail.grep( /Found \d+\s+error*/ )[0]
|
14
|
+
|
15
|
+
if not detail.grep( /no errors found./ )[0].nil?
|
16
|
+
return :success, 'All files are clean', ''
|
17
|
+
end
|
18
|
+
|
19
|
+
if summary_line =~ /([1-9]+)\d*\s+error/
|
20
|
+
num_failures = $1
|
21
|
+
error_info = detail.grep(/FILE/)[0].strip
|
22
|
+
file_name = /:(.+) -----/.match error_info.strip
|
23
|
+
return :failure, num_failures + ' Errors', strip_dir(file_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
# error
|
27
|
+
error_info = (detail + "\nUnknown Error!").to_a[0].strip
|
28
|
+
return :error, 'Error', error_info
|
29
|
+
end
|
30
|
+
|
31
|
+
def strip_dir(text)
|
32
|
+
|
33
|
+
# Move to function/class w/ win32 related code
|
34
|
+
if (text[0, @dir.length] == @dir)
|
35
|
+
text = text[(@dir.length + 1)..-1]
|
36
|
+
end
|
37
|
+
|
38
|
+
text
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class GoogleLintRunner
|
2
|
+
|
3
|
+
def initialize(binary, fix_style_binary, dir, filter, config)
|
4
|
+
@binary = binary
|
5
|
+
@fix_style_binary = fix_style_binary
|
6
|
+
@config_file = dir + '/gjslint.yml'
|
7
|
+
@dir = dir
|
8
|
+
@filter = filter
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
return 'Google Lint'
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute
|
17
|
+
@config.reload
|
18
|
+
conf = @config.conf
|
19
|
+
|
20
|
+
input_params = ''
|
21
|
+
run_fix_style = false
|
22
|
+
|
23
|
+
conf.each do |param, value|
|
24
|
+
|
25
|
+
if param == 'strict'
|
26
|
+
input_params += " --#{param}"
|
27
|
+
next
|
28
|
+
end
|
29
|
+
|
30
|
+
if param == 'run-fix-style'
|
31
|
+
run_fix_style = true
|
32
|
+
next
|
33
|
+
end
|
34
|
+
|
35
|
+
if value.kind_of? Array
|
36
|
+
|
37
|
+
value.each do |inner_value|
|
38
|
+
input_params += " --#{param} \"#{inner_value}\""
|
39
|
+
end
|
40
|
+
|
41
|
+
elsif value.kind_of? Integer
|
42
|
+
input_params += " --#{param} #{value}"
|
43
|
+
else
|
44
|
+
input_params += " --#{param} \"#{value}\""
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
result = ''
|
49
|
+
result += `#{@fix_style_binary} #{input_params} . 2>&1` if run_fix_style
|
50
|
+
|
51
|
+
return result + `#{@binary} #{input_params} . 2>&1`
|
52
|
+
end
|
53
|
+
|
54
|
+
def is_configured?(all_files)
|
55
|
+
return all_files.include?(@config_file)
|
56
|
+
end
|
57
|
+
|
58
|
+
def should_run?(modified_files)
|
59
|
+
return !(modified_files.detect { |file| @filter.filter(file) }).nil? || modified_files.include?(@config_file)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class JasmineNodeConfig
|
2
|
+
|
3
|
+
def initialize(dir, json, file)
|
4
|
+
@config_path = dir + '/jasmine.conf'
|
5
|
+
@json = json
|
6
|
+
@file = file
|
7
|
+
end
|
8
|
+
|
9
|
+
def config_path
|
10
|
+
return @config_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def reload
|
14
|
+
contents = File.open(@config_path, 'r') { |f| f.read }
|
15
|
+
@config = @json.parse contents
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_dir
|
19
|
+
return @config["sourceDirectory"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def spec_dir
|
23
|
+
return @config["specDirectory"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def requires
|
27
|
+
return @config["requires"]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class JasmineNodeRunner
|
2
2
|
|
3
|
-
def initialize(node, spec_dir, dir, filter)
|
3
|
+
def initialize(node, spec_dir, dir, filter, config)
|
4
4
|
@node = node
|
5
5
|
@spec_dir = spec_dir
|
6
6
|
@dir = dir
|
7
7
|
@filter = filter
|
8
|
+
@config = config
|
9
|
+
@source_args = "";
|
8
10
|
end
|
9
11
|
|
10
12
|
def name
|
@@ -12,17 +14,19 @@ class JasmineNodeRunner
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def execute
|
15
|
-
return `"#{@node}" "#{@spec_dir}/specs.js" --noColor "#{@
|
17
|
+
return `"#{@node}" "#{@spec_dir}/specs.js" --noColor #{@source_args} "#{@config.config_path}" 2>&1`
|
16
18
|
end
|
17
19
|
|
18
|
-
# TODO: Only return true if we can find the node binary
|
19
20
|
def is_configured?(all_files)
|
20
|
-
|
21
|
-
return !(all_files.detect { |file| spec_filter.filter(file) }).nil?
|
21
|
+
return all_files.include?(@config.config_path)
|
22
22
|
end
|
23
23
|
|
24
24
|
def should_run?(modified_files)
|
25
|
-
return !(modified_files.detect { |file| @filter.filter(file) }).nil?
|
25
|
+
return !(modified_files.detect { |file| @filter.filter(file) }).nil? || modified_files.include?(@config.config_path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def source_dir(source_dir)
|
29
|
+
@source_args = source_dir.nil? ? "" : "--source-directory \"#{source_dir}\""
|
26
30
|
end
|
27
31
|
|
28
32
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'FileUtils'
|
2
|
+
|
3
|
+
class JasmineNodeCoverageRunner
|
4
|
+
|
5
|
+
def initialize(jasmine_runner, coverage, config)
|
6
|
+
@jasmine_runner = jasmine_runner
|
7
|
+
@coverage = coverage
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
return 'Coverage'
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
@config.reload
|
17
|
+
|
18
|
+
source_dir = @config.source_dir
|
19
|
+
coverage_dir = source_dir + "-cov"
|
20
|
+
|
21
|
+
FileUtils.rm_rf coverage_dir
|
22
|
+
|
23
|
+
output = @coverage.run source_dir, coverage_dir
|
24
|
+
@jasmine_runner.source_dir coverage_dir
|
25
|
+
return output + "\n\n" + @jasmine_runner.execute
|
26
|
+
end
|
27
|
+
|
28
|
+
def is_configured?(all_files)
|
29
|
+
return @jasmine_runner.is_configured? all_files
|
30
|
+
end
|
31
|
+
|
32
|
+
def should_run?(modified_files)
|
33
|
+
return @jasmine_runner.should_run? modified_files
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/loris.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{loris}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Karl O'Keeffe"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-01}
|
13
13
|
s.default_executable = %q{loris}
|
14
14
|
s.description = %q{Automatically run javascript unit tests}
|
15
15
|
s.email = %q{loris@monket.net}
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
"features/support/env.rb",
|
35
35
|
"lib/always_continuer.rb",
|
36
36
|
"lib/browser_finder.rb",
|
37
|
+
"lib/closure-compiler/compiler.jar",
|
37
38
|
"lib/directory_finder.rb",
|
38
39
|
"lib/file_actioner.rb",
|
39
40
|
"lib/file_finder.rb",
|
@@ -42,6 +43,8 @@ Gem::Specification.new do |s|
|
|
42
43
|
"lib/filters/file_filter.rb",
|
43
44
|
"lib/filters/modified_filter.rb",
|
44
45
|
"lib/filters/starts_with_filter.rb",
|
46
|
+
"lib/google-lint/fixjsstyle",
|
47
|
+
"lib/google-lint/gjslint",
|
45
48
|
"lib/icons/error.png",
|
46
49
|
"lib/icons/failure.png",
|
47
50
|
"lib/icons/info.png",
|
@@ -65,11 +68,20 @@ Gem::Specification.new do |s|
|
|
65
68
|
"lib/poller.rb",
|
66
69
|
"lib/sleep_waiter.rb",
|
67
70
|
"lib/task_manager.rb",
|
71
|
+
"lib/tasks/closure_compiler/closure_compiler_config.rb",
|
72
|
+
"lib/tasks/closure_compiler/closure_compiler_parser.rb",
|
73
|
+
"lib/tasks/closure_compiler/closure_compiler_runner.rb",
|
68
74
|
"lib/tasks/coffeescript/coffeescript_parser.rb",
|
69
75
|
"lib/tasks/coffeescript/coffeescript_runner.rb",
|
70
76
|
"lib/tasks/command_line_task.rb",
|
77
|
+
"lib/tasks/google_lint/google_lint_config.rb",
|
78
|
+
"lib/tasks/google_lint/google_lint_parser.rb",
|
79
|
+
"lib/tasks/google_lint/google_lint_runner.rb",
|
80
|
+
"lib/tasks/jasmine_node/jasmine_node_config.rb",
|
71
81
|
"lib/tasks/jasmine_node/jasmine_node_parser.rb",
|
72
82
|
"lib/tasks/jasmine_node/jasmine_node_runner.rb",
|
83
|
+
"lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb",
|
84
|
+
"lib/tasks/jasmine_node_coverage/js_coverage.rb",
|
73
85
|
"lib/tasks/javascript_lint/javascript_lint_parser.rb",
|
74
86
|
"lib/tasks/javascript_lint/javascript_lint_runner.rb",
|
75
87
|
"lib/tasks/js_test_driver/js_test_driver_config.rb",
|
@@ -103,7 +115,7 @@ Gem::Specification.new do |s|
|
|
103
115
|
s.homepage = %q{http://github.com/karl/loris}
|
104
116
|
s.rdoc_options = ["--charset=UTF-8"]
|
105
117
|
s.require_paths = ["lib"]
|
106
|
-
s.rubygems_version = %q{1.3.
|
118
|
+
s.rubygems_version = %q{1.3.7}
|
107
119
|
s.summary = %q{Automatically run javascript unit tests}
|
108
120
|
s.test_files = [
|
109
121
|
"spec/file_actioner_spec.rb",
|
@@ -126,16 +138,19 @@ Gem::Specification.new do |s|
|
|
126
138
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
127
139
|
s.specification_version = 3
|
128
140
|
|
129
|
-
if Gem::Version.new(Gem::
|
141
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
142
|
+
s.add_runtime_dependency(%q<json>, [">= 1.4.3"])
|
130
143
|
s.add_runtime_dependency(%q<bind>, [">= 0.2.6"])
|
131
144
|
s.add_runtime_dependency(%q<karl-growl>, [">= 1.0.6"])
|
132
145
|
s.add_runtime_dependency(%q<extensions>, [">= 0.6.0"])
|
133
146
|
else
|
147
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
134
148
|
s.add_dependency(%q<bind>, [">= 0.2.6"])
|
135
149
|
s.add_dependency(%q<karl-growl>, [">= 1.0.6"])
|
136
150
|
s.add_dependency(%q<extensions>, [">= 0.6.0"])
|
137
151
|
end
|
138
152
|
else
|
153
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
139
154
|
s.add_dependency(%q<bind>, [">= 0.2.6"])
|
140
155
|
s.add_dependency(%q<karl-growl>, [">= 1.0.6"])
|
141
156
|
s.add_dependency(%q<extensions>, [">= 0.6.0"])
|
data/loris.tmproj
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<plist version="1.0">
|
4
4
|
<dict>
|
5
5
|
<key>currentDocument</key>
|
6
|
-
<string>lib/
|
6
|
+
<string>lib/filters/modified_filter.rb</string>
|
7
7
|
<key>documents</key>
|
8
8
|
<array>
|
9
9
|
<dict>
|
@@ -49,6 +49,20 @@
|
|
49
49
|
<key>firstVisibleLine</key>
|
50
50
|
<integer>0</integer>
|
51
51
|
</dict>
|
52
|
+
<key>lib/file_actioner.rb</key>
|
53
|
+
<dict>
|
54
|
+
<key>caret</key>
|
55
|
+
<dict>
|
56
|
+
<key>column</key>
|
57
|
+
<integer>0</integer>
|
58
|
+
<key>line</key>
|
59
|
+
<integer>27</integer>
|
60
|
+
</dict>
|
61
|
+
<key>firstVisibleColumn</key>
|
62
|
+
<integer>0</integer>
|
63
|
+
<key>firstVisibleLine</key>
|
64
|
+
<integer>0</integer>
|
65
|
+
</dict>
|
52
66
|
<key>lib/file_finder.rb</key>
|
53
67
|
<dict>
|
54
68
|
<key>caret</key>
|
@@ -93,6 +107,34 @@
|
|
93
107
|
<integer>16</integer>
|
94
108
|
</dict>
|
95
109
|
</dict>
|
110
|
+
<key>lib/filters/file_filter.rb</key>
|
111
|
+
<dict>
|
112
|
+
<key>caret</key>
|
113
|
+
<dict>
|
114
|
+
<key>column</key>
|
115
|
+
<integer>0</integer>
|
116
|
+
<key>line</key>
|
117
|
+
<integer>0</integer>
|
118
|
+
</dict>
|
119
|
+
<key>firstVisibleColumn</key>
|
120
|
+
<integer>0</integer>
|
121
|
+
<key>firstVisibleLine</key>
|
122
|
+
<integer>0</integer>
|
123
|
+
</dict>
|
124
|
+
<key>lib/filters/modified_filter.rb</key>
|
125
|
+
<dict>
|
126
|
+
<key>caret</key>
|
127
|
+
<dict>
|
128
|
+
<key>column</key>
|
129
|
+
<integer>20</integer>
|
130
|
+
<key>line</key>
|
131
|
+
<integer>17</integer>
|
132
|
+
</dict>
|
133
|
+
<key>firstVisibleColumn</key>
|
134
|
+
<integer>0</integer>
|
135
|
+
<key>firstVisibleLine</key>
|
136
|
+
<integer>0</integer>
|
137
|
+
</dict>
|
96
138
|
<key>lib/jasmine-node/specs.js</key>
|
97
139
|
<dict>
|
98
140
|
<key>caret</key>
|
@@ -112,14 +154,14 @@
|
|
112
154
|
<key>caret</key>
|
113
155
|
<dict>
|
114
156
|
<key>column</key>
|
115
|
-
<integer>
|
157
|
+
<integer>28</integer>
|
116
158
|
<key>line</key>
|
117
|
-
<integer>
|
159
|
+
<integer>97</integer>
|
118
160
|
</dict>
|
119
161
|
<key>firstVisibleColumn</key>
|
120
162
|
<integer>0</integer>
|
121
163
|
<key>firstVisibleLine</key>
|
122
|
-
<integer>
|
164
|
+
<integer>82</integer>
|
123
165
|
</dict>
|
124
166
|
<key>lib/outputs/growl_output.rb</key>
|
125
167
|
<dict>
|
@@ -149,6 +191,106 @@
|
|
149
191
|
<key>firstVisibleLine</key>
|
150
192
|
<integer>0</integer>
|
151
193
|
</dict>
|
194
|
+
<key>lib/poller.rb</key>
|
195
|
+
<dict>
|
196
|
+
<key>caret</key>
|
197
|
+
<dict>
|
198
|
+
<key>column</key>
|
199
|
+
<integer>0</integer>
|
200
|
+
<key>line</key>
|
201
|
+
<integer>13</integer>
|
202
|
+
</dict>
|
203
|
+
<key>firstVisibleColumn</key>
|
204
|
+
<integer>0</integer>
|
205
|
+
<key>firstVisibleLine</key>
|
206
|
+
<integer>0</integer>
|
207
|
+
</dict>
|
208
|
+
<key>lib/sleep_waiter.rb</key>
|
209
|
+
<dict>
|
210
|
+
<key>caret</key>
|
211
|
+
<dict>
|
212
|
+
<key>column</key>
|
213
|
+
<integer>30</integer>
|
214
|
+
<key>line</key>
|
215
|
+
<integer>2</integer>
|
216
|
+
</dict>
|
217
|
+
<key>columnSelection</key>
|
218
|
+
<false/>
|
219
|
+
<key>firstVisibleColumn</key>
|
220
|
+
<integer>0</integer>
|
221
|
+
<key>firstVisibleLine</key>
|
222
|
+
<integer>0</integer>
|
223
|
+
<key>selectFrom</key>
|
224
|
+
<dict>
|
225
|
+
<key>column</key>
|
226
|
+
<integer>31</integer>
|
227
|
+
<key>line</key>
|
228
|
+
<integer>2</integer>
|
229
|
+
</dict>
|
230
|
+
<key>selectTo</key>
|
231
|
+
<dict>
|
232
|
+
<key>column</key>
|
233
|
+
<integer>30</integer>
|
234
|
+
<key>line</key>
|
235
|
+
<integer>2</integer>
|
236
|
+
</dict>
|
237
|
+
</dict>
|
238
|
+
<key>lib/task_manager.rb</key>
|
239
|
+
<dict>
|
240
|
+
<key>caret</key>
|
241
|
+
<dict>
|
242
|
+
<key>column</key>
|
243
|
+
<integer>18</integer>
|
244
|
+
<key>line</key>
|
245
|
+
<integer>50</integer>
|
246
|
+
</dict>
|
247
|
+
<key>firstVisibleColumn</key>
|
248
|
+
<integer>0</integer>
|
249
|
+
<key>firstVisibleLine</key>
|
250
|
+
<integer>3</integer>
|
251
|
+
</dict>
|
252
|
+
<key>lib/tasks/closure_compiler/closure_compiler_config.rb</key>
|
253
|
+
<dict>
|
254
|
+
<key>caret</key>
|
255
|
+
<dict>
|
256
|
+
<key>column</key>
|
257
|
+
<integer>13</integer>
|
258
|
+
<key>line</key>
|
259
|
+
<integer>0</integer>
|
260
|
+
</dict>
|
261
|
+
<key>firstVisibleColumn</key>
|
262
|
+
<integer>0</integer>
|
263
|
+
<key>firstVisibleLine</key>
|
264
|
+
<integer>0</integer>
|
265
|
+
</dict>
|
266
|
+
<key>lib/tasks/closure_compiler/closure_compiler_parser.rb</key>
|
267
|
+
<dict>
|
268
|
+
<key>caret</key>
|
269
|
+
<dict>
|
270
|
+
<key>column</key>
|
271
|
+
<integer>0</integer>
|
272
|
+
<key>line</key>
|
273
|
+
<integer>29</integer>
|
274
|
+
</dict>
|
275
|
+
<key>firstVisibleColumn</key>
|
276
|
+
<integer>0</integer>
|
277
|
+
<key>firstVisibleLine</key>
|
278
|
+
<integer>0</integer>
|
279
|
+
</dict>
|
280
|
+
<key>lib/tasks/closure_compiler/closure_compiler_runner.rb</key>
|
281
|
+
<dict>
|
282
|
+
<key>caret</key>
|
283
|
+
<dict>
|
284
|
+
<key>column</key>
|
285
|
+
<integer>0</integer>
|
286
|
+
<key>line</key>
|
287
|
+
<integer>44</integer>
|
288
|
+
</dict>
|
289
|
+
<key>firstVisibleColumn</key>
|
290
|
+
<integer>0</integer>
|
291
|
+
<key>firstVisibleLine</key>
|
292
|
+
<integer>0</integer>
|
293
|
+
</dict>
|
152
294
|
<key>lib/tasks/coffeescript/coffeescript_runner.rb</key>
|
153
295
|
<dict>
|
154
296
|
<key>caret</key>
|
@@ -163,6 +305,34 @@
|
|
163
305
|
<key>firstVisibleLine</key>
|
164
306
|
<integer>0</integer>
|
165
307
|
</dict>
|
308
|
+
<key>lib/tasks/google_lint/google_lint_parser.rb</key>
|
309
|
+
<dict>
|
310
|
+
<key>caret</key>
|
311
|
+
<dict>
|
312
|
+
<key>column</key>
|
313
|
+
<integer>12</integer>
|
314
|
+
<key>line</key>
|
315
|
+
<integer>0</integer>
|
316
|
+
</dict>
|
317
|
+
<key>firstVisibleColumn</key>
|
318
|
+
<integer>0</integer>
|
319
|
+
<key>firstVisibleLine</key>
|
320
|
+
<integer>0</integer>
|
321
|
+
</dict>
|
322
|
+
<key>lib/tasks/google_lint/google_lint_runner.rb</key>
|
323
|
+
<dict>
|
324
|
+
<key>caret</key>
|
325
|
+
<dict>
|
326
|
+
<key>column</key>
|
327
|
+
<integer>31</integer>
|
328
|
+
<key>line</key>
|
329
|
+
<integer>14</integer>
|
330
|
+
</dict>
|
331
|
+
<key>firstVisibleColumn</key>
|
332
|
+
<integer>0</integer>
|
333
|
+
<key>firstVisibleLine</key>
|
334
|
+
<integer>0</integer>
|
335
|
+
</dict>
|
166
336
|
<key>lib/tasks/jasmine_node/jasmine_node_runner.rb</key>
|
167
337
|
<dict>
|
168
338
|
<key>caret</key>
|
@@ -177,6 +347,20 @@
|
|
177
347
|
<key>firstVisibleLine</key>
|
178
348
|
<integer>0</integer>
|
179
349
|
</dict>
|
350
|
+
<key>lib/tasks/js_test_driver/js_test_driver_config.rb</key>
|
351
|
+
<dict>
|
352
|
+
<key>caret</key>
|
353
|
+
<dict>
|
354
|
+
<key>column</key>
|
355
|
+
<integer>2</integer>
|
356
|
+
<key>line</key>
|
357
|
+
<integer>12</integer>
|
358
|
+
</dict>
|
359
|
+
<key>firstVisibleColumn</key>
|
360
|
+
<integer>0</integer>
|
361
|
+
<key>firstVisibleLine</key>
|
362
|
+
<integer>0</integer>
|
363
|
+
</dict>
|
180
364
|
<key>lib/tasks/list_task.rb</key>
|
181
365
|
<dict>
|
182
366
|
<key>caret</key>
|
@@ -210,9 +394,21 @@
|
|
210
394
|
<array>
|
211
395
|
<string>TODO</string>
|
212
396
|
<string>lib/loris.rb</string>
|
397
|
+
<string>lib/filters/file_filter.rb</string>
|
398
|
+
<string>lib/tasks/closure_compiler/closure_compiler_parser.rb</string>
|
399
|
+
<string>lib/tasks/closure_compiler/closure_compiler_runner.rb</string>
|
400
|
+
<string>lib/task_manager.rb</string>
|
401
|
+
<string>lib/file_actioner.rb</string>
|
402
|
+
<string>lib/poller.rb</string>
|
403
|
+
<string>lib/sleep_waiter.rb</string>
|
404
|
+
<string>lib/tasks/js_test_driver/js_test_driver_config.rb</string>
|
405
|
+
<string>lib/tasks/closure_compiler/closure_compiler_config.rb</string>
|
406
|
+
<string>lib/tasks/google_lint/google_lint_parser.rb</string>
|
407
|
+
<string>lib/tasks/google_lint/google_lint_runner.rb</string>
|
213
408
|
<string>lib/filters/ends_with_filter.rb</string>
|
214
409
|
<string>lib/directory_finder.rb</string>
|
215
410
|
<string>lib/file_finder.rb</string>
|
411
|
+
<string>lib/filters/modified_filter.rb</string>
|
216
412
|
<string>lib/tasks/coffeescript/coffeescript_runner.rb</string>
|
217
413
|
<string>lib/tasks/jasmine_node/jasmine_node_runner.rb</string>
|
218
414
|
<string>lib/jasmine-node/specs.js</string>
|
@@ -220,6 +416,6 @@
|
|
220
416
|
<key>showFileHierarchyDrawer</key>
|
221
417
|
<false/>
|
222
418
|
<key>windowFrame</key>
|
223
|
-
<string>{{0, 0}, {
|
419
|
+
<string>{{0, 0}, {1920, 1178}}</string>
|
224
420
|
</dict>
|
225
421
|
</plist>
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loris
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Karl O'Keeffe
|
@@ -9,39 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-10-01 00:00:00 +01:00
|
13
19
|
default_executable: loris
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
22
|
+
name: json
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 1
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 4
|
33
|
+
- 3
|
34
|
+
version: 1.4.3
|
17
35
|
type: :runtime
|
18
|
-
|
19
|
-
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: bind
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
20
42
|
requirements:
|
21
43
|
- - ">="
|
22
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 27
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 2
|
49
|
+
- 6
|
23
50
|
version: 0.2.6
|
24
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
25
53
|
- !ruby/object:Gem::Dependency
|
26
54
|
name: karl-growl
|
27
|
-
|
28
|
-
|
29
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
30
58
|
requirements:
|
31
59
|
- - ">="
|
32
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 27
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 0
|
65
|
+
- 6
|
33
66
|
version: 1.0.6
|
34
|
-
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
35
69
|
- !ruby/object:Gem::Dependency
|
36
70
|
name: extensions
|
37
|
-
|
38
|
-
|
39
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
40
74
|
requirements:
|
41
75
|
- - ">="
|
42
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 7
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 6
|
81
|
+
- 0
|
43
82
|
version: 0.6.0
|
44
|
-
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id004
|
45
85
|
description: Automatically run javascript unit tests
|
46
86
|
email: loris@monket.net
|
47
87
|
executables:
|
@@ -67,6 +107,7 @@ files:
|
|
67
107
|
- features/support/env.rb
|
68
108
|
- lib/always_continuer.rb
|
69
109
|
- lib/browser_finder.rb
|
110
|
+
- lib/closure-compiler/compiler.jar
|
70
111
|
- lib/directory_finder.rb
|
71
112
|
- lib/file_actioner.rb
|
72
113
|
- lib/file_finder.rb
|
@@ -75,6 +116,8 @@ files:
|
|
75
116
|
- lib/filters/file_filter.rb
|
76
117
|
- lib/filters/modified_filter.rb
|
77
118
|
- lib/filters/starts_with_filter.rb
|
119
|
+
- lib/google-lint/fixjsstyle
|
120
|
+
- lib/google-lint/gjslint
|
78
121
|
- lib/icons/error.png
|
79
122
|
- lib/icons/failure.png
|
80
123
|
- lib/icons/info.png
|
@@ -98,11 +141,20 @@ files:
|
|
98
141
|
- lib/poller.rb
|
99
142
|
- lib/sleep_waiter.rb
|
100
143
|
- lib/task_manager.rb
|
144
|
+
- lib/tasks/closure_compiler/closure_compiler_config.rb
|
145
|
+
- lib/tasks/closure_compiler/closure_compiler_parser.rb
|
146
|
+
- lib/tasks/closure_compiler/closure_compiler_runner.rb
|
101
147
|
- lib/tasks/coffeescript/coffeescript_parser.rb
|
102
148
|
- lib/tasks/coffeescript/coffeescript_runner.rb
|
103
149
|
- lib/tasks/command_line_task.rb
|
150
|
+
- lib/tasks/google_lint/google_lint_config.rb
|
151
|
+
- lib/tasks/google_lint/google_lint_parser.rb
|
152
|
+
- lib/tasks/google_lint/google_lint_runner.rb
|
153
|
+
- lib/tasks/jasmine_node/jasmine_node_config.rb
|
104
154
|
- lib/tasks/jasmine_node/jasmine_node_parser.rb
|
105
155
|
- lib/tasks/jasmine_node/jasmine_node_runner.rb
|
156
|
+
- lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb
|
157
|
+
- lib/tasks/jasmine_node_coverage/js_coverage.rb
|
106
158
|
- lib/tasks/javascript_lint/javascript_lint_parser.rb
|
107
159
|
- lib/tasks/javascript_lint/javascript_lint_runner.rb
|
108
160
|
- lib/tasks/js_test_driver/js_test_driver_config.rb
|
@@ -142,21 +194,27 @@ rdoc_options:
|
|
142
194
|
require_paths:
|
143
195
|
- lib
|
144
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
145
198
|
requirements:
|
146
199
|
- - ">="
|
147
200
|
- !ruby/object:Gem::Version
|
201
|
+
hash: 3
|
202
|
+
segments:
|
203
|
+
- 0
|
148
204
|
version: "0"
|
149
|
-
version:
|
150
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
+
none: false
|
151
207
|
requirements:
|
152
208
|
- - ">="
|
153
209
|
- !ruby/object:Gem::Version
|
210
|
+
hash: 3
|
211
|
+
segments:
|
212
|
+
- 0
|
154
213
|
version: "0"
|
155
|
-
version:
|
156
214
|
requirements: []
|
157
215
|
|
158
216
|
rubyforge_project:
|
159
|
-
rubygems_version: 1.3.
|
217
|
+
rubygems_version: 1.3.7
|
160
218
|
signing_key:
|
161
219
|
specification_version: 3
|
162
220
|
summary: Automatically run javascript unit tests
|