loris 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ require.paths.push(__dirname + "/lib");
2
+ require.paths.push("./");
3
+
4
+ var sys = require('sys');
5
+ var jasmine = require('jasmine');
6
+
7
+ for(var key in jasmine) {
8
+ global[key] = jasmine[key];
9
+ }
10
+
11
+ var isVerbose = false;
12
+ var showColors = true;
13
+ var dir = __dirname;
14
+ process.argv.forEach(function(arg){
15
+ switch(arg) {
16
+ case '--color': showColors = true; break;
17
+ case '--noColor': showColors = false; break;
18
+ case '--verbose': isVerbose = true; break;
19
+ default: dir = arg; break;
20
+ }
21
+ });
22
+
23
+
24
+ jasmine.executeSpecsInFolder(dir + '/spec', function(runner, log) {
25
+ // Cannot call process.exit, standard out and standard error do not get flushed
26
+ // process.exit(runner.results().failedCount);
27
+ }, isVerbose, showColors);
data/lib/loris.rb CHANGED
@@ -18,10 +18,13 @@ require 'file_actioner'
18
18
  require 'task_manager'
19
19
  require 'pinger'
20
20
 
21
+ require 'directory_finder'
22
+
21
23
  require 'filters/extension_filter'
22
24
  require 'filters/modified_filter'
23
25
  require 'filters/file_filter'
24
26
  require 'filters/ends_with_filter'
27
+ require 'filters/starts_with_filter'
25
28
 
26
29
  require 'outputs/output_collection'
27
30
  require 'outputs/shell_output'
@@ -33,8 +36,12 @@ require 'tasks/list_task'
33
36
  require 'tasks/command_line_task'
34
37
  require 'tasks/jspec/jspec_runner'
35
38
  require 'tasks/jspec/jspec_parser'
39
+ require 'tasks/coffeescript/coffeescript_runner'
40
+ require 'tasks/coffeescript/coffeescript_parser'
36
41
  require 'tasks/javascript_lint/javascript_lint_runner'
37
42
  require 'tasks/javascript_lint/javascript_lint_parser'
43
+ require 'tasks/jasmine_node/jasmine_node_runner'
44
+ require 'tasks/jasmine_node/jasmine_node_parser'
38
45
  require 'tasks/rspec/rspec_runner'
39
46
  require 'tasks/rspec/rspec_parser'
40
47
 
@@ -98,7 +105,9 @@ module Loris
98
105
 
99
106
  tm = TaskManager.new(oc)
100
107
  tm.add(ListTask.new) if debug
108
+ tm.add(coffeescript_task(dir))
101
109
  tm.add(javascript_lint_task(dir))
110
+ tm.add(jasmine_node_task(dir))
102
111
  tm.add(CommandLineTask.new(JSpecRunner.new(dir, ExtensionFilter.new(File, 'js')), JSpecParser.new)) unless is_windows
103
112
  tm.add(jsTestDriverTask(dir))
104
113
  tm.add(CommandLineTask.new(RSpecRunner.new(dir, ExtensionFilter.new(File, 'rb'), EndsWithFilter.new('_spec.rb')), RSpecParser.new))
@@ -114,10 +123,37 @@ module Loris
114
123
 
115
124
  end
116
125
 
126
+ def coffeescript_task(dir)
127
+ return CommandLineTask.new(
128
+ CoffeeScriptRunner.new(
129
+ 'coffee',
130
+ dir,
131
+ ExtensionFilter.new(File, 'coffee'),
132
+ DirectoryFinder.new(File, StartsWithFilter.new('coffee-'))
133
+ ),
134
+ CoffeeScriptParser.new(dir)
135
+ )
136
+ end
137
+
138
+ def jasmine_node_task(dir)
139
+ node = '/usr/local/bin/node'
140
+ spec_dir = File.join(LIBDIR, 'jasmine-node')
141
+
142
+ return CommandLineTask.new(
143
+ JasmineNodeRunner.new(
144
+ node,
145
+ spec_dir,
146
+ dir,
147
+ ExtensionFilter.new(File, 'js')
148
+ ),
149
+ JasmineNodeParser.new(dir)
150
+ )
151
+ end
152
+
117
153
  # Refactor into factory
