simplabs-excellent 1.3.0 → 1.3.1

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.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ = 1.3.1
2
+
3
+ * FIX (forgot files in gemspec on 1.3.0)
4
+
1
5
  = 1.3.0
2
6
 
3
7
  * added formatters (currently text and HTML formatting is supported, see README)
data/README.rdoc CHANGED
@@ -18,7 +18,7 @@ To analyse all the models in your Rails application, just do
18
18
  excellent app/models
19
19
 
20
20
  in your <tt>RAILS_ROOT</tt>. You can also invoke analysation through the Simplabs::Excellent::Runner class. Excellent can also produce HTML output. To
21
- get a formatted HTML report, just specify html:<filename>:
21
+ get a formatted HTML report, just specify <tt>html:<filename></tt>:
22
22
 
23
23
  excellent html:out.html app/models
24
24
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 3
4
- :patch: 0
4
+ :patch: 1
@@ -9,7 +9,7 @@ module Simplabs #:nodoc:
9
9
 
10
10
  module Excellent #:nodoc:
11
11
 
12
- VERSION = '1.3.0'
12
+ VERSION = '1.3.1'
13
13
 
14
14
  end
15
15
 
@@ -0,0 +1,37 @@
1
+ require 'simplabs/excellent/runner'
2
+ require 'simplabs/excellent/formatters'
3
+
4
+ module Simplabs
5
+
6
+ module Excellent
7
+
8
+ class CommandLineRunner < Runner #:nodoc:
9
+
10
+ def initialize(*checks)
11
+ super
12
+ @formatter = Formatters::Text.new
13
+ @formatter.start
14
+ end
15
+
16
+ def check_paths(paths)
17
+ paths.each do |path|
18
+ if File.file?(path)
19
+ check_file(path)
20
+ elsif File.directory?(path)
21
+ Dir.glob(File.join(path, '**/*.rb')).each { |file| check_file(file) }
22
+ else
23
+ next
24
+ end
25
+ end
26
+ end
27
+
28
+ def check_file(filename)
29
+ super
30
+ @formatter.file(filename, (@checks || []).collect { |check| check.warnings }.flatten)
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,13 @@
1
+ module Simplabs
2
+
3
+ module Excellent
4
+
5
+ module Formatters #:nodoc:
6
+ end
7
+
8
+ end
9
+
10
+ end
11
+
12
+ require 'simplabs/excellent/formatters/text'
13
+ require 'simplabs/excellent/formatters/html'
@@ -0,0 +1,49 @@
1
+ module Simplabs
2
+
3
+ module Excellent
4
+
5
+ module Formatters
6
+
7
+ # The base class for all formatters.
8
+ class Base
9
+
10
+ # Initializes the formatter.
11
+ #
12
+ # Always call +super+ in custom formatters!
13
+ def initialize(stream)
14
+ @stream = stream
15
+ end
16
+
17
+ # Called when the Simplabs::Excellent::Runner starts processing code.
18
+ #
19
+ # The text formatter renders the heading here ('Excellent result')
20
+ def start
21
+ end
22
+
23
+ # Called whenever the Simplabs::Excellent::Runner processes a file. Yields the formatter
24
+ #
25
+ # You have to <tt>yield self</tt> in custom formatters. +file+ is called like that by the runner:
26
+ #
27
+ # formatter.file(filename) do |formatter|
28
+ # warnings.each { |warning| formatter.warning(warning) }
29
+ # end
30
+ def file(filename)
31
+ end
32
+
33
+ # Called when the Simplabs::Excellent::Runner found a warning. This warning will always refer to the last filename, +file+ was invoked with.
34
+ def warning(warning)
35
+ end
36
+
37
+ # Called when the Simplabs::Excellent::Runner ends processing code.
38
+ #
39
+ # The text formatter renders the footer here ('Found <x> warnings').
40
+ def end
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,132 @@
1
+ require 'simplabs/excellent/formatters/base'
2
+
3
+ module Simplabs
4
+
5
+ module Excellent
6
+
7
+ module Formatters
8
+
9
+ class Html < Base #:nodoc:
10
+
11
+ def initialize(stream = $stdout)
12
+ super
13
+ end
14
+
15
+ def start
16
+ @stream.write(HEADER_TEMPLATE)
17
+ end
18
+
19
+ def file(filename)
20
+ @stream.write(START_FIlE_TAMPLATE.sub('{{filename}}', filename))
21
+ yield self
22
+ @stream.write(END_FIlE_TAMPLATE)
23
+ end
24
+
25
+ def warning(warning)
26
+ @stream.write(WARNING_TEMPLATE.sub('{{line_number}}', warning.line_number.to_s).sub('{{message}}', warning.message))
27
+ end
28
+
29
+ def end
30
+ @stream.write(FOOTER_TEMPLATE)
31
+ end
32
+
33
+ HEADER_TEMPLATE = <<-END
34
+ <?xml version="1.0" encoding="UTF-8"?>
35
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
36
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
37
+ <head>
38
+ <title>Excellent result</title>
39
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
40
+ <style type="text/css">
41
+ body {
42
+ margin: 0;
43
+ padding: 0;
44
+ background: #fff;
45
+ font-size: 80%;
46
+ font-family: "Lucida Grande", Helvetica, sans-serif;
47
+ }
48
+
49
+ #header {
50
+ background: #ccc;
51
+ color: #000;
52
+ height: 4em;
53
+ }
54
+
55
+ #header h1 {
56
+ font-size: 1.8em;
57
+ margin: 0px 10px 0px 10px;
58
+ padding: 10px;
59
+ position: absolute;
60
+ }
61
+
62
+ #results {
63
+ margin: 0px 10px 5px;
64
+ }
65
+
66
+ dt {
67
+ background: #ccc;
68
+ padding: 5px;
69
+ font-weight: bold;
70
+ margin: 30px 0 0 0;
71
+ }
72
+
73
+ dd {
74
+ margin: 5px 0px 5px 20px;
75
+ }
76
+
77
+ dd.warning {
78
+ background: #faf834;
79
+ }
80
+
81
+ dd.warning span.lineNumber {
82
+ background: #ccc;
83
+ font-weight: bold;
84
+ padding: 3px;
85
+ display: inline-block;
86
+ margin: 0 10px 0 0;
87
+ }
88
+
89
+ dd.warning span.number {
90
+ width: 30px;
91
+ text-align: right;
92
+ display: inline-block;
93
+ }
94
+ </style>
95
+ </head>
96
+ <body>
97
+ <div id="header">
98
+ <div id="label">
99
+ <h1>Excellent result</h1>
100
+ </div>
101
+ </div>
102
+ <div id="results">
103
+ END
104
+
105
+ START_FIlE_TAMPLATE = <<-END
106
+ <div class="file">
107
+ <dl>
108
+ <dt>{{filename}}</dt>
109
+ END
110
+
111
+ END_FIlE_TAMPLATE = <<-END
112
+ </dl>
113
+ </div>
114
+ END
115
+
116
+ WARNING_TEMPLATE = <<-END
117
+ <dd class="warning"><span class="lineNumber">Line <span class="number">{{line_number}}</span></span>{{message}}</dd>
118
+ END
119
+
120
+ FOOTER_TEMPLATE = <<-END
121
+ </div>
122
+ </body>
123
+ </html>
124
+ END
125
+
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+
132
+ end
@@ -0,0 +1,40 @@
1
+ require 'simplabs/excellent/formatters/base'
2
+
3
+ module Simplabs
4
+
5
+ module Excellent
6
+
7
+ module Formatters
8
+
9
+ class Text < Base #:nodoc:
10
+
11
+ def initialize(stream = $stdout)
12
+ super
13
+ @total_warnings = 0
14
+ end
15
+
16
+ def start
17
+ @stream.puts "\n Excellent result:\n"
18
+ end
19
+
20
+ def file(filename)
21
+ @stream.puts "\n #{filename}\n"
22
+ yield self
23
+ end
24
+
25
+ def warning(warning)
26
+ @stream.puts " * Line #{warning.line_number.to_s.lpad(3)}: \e[33m#{warning.message}\e[0m"
27
+ @total_warnings += 1
28
+ end
29
+
30
+ def end
31
+ @stream.puts "\n Found #{@total_warnings} warnings.\n\n"
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplabs-excellent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Otte-Witte
@@ -75,8 +75,13 @@ files:
75
75
  - lib/simplabs/excellent/checks/rails.rb
76
76
  - lib/simplabs/excellent/checks/singleton_variable_check.rb
77
77
  - lib/simplabs/excellent/checks.rb
78
+ - lib/simplabs/excellent/command_line_runner.rb
78
79
  - lib/simplabs/excellent/extensions/sexp.rb
79
80
  - lib/simplabs/excellent/extensions/string.rb
81
+ - lib/simplabs/excellent/formatters/base.rb
82
+ - lib/simplabs/excellent/formatters/html.rb
83
+ - lib/simplabs/excellent/formatters/text.rb
84
+ - lib/simplabs/excellent/formatters.rb
80
85
  - lib/simplabs/excellent/parsing/abc_measure.rb
81
86
  - lib/simplabs/excellent/parsing/block_context.rb
82
87
  - lib/simplabs/excellent/parsing/call_context.rb