karl-loris 0.0.5 → 0.0.6

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.
Files changed (48) hide show
  1. data/.autotest +12 -0
  2. data/.gitignore +1 -0
  3. data/TODO +21 -0
  4. data/VERSION +1 -0
  5. data/autotest/discover.rb +3 -0
  6. data/cucumber.yml +1 -0
  7. data/examples/self_test/jsl.conf +0 -0
  8. data/examples/self_test/spec/spec.rhino.js +6 -0
  9. data/features/run.feature +37 -0
  10. data/features/step_definitons/all.rb +61 -0
  11. data/features/support/env.rb +145 -0
  12. data/lib/always_continuer.rb +7 -0
  13. data/lib/extension_filter.rb +20 -0
  14. data/lib/file_actioner.rb +16 -0
  15. data/lib/file_filter.rb +14 -0
  16. data/lib/file_finder.rb +31 -0
  17. data/lib/icons/error.png +0 -0
  18. data/lib/icons/failure.png +0 -0
  19. data/lib/icons/info.png +0 -0
  20. data/lib/icons/success.png +0 -0
  21. data/lib/icons/warning.png +0 -0
  22. data/lib/loris.rb +108 -0
  23. data/lib/modified_filter.rb +21 -0
  24. data/lib/outputs/console_clearing_output.rb +14 -0
  25. data/lib/outputs/growl_output.rb +26 -0
  26. data/lib/outputs/output_collection.rb +23 -0
  27. data/lib/outputs/shell_output.rb +17 -0
  28. data/lib/poller.rb +16 -0
  29. data/lib/sleep_waiter.rb +11 -0
  30. data/lib/task_manager.rb +27 -0
  31. data/lib/tasks/javascript_lint_runner.rb +15 -0
  32. data/lib/tasks/javascript_lint_task.rb +63 -0
  33. data/lib/tasks/jspec_runner.rb +15 -0
  34. data/lib/tasks/jspec_task.rb +53 -0
  35. data/lib/tasks/list_task.rb +34 -0
  36. data/loris.tmproj +202 -0
  37. data/spec/file_actioner_spec.rb +41 -0
  38. data/spec/file_filter_spec.rb +28 -0
  39. data/spec/file_finder_spec.rb +73 -0
  40. data/spec/growl_output_spec.rb +33 -0
  41. data/spec/jspec_task_spec.rb +47 -0
  42. data/spec/list_task_spec.rb +58 -0
  43. data/spec/modified_filter_spec.rb +47 -0
  44. data/spec/poller_spec.rb +28 -0
  45. data/spec/shell_output_spec.rb +25 -0
  46. data/spec/task_manager_spec.rb +64 -0
  47. metadata +70 -19
  48. data/loris.gemspec +0 -33