118
154
  def javascript_lint_task(dir)
119
155
  is_windows = RUBY_PLATFORM =~ /mswin32/
120
- binary = File.join(LIBDIR, 'javascript-lint' , is_windows ? 'jsl.exe' : 'jsl');
156
+ binary = File.join(LIBDIR, 'javascript-lint' , is_windows ? 'jsl.exe' : 'jsl')
121
157
 
122
158
  return CommandLineTask.new(
123
159
  JavascriptLintRunner.new(
data/lib/task_manager.rb CHANGED
@@ -3,6 +3,7 @@ class TaskManager
3
3
  def initialize(output)
4
4
  @output = output
5
5
  @tasks = []
6
+ @fail_index = -1
6
7
  end
7
8
 
8
9
  def add(task)
@@ -12,25 +13,51 @@ class TaskManager
12
13
  def run(files)
13
14
  @num_tasks_run = 0
14
15
 
15
- @tasks.each do |task|
16
+ @tasks.each_index do |index|
17
+ task = @tasks[index]
18
+
19
+ # Don't run if this task is after the last failed task
20
+ if @fail_index >= 0 && @fail_index < index
21
+ @output.add_result(@fail_result)
22
+ break
23
+ end
16
24
 
25
+ result = nil
17
26
  begin
18
- break if !run_task(files, task)
27
+ result = run_task(files, task)
19
28
  rescue Exception => ex
20
- output_exception(ex)
29
+ result = build_exception_result ex
30
+ @output.add_result result
31
+ end
32
+
33
+ next if result.nil?
34
+
35
+ if [:error, :failure].include? result[:state]
36
+ # Remember this task as the one that failed
37
+ # And end this current run of tasks
38
+ @fail_index = index
39
+ @fail_result = result
40
+
41
+ @fail_result[:state] = :error
42
+ @fail_result[:title] = 'Fix ' + @fail_result[:title] + ' to run other tasks'
43
+ break
44
+ elsif result[:state] == :success
45
+ # reset fail index
46
+ @fail_index = -1 if index == @fail_index
21
47
  end
22
48
 
23
49
  end
50
+
24
51
  end
25
52
 
26
53
  def run_task(files, task)
27
54
  result = task.run(files)
28
- return true if result.nil?
55
+ return result if result.nil?
29
56
 
30
57
  task_run
31
-
58
+
32
59
  @output.add_result(result)
33
- return !([:error, :failure].include? result[:state])
60
+ return result
34
61
  end
35
62
 
36
63
  def task_run
@@ -40,14 +67,18 @@ class TaskManager
40
67
  end
41
68
  end
42
69
 
43
- def output_exception(ex)
44
- @output.add_result({
70
+ def build_exception_result(ex)
71
+ return {
45
72
  :state => :error,
46
73
  :title => 'Task',
47
74
  :summary => 'Exception',
48
75
  :first => ex.message,
49
76
  :detail => ex.backtrace
50
- })
77
+ }
78
+ end
79
+
80
+ def output_exception(ex)
81
+ @output.add_result build_exception_result ex
51
82
  end
52
83
 
53
84
  end
@@ -0,0 +1,37 @@
1
+ class CoffeeScriptParser
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
+ if (detail.strip == '')
14
+ return :success, 'All files compiled', ''
15
+ end
16
+
17
+ summary_line = detail.grep( /^In .*/ )[0]
18
+
19
+ if summary_line.nil?
20
+ # error
21
+ error_info = (detail + "\nUnknown Error!").to_a[0].strip
22
+ return :error, 'Error', error_info
23
+ end
24
+
25
+ return :failure, 'Failed to compile', strip_dir(summary_line[3..-1].strip)
26
+ end
27
+
28
+ def strip_dir(text)
29
+
30
+ # Move to function/class w/ win32 related code
31
+ if (text[0, @dir.length] == @dir)
32
+ text = text[(@dir.length + 1)..-1]
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,37 @@
1
+ class CoffeeScriptRunner
2
+
3
+ def initialize(binary, dir, filter, dir_finder)
4
+ @binary = binary
5
+ @dir = dir
6
+ @filter = filter
7
+ @coffeescript_dir_finder = dir_finder
8
+
9
+ @js_dir = dir + '/src'
10
+ end
11
+
12
+ def name
13
+ return 'CoffeeScript'
14
+ end
15
+
16
+ def execute
17
+ output = []
18
+
19
+ @coffee_dirs.each do |coffee_dir|
20
+ js_dir = coffee_dir.sub '/coffee-', '/'
21
+ output.push `#{@binary} --compile #{coffee_dir} --output #{js_dir} 2>&1`
22
+ end
23
+
24
+ return output.join "\n"
25
+ end
26
+
27
+ # TODO: Only return true if we can find the node binary
28
+ def is_configured?(all_files)
29
+ @coffee_dirs = (@coffeescript_dir_finder.find all_files).uniq
30
+ return @coffee_dirs.length > 0
31
+ end
32
+
33
+ def should_run?(modified_files)
34
+ return !(modified_files.detect { |file| @filter.filter(file) }).nil? || modified_files.include?(@config)
35
+ end
36
+
37
+ end
@@ -0,0 +1,25 @@
1
+ class JasmineNodeParser
2
+
3
+ def initialize(dir)
4
+ @dir = dir
5
+ end
6
+
7
+ def parse_result(detail)
8
+ summary_line = detail.grep( /\d+\s+tests?.*,\s+\d+\s+assertions?.*,\s+\d+\s+failures?.*/ )[0]
9
+
10
+ if summary_line.nil?
11
+ # error
12
+ error_info = detail.grep(/Error: /)[0] || ["Unknown Error!"]
13
+ return :error, 'Error', error_info.strip
14
+ end
15
+
16
+ if summary_line =~ /([1-9]+)\d*\s+failures?/
17
+ num_failures = $1
18
+ error_info = detail.grep(/Error: /)[0] || "Unknown Error!"
19
+ return :failure, num_failures + ' Errors', error_info.strip
20
+ end
21
+
22
+ return :success, 'All tests passed', ''
23
+ end
24
+
25
+ end
@@ -0,0 +1,27 @@
1
+ class JasmineNodeRunner
2
+
3
+ def initialize(node, spec_dir, dir, filter)
4
+ @node = node
5
+ @spec_dir = spec_dir
6
+ @dir = dir
7
+ @filter = filter
8
+ end
9
+
10
+ def name
11
+ return 'Jasmine'
12
+ end
13
+
14
+ def execute
15
+ return `#{@node} #{@spec_dir}/specs.js --noColor #{@dir} 2>&1`
16
+ end
17
+
18
+ # TODO: Only return true if we can find the node binary
19
+ def is_configured?(all_files)
20
+ return true
21
+ end
22
+
23
+ def should_run?(modified_files)
24
+ return !(modified_files.detect { |file| @filter.filter(file) }).nil?
25
+ end
26
+
27
+ end
@@ -8,7 +8,6 @@ end
8
8
  class WindowsProcess
9
9
 
10
10
  def create(command)
11
- puts command
12
11
  Process.create({
13
12
  :app_name => command
14
13
  })
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.1.4"
8
+ s.version = "0.1.5"
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-07-07}
12
+ s.date = %q{2010-07-11}
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,17 +34,23 @@ 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/directory_finder.rb",
37
38
  "lib/file_actioner.rb",
38
39
  "lib/file_finder.rb",
39
40
  "lib/filters/ends_with_filter.rb",
40
41
  "lib/filters/extension_filter.rb",
41
42
  "lib/filters/file_filter.rb",
42
43
  "lib/filters/modified_filter.rb",
44
+ "lib/filters/starts_with_filter.rb",
43
45
  "lib/icons/error.png",
44
46
  "lib/icons/failure.png",
45
47
  "lib/icons/info.png",
46
48
  "lib/icons/success.png",
47
49
  "lib/icons/warning.png",
50
+ "lib/jasmine-node/LICENSE",
51
+ "lib/jasmine-node/lib/jasmine/index.js",
52
+ "lib/jasmine-node/lib/jasmine/jasmine-0.10.2.js",
53
+ "lib/jasmine-node/specs.js",
48
54
  "lib/javascript-lint/jsl",
49
55
  "lib/javascript-lint/jsl.exe",
50
56
  "lib/js-test-driver/JsTestDriver-1.2.jar",
@@ -59,7 +65,11 @@ Gem::Specification.new do |s|
59
65
  "lib/poller.rb",
60
66
  "lib/sleep_waiter.rb",
61
67
  "lib/task_manager.rb",
68
+ "lib/tasks/coffeescript/coffeescript_parser.rb",
69
+ "lib/tasks/coffeescript/coffeescript_runner.rb",
62
70
  "lib/tasks/command_line_task.rb",
71
+ "lib/tasks/jasmine_node/jasmine_node_parser.rb",
72
+ "lib/tasks/jasmine_node/jasmine_node_runner.rb",
63
73
  "lib/tasks/javascript_lint/javascript_lint_parser.rb",
64
74
  "lib/tasks/javascript_lint/javascript_lint_runner.rb",
65
75
  "lib/tasks/js_test_driver/js_test_driver_config.rb",
@@ -93,7 +103,7 @@ Gem::Specification.new do |s|
93
103
  s.homepage = %q{http://github.com/karl/loris}
94
104
  s.rdoc_options = ["--charset=UTF-8"]
95
105
  s.require_paths = ["lib"]
96
- s.rubygems_version = %q{1.3.5}
106
+ s.rubygems_version = %q{1.3.7}
97
107
  s.summary = %q{Automatically run javascript unit tests}
98
108
  s.test_files = [
99
109
  "spec/file_actioner_spec.rb",
@@ -116,7 +126,7 @@ Gem::Specification.new do |s|
116
126
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
117
127
  s.specification_version = 3
118
128
 
119
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
129
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
120
130
  s.add_runtime_dependency(%q<bind>, [">= 0.2.6"])
121
131
  s.add_runtime_dependency(%q<karl-growl>, [">= 1.0.6"])
122
132
  s.add_runtime_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/file_actioner.rb</string>
6
+ <string>lib/directory_finder.rb</string>
7
7
  <key>documents</key>
8
8
  <array>
9
9
  <dict>
@@ -13,8 +13,6 @@
13
13
  <string>loris</string>
14
14
  <key>regexFolderFilter</key>
15
15
  <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
- <key>selected</key>
17
- <true/>
18
16
  <key>sourceDirectory</key>
19
17
  <string></string>
20
18
  </dict>
@@ -23,26 +21,12 @@
23
21
  <integer>200</integer>
24
22
  <key>metaData</key>
25
23
  <dict>
26
- <key>Rakefile</key>
27
- <dict>
28
- <key>caret</key>
29
- <dict>
30
- <key>column</key>
31
- <integer>47</integer>
32
- <key>line</key>
33
- <integer>17</integer>
34
- </dict>
35
- <key>firstVisibleColumn</key>
36
- <integer>0</integer>
37
- <key>firstVisibleLine</key>
38
- <integer>0</integer>
39
- </dict>
40
24
  <key>TODO</key>
41
25
  <dict>
42
26
  <key>caret</key>
43
27
  <dict>
44
28
  <key>column</key>
45
- <integer>0</integer>
29
+ <integer>4</integer>
46
30
  <key>line</key>
47
31
  <integer>0</integer>
48
32
  </dict>
@@ -51,14 +35,14 @@
51
35
  <key>firstVisibleLine</key>
52
36
  <integer>0</integer>
53
37
  </dict>
54
- <key>lib/file_actioner.rb</key>
38
+ <key>lib/directory_finder.rb</key>
55
39
  <dict>
56
40
  <key>caret</key>
57
41
  <dict>
58
42
  <key>column</key>
59
- <integer>44</integer>
43
+ <integer>16</integer>
60
44
  <key>line</key>
61
- <integer>12</integer>
45
+ <integer>3</integer>
62
46
  </dict>
63
47
  <key>firstVisibleColumn</key>
64
48
  <integer>0</integer>
@@ -70,9 +54,9 @@
70
54
  <key>caret</key>
71
55
  <dict>
72
56
  <key>column</key>
73
- <integer>39</integer>
57
+ <integer>3</integer>
74
58
  <key>line</key>
75
- <integer>16</integer>
59
+ <integer>35</integer>
76
60
  </dict>
77
61
  <key>firstVisibleColumn</key>
78
62
  <integer>0</integer>
@@ -84,137 +68,109 @@
84
68
  <key>caret</key>
85
69
  <dict>
86
70
  <key>column</key>
87
- <integer>47</integer>
71
+ <integer>2</integer>
88
72
  <key>line</key>
89
- <integer>10</integer>
73
+ <integer>8</integer>
90
74
  </dict>
75
+ <key>columnSelection</key>
76
+ <false/>
91
77
  <key>firstVisibleColumn</key>
92
78
  <integer>0</integer>
93
79
  <key>firstVisibleLine</key>
94
80
  <integer>0</integer>
95
- </dict>
96
- <key>lib/outputs/growl_output.rb</key>
97
- <dict>
98
- <key>caret</key>
81
+ <key>selectFrom</key>
99
82
  <dict>
100
83
  <key>column</key>
101
- <integer>15</integer>
84
+ <integer>0</integer>
102
85
  <key>line</key>
103
- <integer>6</integer>
86
+ <integer>0</integer>
104
87
  </dict>
105
- <key>firstVisibleColumn</key>
106
- <integer>0</integer>
107
- <key>firstVisibleLine</key>
108
- <integer>0</integer>
109
- </dict>
110
- <key>lib/outputs/output_collection.rb</key>
111
- <dict>
112
- <key>caret</key>
88
+ <key>selectTo</key>
113
89
  <dict>
114
90
  <key>column</key>
115
- <integer>22</integer>
91
+ <integer>3</integer>
116
92
  <key>line</key>
117
- <integer>8</integer>
93
+ <integer>16</integer>
118
94
  </dict>
119
- <key>firstVisibleColumn</key>
120
- <integer>0</integer>
121
- <key>firstVisibleLine</key>
122
- <integer>0</integer>
123
95
  </dict>
124
- <key>lib/task_manager.rb</key>
96
+ <key>lib/jasmine-node/specs.js</key>
125
97
  <dict>
126
98
  <key>caret</key>
127
99
  <dict>
128
100
  <key>column</key>
129
101
  <integer>0</integer>
130
102
  <key>line</key>
131
- <integer>23</integer>
103
+ <integer>3</integer>
132
104
  </dict>
133
105
  <key>firstVisibleColumn</key>
134
106
  <integer>0</integer>
135
107
  <key>firstVisibleLine</key>
136
108
  <integer>0</integer>
137
109
  </dict>
138
- <key>lib/tasks/command_line_task.rb</key>
110
+ <key>lib/loris.rb</key>
139
111
  <dict>
140
112
  <key>caret</key>
141
113
  <dict>
142
114
  <key>column</key>
143
- <integer>28</integer>
115
+ <integer>26</integer>
144
116
  <key>line</key>
145
- <integer>14</integer>
117
+ <integer>20</integer>
146
118
  </dict>
147
119
  <key>firstVisibleColumn</key>
148
120
  <integer>0</integer>
149
121
  <key>firstVisibleLine</key>
150
122
  <integer>0</integer>
151
123
  </dict>
152
- <key>lib/tasks/javascript_lint/javascript_lint_parser.rb</key>
124
+ <key>lib/outputs/growl_output.rb</key>
153
125
  <dict>
154
126
  <key>caret</key>
155
127
  <dict>
156
128
  <key>column</key>
157
- <integer>24</integer>
129
+ <integer>15</integer>
158
130
  <key>line</key>
159
- <integer>32</integer>
131
+ <integer>6</integer>
160
132
  </dict>
161
133
  <key>firstVisibleColumn</key>
162
134
  <integer>0</integer>
163
135
  <key>firstVisibleLine</key>
164
136
  <integer>0</integer>
165
137
  </dict>
166
- <key>lib/tasks/javascript_lint/javascript_lint_runner.rb</key>
138
+ <key>lib/outputs/output_collection.rb</key>
167
139
  <dict>
168
140
  <key>caret</key>
169
141
  <dict>
170
142
  <key>column</key>
171
- <integer>57</integer>
143
+ <integer>22</integer>
172
144
  <key>line</key>
173
- <integer>13</integer>
145
+ <integer>8</integer>
174
146
  </dict>
175
- <key>columnSelection</key>
176
- <false/>
177
147
  <key>firstVisibleColumn</key>
178
148
  <integer>0</integer>
179
149
  <key>firstVisibleLine</key>
180
150
  <integer>0</integer>
181
- <key>selectFrom</key>
182
- <dict>
183
- <key>column</key>
184
- <integer>43</integer>
185
- <key>line</key>
186
- <integer>13</integer>
187
- </dict>
188
- <key>selectTo</key>
189
- <dict>
190
- <key>column</key>
191
- <integer>57</integer>
192
- <key>line</key>
193
- <integer>13</integer>
194
- </dict>
195
151
  </dict>
196
- <key>lib/tasks/js_test_driver/js_test_driver_parser.rb</key>
152
+ <key>lib/tasks/coffeescript/coffeescript_runner.rb</key>
197
153
  <dict>
198
154
  <key>caret</key>
199
155
  <dict>
200
156
  <key>column</key>
201
- <integer>2</integer>
157
+ <integer>36</integer>
202
158
  <key>line</key>
203
- <integer>30</integer>
159
+ <integer>18</integer>
204
160
  </dict>
205
161
  <key>firstVisibleColumn</key>
206
162
  <integer>0</integer>
207
163
  <key>firstVisibleLine</key>
208
164
  <integer>0</integer>
209
165
  </dict>
210
- <key>lib/tasks/js_test_driver/js_test_driver_runner.rb</key>
166
+ <key>lib/tasks/jasmine_node/jasmine_node_runner.rb</key>
211
167
  <dict>
212
168
  <key>caret</key>
213
169
  <dict>
214
170
  <key>column</key>
215
- <integer>61</integer>
171
+ <integer>0</integer>
216
172
  <key>line</key>
217
- <integer>16</integer>
173
+ <integer>14</integer>
218
174
  </dict>
219
175
  <key>firstVisibleColumn</key>
220
176
  <integer>0</integer>
@@ -253,19 +209,13 @@
253
209
  <key>openDocuments</key>
254
210
  <array>
255
211
  <string>TODO</string>
256
- <string>lib/tasks/javascript_lint/javascript_lint_parser.rb</string>
257
- <string>lib/tasks/js_test_driver/js_test_driver_parser.rb</string>
258
- <string>lib/tasks/js_test_driver/js_test_driver_runner.rb</string>
259
- <string>lib/outputs/growl_output.rb</string>
260
- <string>lib/outputs/output_collection.rb</string>
212
+ <string>lib/loris.rb</string>
261
213
  <string>lib/filters/ends_with_filter.rb</string>
262
- <string>lib/tasks/javascript_lint/javascript_lint_runner.rb</string>
263
- <string>Rakefile</string>
264
- <string>lib/task_manager.rb</string>
214
+ <string>lib/directory_finder.rb</string>
265
215
  <string>lib/file_finder.rb</string>
266
- <string>lib/file_actioner.rb</string>
267
- <string>lib/tasks/list_task.rb</string>
268
- <string>lib/tasks/command_line_task.rb</string>
216
+ <string>lib/tasks/coffeescript/coffeescript_runner.rb</string>
217
+ <string>lib/tasks/jasmine_node/jasmine_node_runner.rb</string>
218
+ <string>lib/jasmine-node/specs.js</string>
269
219
  </array>
270
220
  <key>showFileHierarchyDrawer</key>
271
221
  <false/>