code_poetry-html 0.0.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.
@@ -0,0 +1,132 @@
1
+ /*
2
+ Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
3
+ */
4
+
5
+ pre code {
6
+ display: block; padding: 0.5em;
7
+ color: #000;
8
+ background: #f8f8ff
9
+ }
10
+
11
+ pre .comment,
12
+ pre .template_comment,
13
+ pre .diff .header,
14
+ pre .javadoc {
15
+ color: #408080;
16
+ font-style: italic
17
+ }
18
+
19
+ pre .keyword,
20
+ pre .assignment,
21
+ pre .literal,
22
+ pre .css .rule .keyword,
23
+ pre .winutils,
24
+ pre .javascript .title,
25
+ pre .lisp .title,
26
+ pre .subst {
27
+ color: #954121;
28
+ }
29
+
30
+ pre .number,
31
+ pre .hexcolor {
32
+ color: #40a070
33
+ }
34
+
35
+ pre .string,
36
+ pre .tag .value,
37
+ pre .phpdoc,
38
+ pre .tex .formula {
39
+ color: #219161;
40
+ }
41
+
42
+ pre .title,
43
+ pre .id {
44
+ color: #19469D;
45
+ }
46
+ pre .params {
47
+ color: #00F;
48
+ }
49
+
50
+ pre .javascript .title,
51
+ pre .lisp .title,
52
+ pre .subst {
53
+ font-weight: normal
54
+ }
55
+
56
+ pre .class .title,
57
+ pre .haskell .label,
58
+ pre .tex .command {
59
+ color: #458;
60
+ font-weight: bold
61
+ }
62
+
63
+ pre .tag,
64
+ pre .tag .title,
65
+ pre .rules .property,
66
+ pre .django .tag .keyword {
67
+ color: #000080;
68
+ font-weight: normal
69
+ }
70
+
71
+ pre .attribute,
72
+ pre .variable,
73
+ pre .instancevar,
74
+ pre .lisp .body {
75
+ color: #008080
76
+ }
77
+
78
+ pre .regexp {
79
+ color: #B68
80
+ }
81
+
82
+ pre .class {
83
+ color: #458;
84
+ font-weight: bold
85
+ }
86
+
87
+ pre .symbol,
88
+ pre .ruby .symbol .string,
89
+ pre .ruby .symbol .keyword,
90
+ pre .ruby .symbol .keymethods,
91
+ pre .lisp .keyword,
92
+ pre .tex .special,
93
+ pre .input_number {
94
+ color: #990073
95
+ }
96
+
97
+ pre .builtin,
98
+ pre .constructor,
99
+ pre .built_in,
100
+ pre .lisp .title {
101
+ color: #0086b3
102
+ }
103
+
104
+ pre .preprocessor,
105
+ pre .pragma,
106
+ pre .pi,
107
+ pre .doctype,
108
+ pre .shebang,
109
+ pre .cdata {
110
+ color: #999;
111
+ font-weight: bold
112
+ }
113
+
114
+ pre .deletion {
115
+ background: #fdd
116
+ }
117
+
118
+ pre .addition {
119
+ background: #dfd
120
+ }
121
+
122
+ pre .diff .change {
123
+ background: #0086b3
124
+ }
125
+
126
+ pre .chunk {
127
+ color: #aaa
128
+ }
129
+
130
+ pre .tex .formula {
131
+ opacity: 0.5;
132
+ }
@@ -0,0 +1,274 @@
1
+ /*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
2
+ .fancybox-wrap,
3
+ .fancybox-skin,
4
+ .fancybox-outer,
5
+ .fancybox-inner,
6
+ .fancybox-image,
7
+ .fancybox-wrap iframe,
8
+ .fancybox-wrap object,
9
+ .fancybox-nav,
10
+ .fancybox-nav span,
11
+ .fancybox-tmp
12
+ {
13
+ padding: 0;
14
+ margin: 0;
15
+ border: 0;
16
+ outline: none;
17
+ vertical-align: top;
18
+ }
19
+
20
+ .fancybox-wrap {
21
+ position: absolute;
22
+ top: 0;
23
+ left: 0;
24
+ z-index: 8020;
25
+ }
26
+
27
+ .fancybox-skin {
28
+ position: relative;
29
+ background: #f9f9f9;
30
+ color: #444;
31
+ text-shadow: none;
32
+ -webkit-border-radius: 4px;
33
+ -moz-border-radius: 4px;
34
+ border-radius: 4px;
35
+ }
36
+
37
+ .fancybox-opened {
38
+ z-index: 8030;
39
+ }
40
+
41
+ .fancybox-opened .fancybox-skin {
42
+ -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
43
+ -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
44
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
45
+ }
46
+
47
+ .fancybox-outer, .fancybox-inner {
48
+ position: relative;
49
+ }
50
+
51
+ .fancybox-inner {
52
+ overflow: hidden;
53
+ }
54
+
55
+ .fancybox-type-iframe .fancybox-inner {
56
+ -webkit-overflow-scrolling: touch;
57
+ }
58
+
59
+ .fancybox-error {
60
+ color: #444;
61
+ font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
62
+ margin: 0;
63
+ padding: 15px;
64
+ white-space: nowrap;
65
+ }
66
+
67
+ .fancybox-image, .fancybox-iframe {
68
+ display: block;
69
+ width: 100%;
70
+ height: 100%;
71
+ }
72
+
73
+ .fancybox-image {
74
+ max-width: 100%;
75
+ max-height: 100%;
76
+ }
77
+
78
+ #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
79
+ background-image: url('fancybox_sprite.png');
80
+ }
81
+
82
+ #fancybox-loading {
83
+ position: fixed;
84
+ top: 50%;
85
+ left: 50%;
86
+ margin-top: -22px;
87
+ margin-left: -22px;
88
+ background-position: 0 -108px;
89
+ opacity: 0.8;
90
+ cursor: pointer;
91
+ z-index: 8060;
92
+ }
93
+
94
+ #fancybox-loading div {
95
+ width: 44px;
96
+ height: 44px;
97
+ background: url('fancybox_loading.gif') center center no-repeat;
98
+ }
99
+
100
+ .fancybox-close {
101
+ position: absolute;
102
+ top: -18px;
103
+ right: -18px;
104
+ width: 36px;
105
+ height: 36px;
106
+ cursor: pointer;
107
+ z-index: 8040;
108
+ }
109
+
110
+ .fancybox-nav {
111
+ position: absolute;
112
+ top: 0;
113
+ width: 40%;
114
+ height: 100%;
115
+ cursor: pointer;
116
+ text-decoration: none;
117
+ background: transparent url('blank.gif'); /* helps IE */
118
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
119
+ z-index: 8040;
120
+ }
121
+
122
+ .fancybox-prev {
123
+ left: 0;
124
+ }
125
+
126
+ .fancybox-next {
127
+ right: 0;
128
+ }
129
+
130
+ .fancybox-nav span {
131
+ position: absolute;
132
+ top: 50%;
133
+ width: 36px;
134
+ height: 34px;
135
+ margin-top: -18px;
136
+ cursor: pointer;
137
+ z-index: 8040;
138
+ visibility: hidden;
139
+ }
140
+
141
+ .fancybox-prev span {
142
+ left: 10px;
143
+ background-position: 0 -36px;
144
+ }
145
+
146
+ .fancybox-next span {
147
+ right: 10px;
148
+ background-position: 0 -72px;
149
+ }
150
+
151
+ .fancybox-nav:hover span {
152
+ visibility: visible;
153
+ }
154
+
155
+ .fancybox-tmp {
156
+ position: absolute;
157
+ top: -99999px;
158
+ left: -99999px;
159
+ visibility: hidden;
160
+ max-width: 99999px;
161
+ max-height: 99999px;
162
+ overflow: visible !important;
163
+ }
164
+
165
+ /* Overlay helper */
166
+
167
+ .fancybox-lock {
168
+ overflow: hidden !important;
169
+ width: auto;
170
+ }
171
+
172
+ .fancybox-lock body {
173
+ overflow: hidden !important;
174
+ }
175
+
176
+ .fancybox-lock-test {
177
+ overflow-y: hidden !important;
178
+ }
179
+
180
+ .fancybox-overlay {
181
+ position: absolute;
182
+ top: 0;
183
+ left: 0;
184
+ overflow: hidden;
185
+ display: none;
186
+ z-index: 8010;
187
+ background: url('fancybox_overlay.png');
188
+ }
189
+
190
+ .fancybox-overlay-fixed {
191
+ position: fixed;
192
+ bottom: 0;
193
+ right: 0;
194
+ }
195
+
196
+ .fancybox-lock .fancybox-overlay {
197
+ overflow: auto;
198
+ overflow-y: scroll;
199
+ }
200
+
201
+ /* Title helper */
202
+
203
+ .fancybox-title {
204
+ visibility: hidden;
205
+ font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
206
+ position: relative;
207
+ text-shadow: none;
208
+ z-index: 8050;
209
+ }
210
+
211
+ .fancybox-opened .fancybox-title {
212
+ visibility: visible;
213
+ }
214
+
215
+ .fancybox-title-float-wrap {
216
+ position: absolute;
217
+ bottom: 0;
218
+ right: 50%;
219
+ margin-bottom: -35px;
220
+ z-index: 8050;
221
+ text-align: center;
222
+ }
223
+
224
+ .fancybox-title-float-wrap .child {
225
+ display: inline-block;
226
+ margin-right: -100%;
227
+ padding: 2px 20px;
228
+ background: transparent; /* Fallback for web browsers that doesn't support RGBa */
229
+ background: rgba(0, 0, 0, 0.8);
230
+ -webkit-border-radius: 15px;
231
+ -moz-border-radius: 15px;
232
+ border-radius: 15px;
233
+ text-shadow: 0 1px 2px #222;
234
+ color: #FFF;
235
+ font-weight: bold;
236
+ line-height: 24px;
237
+ white-space: nowrap;
238
+ }
239
+
240
+ .fancybox-title-outside-wrap {
241
+ position: relative;
242
+ margin-top: 10px;
243
+ color: #fff;
244
+ }
245
+
246
+ .fancybox-title-inside-wrap {
247
+ padding-top: 10px;
248
+ }
249
+
250
+ .fancybox-title-over-wrap {
251
+ position: absolute;
252
+ bottom: 0;
253
+ left: 0;
254
+ color: #fff;
255
+ padding: 10px;
256
+ background: #000;
257
+ background: rgba(0, 0, 0, .8);
258
+ }
259
+
260
+ /*Retina graphics!*/
261
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5),
262
+ only screen and (min--moz-device-pixel-ratio: 1.5),
263
+ only screen and (min-device-pixel-ratio: 1.5){
264
+
265
+ #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
266
+ background-image: url('fancybox_sprite@2x.png');
267
+ background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
268
+ }
269
+
270
+ #fancybox-loading div {
271
+ background-image: url('fancybox_loading@2x.gif');
272
+ background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
273
+ }
274
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ Pure v0.3.0
3
+ Copyright 2013 Yahoo! Inc. All rights reserved.
4
+ Licensed under the BSD License.
5
+ https://github.com/yui/pure/blob/master/LICENSE.md
6
+ */
7
+ /*
8
+ normalize.css v1.1.2 | MIT License | git.io/normalize
9
+ Copyright (c) Nicolas Gallagher and Jonathan Neal
10
+ */
11
+ /* normalize.css v1.1.2 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}html,button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:1em 40px}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:'';content:none}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:6px 12px}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child td,.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child td{border-bottom-width:0}input[type=text],input[type=password],input[type=email],input[type=url],input[type=date],input[type=month],input[type=time],input[type=datetime],input[type=datetime-local],input[type=week],input[type=number],input[type=search],input[type=tel],input[type=color],select,textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;font-size:.8em;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-transition:.3s linear border;-moz-transition:.3s linear border;-ms-transition:.3s linear border;-o-transition:.3s linear border;transition:.3s linear border;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=text]:focus,input[type=password]:focus,input[type=email]:focus,input[type=url]:focus,input[type=date]:focus,input[type=month]:focus,input[type=time]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=week]:focus,input[type=number]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=color]:focus,select:focus,textarea:focus{outline:0;outline:thin dotted \9;border-color:#129FEA}
@@ -0,0 +1,128 @@
1
+ body {
2
+ font-family: 'Lato', sans-serif;
3
+ padding: 12px 24px;
4
+ color: #777;
5
+ }
6
+
7
+ a {
8
+ color: #3b8bba;
9
+ text-decoration: none;
10
+ }
11
+
12
+ table { width: 100% }
13
+
14
+ .header {
15
+ min-height: 60px;
16
+ margin: 0;
17
+ color: #1F8DD6;
18
+ padding: 1em 2em;
19
+ text-align: center;
20
+ }
21
+
22
+ .header h1 {
23
+ font-family: 'Lato', sans-serif;
24
+ margin: 0.2em 0;
25
+ font-size: 4em;
26
+ font-weight: 300;
27
+ font-weight: 300;
28
+ }
29
+
30
+ .subhead {
31
+ font-weight: 300;
32
+ position: relative;
33
+ }
34
+
35
+ .dataTables_filter {
36
+ margin-bottom: 10px;
37
+ margin-left: 10px;
38
+ }
39
+
40
+ .dataTables_info {
41
+ margin-top: 10px;
42
+ margin-left: 10px;
43
+ }
44
+
45
+ a.src_link {
46
+ background: url('./magnify.png') no-repeat left 50%;
47
+ padding-left: 18px;
48
+ }
49
+
50
+ th {
51
+ white-space: nowrap;
52
+ font-weight: 400;
53
+ }
54
+
55
+ .source_files { display: none }
56
+
57
+ .source_table {
58
+ h3, h4 {
59
+ // padding: 0;
60
+ // margin: 0;
61
+ // margin-bottom: 4px;
62
+ }
63
+ .header {
64
+ // padding: 10px;
65
+ }
66
+ pre {
67
+ margin: 0;
68
+ padding: 0;
69
+ white-space: normal;
70
+ color: #000;
71
+ font-family: Consolas, 'Bitstream Vera Sans Mono', Monaco, Courier, monospace;
72
+ p {
73
+ font-family: 'Lato', sans-serif;
74
+ color: white;
75
+ margin: 0px;
76
+ padding: 10px 0 10px 15px;
77
+ }
78
+ }
79
+ code {
80
+ color: #000;
81
+ font-family: Consolas, 'Bitstream Vera Sans Mono', Monaco, Courier, monospace;
82
+ }
83
+ pre {
84
+ background-color: #333;
85
+ ol {
86
+ margin: 0px;
87
+ padding: 0px;
88
+ margin-left: 45px;
89
+ font-size: 13px;
90
+ color: white;
91
+ }
92
+ li {
93
+ background-color: #f8f8ff;
94
+ padding-left: 10px;
95
+ code {
96
+ white-space: pre;
97
+ white-space: pre-wrap;
98
+ padding: 1px;
99
+ }
100
+ }
101
+ li:first-child { padding-top: 4px }
102
+ li:last-child { padding-bottom: 4px }
103
+ }
104
+ .smelly {
105
+ border-left:7px solid #ee7b10
106
+ }
107
+ .smelly:nth-child(even), .smelly:nth-child(even) code {
108
+ background-color: #f7e9d0
109
+ }
110
+ .smelly:nth-child(odd), .smelly:nth-child(odd) code {
111
+ background-color: #f7e3c1
112
+ }
113
+ }
114
+
115
+ #footer {
116
+ font-size: 12px;
117
+ margin-top: 12px;
118
+ text-align: right;
119
+ }
120
+
121
+ abbr.timeago {
122
+ text-decoration: none;
123
+ border: none;
124
+ }
125
+
126
+ .green { color: #090 }
127
+ .red { color: #900 }
128
+ .yellow { color: #da0 }
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'code_poetry-html/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "code_poetry-html"
7
+ spec.version = CodePoetry::Formatter::HTMLFormatter::VERSION
8
+ spec.authors = ["Bastian Bartmann"]
9
+ spec.email = ["babartmann@gmail.com"]
10
+ spec.description = %q{Default HTML formatter for CodePoetry}
11
+ spec.summary = %q{Default HTML formatter for CodePoetry}
12
+ spec.homepage = "https://github.com/coding-chimp/code_poetry-html"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.3'
21
+ spec.add_development_dependency 'rake'
22
+ spec.add_development_dependency 'sprockets'
23
+ spec.add_development_dependency 'sass'
24
+ end
@@ -0,0 +1,7 @@
1
+ module CodePoetry
2
+ module Formatter
3
+ class HTMLFormatter
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,87 @@
1
+ require 'erb'
2
+ require 'cgi'
3
+ require 'fileutils'
4
+ require 'digest/sha1'
5
+ require 'time'
6
+
7
+ class CodePoetry::Formatter::HTMLFormatter
8
+ def format(stats)
9
+ Dir[File.join(File.dirname(__FILE__), '../public/*')].each do |path|
10
+ FileUtils.cp_r(path, asset_output_path)
11
+ end
12
+
13
+ File.open(File.join(output_path, "index.html"), "w+") do |file|
14
+ file.puts template('layout').result(binding)
15
+ end
16
+
17
+ puts "Code Poetry report generated to #{output_path}."
18
+ end
19
+
20
+ private
21
+
22
+ def template(name)
23
+ ERB.new(File.read(File.join(File.dirname(__FILE__), '../views/', "#{name}.erb")))
24
+ end
25
+
26
+ def output_path
27
+ CodePoetry.coverage_path
28
+ end
29
+
30
+ def asset_output_path
31
+ return @asset_output_path if defined? @asset_output_path and @asset_output_path
32
+ @asset_output_path = File.join(output_path, 'assets')
33
+ FileUtils.mkdir_p(@asset_output_path)
34
+ @asset_output_path
35
+ end
36
+
37
+ def formatted_source_file(stat)
38
+ template('source_file').result(binding)
39
+ end
40
+
41
+ def formatted_file_list(stats)
42
+ template('file_list').result(binding)
43
+ end
44
+
45
+ def class_complexity_css_class(complexity)
46
+ if complexity > 150
47
+ 'red'
48
+ elsif complexity > 100
49
+ 'yellow'
50
+ else
51
+ 'green'
52
+ end
53
+ end
54
+
55
+ def method_complexity_css_class(complexity)
56
+ if complexity > 40
57
+ 'red'
58
+ elsif complexity > 20
59
+ 'yellow'
60
+ else
61
+ 'green'
62
+ end
63
+ end
64
+
65
+ def id(stat)
66
+ Digest::SHA1.hexdigest(stat.file)
67
+ end
68
+
69
+ def timeago(time)
70
+ %Q(<abbr class="timeago" title="#{time.iso8601}">#{time.iso8601}</abbr>)
71
+ end
72
+
73
+ def link_to_source_file(stat)
74
+ %Q(<a href="##{id(stat)}" class="src_link" title="#{stat.name}">#{stat.name}</a>)
75
+ end
76
+
77
+ def line_status(stat, line_number)
78
+ method = stat.get_method_at_line(line_number)
79
+
80
+ unless method.nil?
81
+ 'smelly' if method[:complexity] > 20
82
+ end
83
+ end
84
+ end
85
+
86
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
87
+ require 'code_poetry-html/version'