@@ -0,0 +1,21 @@
1
+ class ModifiedFilter
2
+
3
+ def initialize(file_class, last_modified = nil)
4
+ @file_class = file_class
5
+ @last_modified = last_modified
6
+ @modifieds = []
7
+ end
8
+
9
+ def filter(path)
10
+ modified = @file_class.mtime(path)
11
+ @modifieds << modified
12
+
13
+ return @last_modified.nil? || modified > @last_modified
14
+ end
15
+
16
+ def complete()
17
+ @last_modified = @modifieds.max
18
+ @modifieds = []
19
+ end
20
+
21
+ end
@@ -0,0 +1,14 @@
1
+ class ConsoleClearingOutput
2
+
3
+ def initialize()
4
+ end
5
+
6
+ def start_run()
7
+ clear = RUBY_PLATFORM =~ /mswin32/ ? 'cls' : 'clear'
8
+ system clear
9
+ end
10
+
11
+ def add_result(result)
12
+ end
13
+
14
+ end
@@ -0,0 +1,26 @@
1
+ class GrowlOutput
2
+
3
+ def initialize(growler)
4
+ @growler = growler
5
+ end
6
+
7
+ def start_run()
8
+ end
9
+
10
+ def add_result(result)
11
+ icon = get_icon(result[:state])
12
+
13
+ if @growler.installed?
14
+ @growler.notify {
15
+ self.title = result[:title] + (result[:summary].nil? ? '' : ' - ' + result[:summary])
16
+ self.message = result[:first]
17
+ self.image = icon
18
+ }
19
+ end
20
+ end
21
+
22
+ def get_icon(state)
23
+ return File.join(File.expand_path(File.dirname(__FILE__)), '..', 'icons', "#{state.to_s}.png")
24
+ end
25
+
26
+ end
@@ -0,0 +1,23 @@
1
+ class OutputCollection
2
+
3
+ def initialize()
4
+ @outputs = []
5
+ end
6
+
7
+ def start_run()
8
+ @outputs.each do |output|
9
+ output.start_run()
10
+ end
11
+ end
12
+
13
+ def add(output)
14
+ @outputs << output
15
+ end
16
+
17
+ def add_result(result)
18
+ @outputs.each do |output|
19
+ output.add_result(result)
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,17 @@
1
+ class ShellOutput
2
+
3
+ def initialize(output)
4
+ @output = output
5
+ end
6
+
7
+ def start_run()
8
+ end
9
+
10
+ def add_result(result)
11
+ @output.puts result[:title]
12
+ @output.puts result[:state]
13
+ @output.puts result[:summary]
14
+ @output.puts result[:detail]
15
+ end
16
+
17
+ end
@@ -0,0 +1,16 @@
1
+ class Poller
2
+
3
+ def initialize(waiter, continuer, action)
4
+ @waiter = waiter
5
+ @continuer = continuer
6
+ @action = action
7
+ end
8
+
9
+ def start
10
+ while @continuer.continue?
11
+ @waiter.wait
12
+ @action.run
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,11 @@
1
+ class SleepWaiter
2
+
3
+ def initialize(sleep_time = 1)
4
+ @sleep_time = sleep_time
5
+ end
6
+
7
+ def wait
8
+ sleep @sleep_time
9
+ end
10
+
11
+ end
@@ -0,0 +1,27 @@
1
+ class TaskManager
2
+
3
+ def initialize(output)
4
+ @output = output
5
+ @tasks = []
6
+ end
7
+
8
+ def add(task)
9
+ @tasks << task
10
+ end
11
+
12
+ def run(files)
13
+ @output.start_run();
14
+
15
+ @tasks.each do |task|
16
+
17
+ result = task.run(files)
18
+ if !result.nil?
19
+ @output.add_result(result)
20
+ break if [:error, :failure].include? result[:state]
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,15 @@
1
+ class JavascriptLintRunner
2
+
3
+ def initialize(dir)
4
+ @dir = dir
5
+ end
6
+
7
+ def execute()
8
+ return `jsl -conf "jsl.conf" -nologo -nofilelisting 2>&1`
9
+ end
10
+
11
+ def is_configured?(all_files)
12
+ return all_files.include?(@dir + '/jsl.conf')
13
+ end
14
+
15
+ end
@@ -0,0 +1,63 @@
1
+ class JavascriptLintTask
2
+
3
+ def initialize(javascript_lint, dir)
4
+ @javascript_lint = javascript_lint
5
+ @dir = dir
6
+
7
+ # TODO: Tidy!
8
+ if (RUBY_PLATFORM =~ /mswin32/)
9
+ @dir = @dir.gsub('/', '\\')
10
+ end
11
+
12
+ end
13
+
14
+ def run(files)
15
+ all_files = files[:all]
16
+ mofified_files = files[:filtered]
17
+
18
+ return nil if (!@javascript_lint.is_configured? all_files)
19
+
20
+ detail = @javascript_lint.execute()
21
+
22
+ state, summary, first = parse_result(detail)
23
+
24
+ # TODO: Tidy!
25
+ if (first[0, @dir.length] == @dir)
26
+ first = first[(@dir.length + 1)..-1]
27
+ end
28
+
29
+ return {
30
+ :state => state,
31
+ :title => 'Javascript Lint',
32
+ :summary => summary,
33
+ :first => first,
34
+ :detail => detail
35
+ }
36
+ end
37
+
38
+ def parse_result(detail)
39
+ summary_line = detail.grep( /\d+\s+error.*,\s+\d+\s+warning.*/ )[0]
40
+
41
+ if summary_line.nil?
42
+ # error
43
+ error_info = (detail + "\nUnknown Error!").to_a[0].chomp
44
+ return :error, 'Error', error_info
45
+ end
46
+
47
+ if summary_line =~ /([1-9]+)\d*\s+error/
48
+ num_failures = $1
49
+ error_info = detail.grep(/\([0-9]+\):([^:]*)Error:/)[0].chomp
50
+ return :failure, num_failures + ' Errors', error_info
51
+ end
52
+
53
+ if summary_line =~ /([1-9]+)\d*\s+warning/
54
+ num_failures = $1
55
+ error_info = detail.grep(/\([0-9]+\)/)[0].chomp
56
+ return :warning, num_failures + ' Warnings', error_info
57
+ end
58
+
59
+ return :success, 'All files are clean', ''
60
+
61
+ end
62
+
63
+ end
@@ -0,0 +1,15 @@
1
+ class JSpecRunner
2
+
3
+ def initialize(dir)
4
+ @dir = dir
5
+ end
6
+
7
+ def execute
8
+ return `jspec run --rhino --trace 2>&1`
9
+ end
10
+
11
+ def is_configured?(all_files)
12
+ return all_files.include?(@dir + '/spec/spec.rhino.js')
13
+ end
14
+
15
+ end
@@ -0,0 +1,53 @@
1
+ class JSpecTask
2
+
3
+ def initialize(jspec)
4
+ @jspec = jspec
5
+ end
6
+
7
+ def run(files)
8
+ all_files = files[:all]
9
+ mofified_files = files[:filtered]
10
+
11
+ return nil if (!@jspec.is_configured? all_files)
12
+
13
+ detail = @jspec.execute
14
+
15
+ state, summary, first = parse_results(detail)
16
+
17
+ return {
18
+ :state => state,
19
+ :title => 'JSpec',
20
+ :summary => summary,
21
+ :first => first,
22
+ :detail => detail
23
+ }
24
+ end
25
+
26
+ def parse_results(detail)
27
+ summary_line = detail.grep( /Passes:/ )[0]
28
+
29
+ if summary_line.nil?
30
+ # error
31
+ error_info = (detail + "\nUnknown Error!").to_a[0]
32
+ return :error, 'Error', error_info
33
+ end
34
+
35
+ # remove console colour information and trim start and end white space
36
+ summary_line = remove_colour(summary_line).strip
37
+
38
+ if summary_line =~ /Failures:\s+([1-9]+)\d*/
39
+ num_failures = $1
40
+ error_line = detail.grep(/\[31m/)[1] || ''
41
+ error_info = remove_colour(error_line).strip
42
+ return :failure, num_failures + ' Failures', error_info
43
+ end
44
+
45
+
46
+ return :success, 'All Passed', summary_line
47
+ end
48
+
49
+ def remove_colour(string)
50
+ return string.gsub(/\e\[[0-9]+m?/, '')
51
+ end
52
+
53
+ end
@@ -0,0 +1,34 @@
1
+ class ListTask
2
+
3
+ def initialize(format_string = "%s")
4
+ @format_string = format_string
5
+ end
6
+
7
+ def run(files)
8
+ all_files = files[:all]
9
+ mofified_files = files[:filtered]
10
+
11
+ return {
12
+ :state => :success,
13
+ :title => 'List',
14
+ :first => mofified_files.length == 1 ? mofified_files[0] : '%s files.' % mofified_files.length,
15
+ :detail => get_detail(mofified_files)
16
+ }
17
+ end
18
+
19
+ def get_detail(paths)
20
+ detail = ""
21
+ limit = [paths.length - 1, 14].min
22
+ (0..limit).each do |i|
23
+ path = paths[i]
24
+ detail += (@format_string % path)
25
+ detail += "\n"
26
+ end
27
+ if limit < paths.length - 1
28
+ detail += " - Plus #{(paths.length - 1) - limit} more files."
29
+ end
30
+
31
+ return detail
32
+ end
33
+
34
+ end
@@ -0,0 +1,202 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>currentDocument</key>
6
+ <string>lib/tasks/jspec_task.rb</string>
7
+ <key>documents</key>
8
+ <array>
9
+ <dict>
10
+ <key>expanded</key>
11
+ <true/>
12
+ <key>name</key>
13
+ <string>loris</string>
14
+ <key>regexFolderFilter</key>
15
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
+ <key>selected</key>
17
+ <true/>
18
+ <key>sourceDirectory</key>
19
+ <string></string>
20
+ </dict>
21
+ </array>
22
+ <key>fileHierarchyDrawerWidth</key>
23
+ <integer>200</integer>
24
+ <key>metaData</key>
25
+ <dict>
26
+ <key>TODO</key>
27
+ <dict>
28
+ <key>caret</key>
29
+ <dict>
30
+ <key>column</key>
31
+ <integer>5</integer>
32
+ <key>line</key>
33
+ <integer>2</integer>
34
+ </dict>
35
+ <key>firstVisibleColumn</key>
36
+ <integer>0</integer>
37
+ <key>firstVisibleLine</key>
38
+ <integer>0</integer>
39
+ </dict>
40
+ <key>lib/file_actioner.rb</key>
41
+ <dict>
42
+ <key>caret</key>
43
+ <dict>
44
+ <key>column</key>
45
+ <integer>7</integer>
46
+ <key>line</key>
47
+ <integer>12</integer>
48
+ </dict>
49
+ <key>firstVisibleColumn</key>
50
+ <integer>0</integer>
51
+ <key>firstVisibleLine</key>
52
+ <integer>0</integer>
53
+ </dict>
54
+ <key>lib/file_filter.rb</key>
55
+ <dict>
56
+ <key>caret</key>
57
+ <dict>
58
+ <key>column</key>
59
+ <integer>33</integer>
60
+ <key>line</key>
61
+ <integer>7</integer>
62
+ </dict>
63
+ <key>firstVisibleColumn</key>
64
+ <integer>0</integer>
65
+ <key>firstVisibleLine</key>
66
+ <integer>0</integer>
67
+ </dict>
68
+ <key>lib/loris.rb</key>
69
+ <dict>
70
+ <key>caret</key>
71
+ <dict>
72
+ <key>column</key>
73
+ <integer>50</integer>
74
+ <key>line</key>
75
+ <integer>83</integer>
76
+ </dict>
77
+ <key>firstVisibleColumn</key>
78
+ <integer>0</integer>
79
+ <key>firstVisibleLine</key>
80
+ <integer>54</integer>
81
+ </dict>
82
+ <key>lib/sleep_waiter.rb</key>
83
+ <dict>
84
+ <key>caret</key>
85
+ <dict>
86
+ <key>column</key>
87
+ <integer>4</integer>
88
+ <key>line</key>
89
+ <integer>9</integer>
90
+ </dict>
91
+ <key>firstVisibleColumn</key>
92
+ <integer>0</integer>
93
+ <key>firstVisibleLine</key>
94
+ <integer>0</integer>
95
+ </dict>
96
+ <key>lib/tasks/javascript_lint_runner.rb</key>
97
+ <dict>
98
+ <key>caret</key>
99
+ <dict>
100
+ <key>column</key>
101
+ <integer>0</integer>
102
+ <key>line</key>
103
+ <integer>5</integer>
104
+ </dict>
105
+ <key>columnSelection</key>
106
+ <false/>
107
+ <key>firstVisibleColumn</key>
108
+ <integer>0</integer>
109
+ <key>firstVisibleLine</key>
110
+ <integer>0</integer>
111
+ <key>selectFrom</key>
112
+ <dict>
113
+ <key>column</key>
114
+ <integer>0</integer>
115
+ <key>line</key>
116
+ <integer>2</integer>
117
+ </dict>
118
+ <key>selectTo</key>
119
+ <dict>
120
+ <key>column</key>
121
+ <integer>0</integer>
122
+ <key>line</key>
123
+ <integer>5</integer>
124
+ </dict>
125
+ </dict>
126
+ <key>lib/tasks/javascript_lint_task.rb</key>
127
+ <dict>
128
+ <key>caret</key>
129
+ <dict>
130
+ <key>column</key>
131
+ <integer>0</integer>
132
+ <key>line</key>
133
+ <integer>11</integer>
134
+ </dict>
135
+ <key>columnSelection</key>
136
+ <false/>
137
+ <key>firstVisibleColumn</key>
138
+ <integer>0</integer>
139
+ <key>firstVisibleLine</key>
140
+ <integer>0</integer>
141
+ <key>selectFrom</key>
142
+ <dict>
143
+ <key>column</key>
144
+ <integer>0</integer>
145
+ <key>line</key>
146
+ <integer>7</integer>
147
+ </dict>
148
+ <key>selectTo</key>
149
+ <dict>
150
+ <key>column</key>
151
+ <integer>0</integer>
152
+ <key>line</key>
153
+ <integer>11</integer>
154
+ </dict>
155
+ </dict>
156
+ <key>lib/tasks/jspec_runner.rb</key>
157
+ <dict>
158
+ <key>caret</key>
159
+ <dict>
160
+ <key>column</key>
161
+ <integer>0</integer>
162
+ <key>line</key>
163
+ <integer>5</integer>
164
+ </dict>
165
+ <key>firstVisibleColumn</key>
166
+ <integer>0</integer>
167
+ <key>firstVisibleLine</key>
168
+ <integer>0</integer>
169
+ </dict>
170
+ <key>lib/tasks/jspec_task.rb</key>
171
+ <dict>
172
+ <key>caret</key>
173
+ <dict>
174
+ <key>column</key>
175
+ <integer>26</integer>
176
+ <key>line</key>
177
+ <integer>10</integer>
178
+ </dict>
179
+ <key>firstVisibleColumn</key>
180
+ <integer>0</integer>
181
+ <key>firstVisibleLine</key>
182
+ <integer>0</integer>
183
+ </dict>
184
+ </dict>
185
+ <key>openDocuments</key>
186
+ <array>
187
+ <string>TODO</string>
188
+ <string>lib/tasks/javascript_lint_runner.rb</string>
189
+ <string>lib/loris.rb</string>
190
+ <string>lib/sleep_waiter.rb</string>
191
+ <string>lib/file_actioner.rb</string>
192
+ <string>lib/file_filter.rb</string>
193
+ <string>lib/tasks/javascript_lint_task.rb</string>
194
+ <string>lib/tasks/jspec_runner.rb</string>
195
+ <string>lib/tasks/jspec_task.rb</string>
196
+ </array>
197
+ <key>showFileHierarchyDrawer</key>
198
+ <false/>
199
+ <key>windowFrame</key>
200
+ <string>{{0, 0}, {1436, 878}}</string>
201
+ </dict>
202
+ </plist>