inch 0.2.2 → 0.2.3
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.
- checksums.yaml +4 -4
- data/README.md +170 -56
- data/TODOS.md +0 -6
- data/config/defaults.rb +82 -0
- data/lib/inch/cli/command/base.rb +9 -0
- data/lib/inch/cli/command/base_list.rb +8 -8
- data/lib/inch/cli/command/base_object.rb +1 -1
- data/lib/inch/cli/command/list.rb +6 -1
- data/lib/inch/cli/command/options/base.rb +1 -1
- data/lib/inch/cli/command/options/suggest.rb +3 -1
- data/lib/inch/cli/command/output/list.rb +6 -6
- data/lib/inch/cli/command/output/show.rb +3 -3
- data/lib/inch/cli/command/output/stats.rb +52 -33
- data/lib/inch/cli/command/output/suggest.rb +7 -7
- data/lib/inch/cli/command/show.rb +5 -0
- data/lib/inch/cli/command/stats.rb +6 -1
- data/lib/inch/cli/command/suggest.rb +31 -12
- data/lib/inch/cli/command.rb +7 -14
- data/lib/inch/cli/command_parser.rb +2 -9
- data/lib/inch/cli/sparkline_helper.rb +13 -13
- data/lib/inch/cli/weighted_list.rb +85 -0
- data/lib/inch/cli.rb +2 -1
- data/lib/inch/code_object/nodoc_helper.rb +2 -0
- data/lib/inch/code_object/proxy/base.rb +36 -13
- data/lib/inch/code_object/proxy/method_object.rb +29 -0
- data/lib/inch/code_object/proxy/namespace_object.rb +6 -0
- data/lib/inch/config.rb +30 -37
- data/lib/inch/evaluation/base.rb +53 -1
- data/lib/inch/evaluation/constant_object.rb +8 -11
- data/lib/inch/evaluation/file.rb +1 -1
- data/lib/inch/evaluation/grade.rb +41 -0
- data/lib/inch/evaluation/grade_list.rb +32 -0
- data/lib/inch/evaluation/method_object.rb +10 -51
- data/lib/inch/evaluation/namespace_object.rb +8 -49
- data/lib/inch/evaluation/{criteria.rb → object_schema.rb} +12 -22
- data/lib/inch/evaluation/read_write_methods.rb +21 -0
- data/lib/inch/evaluation/role/method.rb +8 -0
- data/lib/inch/evaluation.rb +5 -2
- data/lib/inch/version.rb +1 -1
- data/lib/inch.rb +3 -1
- data/test/fixtures/simple/lib/broken.rb +15 -0
- data/test/fixtures/simple/lib/role_methods.rb +15 -0
- data/test/inch/cli/weighted_list_test.rb +55 -0
- data/test/inch/code_object/proxy/method_object_test.rb +42 -0
- data/test/integration/stats_options_test.rb +1 -1
- metadata +11 -5
- data/lib/inch/evaluation/score_range.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76a30cfdd0b22157bc5ef102e9f15cc96ec40147
|
4
|
+
data.tar.gz: 21d1a3ecb2c12294579f4406059a322e25fb15ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e60ae99656807e6731978c0b3bd29534ad313bcda1f8aabae5407dc062bb8aa3f1e589f3599b900f917973608047d1e6909bdfc52e872792d07e281b18cda16f
|
7
|
+
data.tar.gz: 5bd8e9097b64d1cb9e454ef47e052e1d96ca1d2f562d2c12c9ae470b26de4db456e6c901563f5c9b9267eb013a6976ee25c2f31f768577806e826d6bf6be3b79
|
data/README.md
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
# Inch [](https://travis-ci.org/rrrene/inch)
|
2
2
|
|
3
|
-
|
3
|
+
`inch` gives you hints where to improve your docs. One Inch at a time.
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
Take a look at the [project page with screenshots (live and in full color)](http://rrrene.github.io/inch/).
|
6
|
+
|
7
|
+
## What can it do?
|
8
|
+
|
9
|
+
`inch` is a little bit like Code Climate, but for your inline code documentation (and not a webservice).
|
10
|
+
|
11
|
+
It is a command-line utility that suggests places in your codebase where documentation can be improved.
|
12
|
+
|
13
|
+
If there are no inline-docs yet, `inch` can tell you where to start.
|
7
14
|
|
8
15
|
|
9
16
|
|
@@ -31,93 +38,126 @@ To run Inch, simply type
|
|
31
38
|
|
32
39
|
Given a `lib` directory with the following code inside:
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
41
|
+
```ruby
|
42
|
+
class Foo
|
43
|
+
# A complicated method
|
44
|
+
def complicated(o, i, *args, &block)
|
45
|
+
# ... snip ...
|
46
|
+
end
|
47
|
+
|
48
|
+
# An example of a method that takes a parameter (+param1+)
|
49
|
+
# and does nothing.
|
50
|
+
#
|
51
|
+
# Returns nil
|
52
|
+
def nothing(param1)
|
53
|
+
end
|
54
|
+
|
55
|
+
def filename
|
56
|
+
"#{self.class}_#{id}.foo"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
```
|
51
60
|
|
52
61
|
Inch will suggest that the docs could be improved:
|
53
62
|
|
54
63
|
# Properly documented, could be improved:
|
55
|
-
|
64
|
+
|
56
65
|
┃ B ↑ Foo#complicated
|
57
|
-
|
66
|
+
|
58
67
|
# Undocumented:
|
59
|
-
|
68
|
+
|
60
69
|
┃ U ↑ Foo
|
61
70
|
┃ U ↗ Foo#filename
|
62
|
-
|
71
|
+
|
63
72
|
You might want to look at these files:
|
64
|
-
|
73
|
+
|
65
74
|
┃ lib/foo.rb
|
66
|
-
|
75
|
+
|
67
76
|
Grade distribution (undocumented, C, B, A): █ ▁ ▄ ▄
|
68
|
-
|
77
|
+
|
69
78
|
Only considering priority objects: ↑ ↗ → (use `--help` for options).
|
70
79
|
|
71
|
-
Inch does not report coverage scores for code objects. It assigns grades and shows you the grade distribution rather then an overall grade.
|
72
80
|
|
73
|
-
|
81
|
+
## Philosophy
|
82
|
+
|
83
|
+
Inch was created to help people document their code, therefore it may be more important to look at **what it does not** do than at what it does.
|
84
|
+
|
85
|
+
* It does not aim for "fully documented" or "100% documentation coverage".
|
86
|
+
* It does not tell you to document all your code (neither does it tell you not to).
|
87
|
+
* It does not impose rules on how your documentation should look like.
|
88
|
+
* It does not require that, e.g."every method's documentation should be a single line under 80 characters not ending in a period" or that "every class and module should provide a code example of their usage".
|
89
|
+
|
90
|
+
Inch takes a more relaxed approach towards documentation measurement and tries to show you places where your codebase *could* use more documentation.
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
### The Grade System
|
95
|
+
|
96
|
+
Inch assigns grades to each class, module, constant or method in a codebase, based on how complete the docs are.
|
97
|
+
|
98
|
+
The grades are:
|
99
|
+
|
100
|
+
* `A` - Seems really good
|
101
|
+
* `B` - Properly documented, but could be improved
|
102
|
+
* `C` - Needs work
|
103
|
+
* `U` - Undocumented
|
104
|
+
|
105
|
+
Using this system has some advantages compared to plain coverage scores:
|
106
|
+
|
107
|
+
* You can get an `A` even if you "only" get 90 out of 100 possible points.
|
108
|
+
* Getting a `B` is basically good enough.
|
109
|
+
* Undocumented objects are assigned a special grade, instead of scoring 0%.
|
110
|
+
|
111
|
+
The last point might be the most important one: If objects are undocumented, there is nothing to evaluate. Therefore you can not simply give them a bad rating, because they might be left undocumented intentionally.
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
### Priorities ↑ ↓
|
116
|
+
|
117
|
+
Every class, module, constant and method in a codebase is assigned a priority which reflects how important Inch thinks it is to be documented.
|
74
118
|
|
119
|
+
This process follows some reasonable rules, like
|
75
120
|
|
76
|
-
|
121
|
+
* it is more important to document public methods than private ones
|
122
|
+
* it is more important to document methods with many parameters than methods without parameters
|
123
|
+
* it is not important to document objects marked as `:nodoc:`
|
77
124
|
|
78
|
-
|
79
|
-
get an `A` without employing every trick from a predetermined list of checks.
|
125
|
+
Priorities are displayed as arrows. Arrows pointing north mark high priority objects, arrows pointing south mark low priority objects.
|
80
126
|
|
81
|
-
|
82
|
-
|
83
|
-
|
127
|
+
|
128
|
+
|
129
|
+
### No overall scores or grades
|
130
|
+
|
131
|
+
Inch does not give you a grade for your whole codebase.
|
132
|
+
|
133
|
+
"Why?" you might ask. Look at the example below:
|
84
134
|
|
85
135
|
Grade distribution (undocumented, C, B, A): ▄ ▁ ▄ █
|
86
136
|
|
87
|
-
In this example
|
88
|
-
the vast majority of code is rated A or B.
|
137
|
+
In this example there is a part of code that is still undocumented, but
|
138
|
+
the vast majority of code is rated A or B.
|
139
|
+
|
140
|
+
This tells you three things:
|
89
141
|
|
90
142
|
* There is a significant amount of documentation present.
|
91
143
|
* The present documentation seems good.
|
92
144
|
* There are still undocumented methods.
|
93
145
|
|
94
146
|
Inch does not really tell you what to do from here. It suggests objects and
|
95
|
-
files that could be improved to get a better rating, but that is all.
|
147
|
+
files that could be improved to get a better rating, but that is all. This
|
148
|
+
way, it is perfectly reasonable to leave parts of your codebase
|
149
|
+
undocumented.
|
96
150
|
|
97
|
-
|
98
|
-
undocumented. Instead of reporting
|
151
|
+
Instead of reporting
|
99
152
|
|
100
153
|
coverage: 67.1% 46 ouf of 140 checks failed
|
101
154
|
|
102
155
|
and leaving you with a bad feeling, Inch tells you there are still
|
103
156
|
undocumented objects without judging.
|
104
157
|
|
105
|
-
|
106
|
-
not to. It does not tell you "a method's documentation should be a single line
|
107
|
-
under 80 characters not ending in a period".
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
### Limitations
|
112
|
-
|
113
|
-
How you document your code is up to you and Inch can't actually tell you how good your docs are.
|
114
|
-
|
115
|
-
It can't tell if your code examples work or if you described parameters
|
116
|
-
correctly or if you have just added `# TODO: write docs` to each and every
|
117
|
-
method.
|
158
|
+
This provides a lot more insight than an overall grade could, because an overall grade for the above example would either be an `A` (if the evaluation ignores undocumented objects) or a weak `C` (if the evaluation includes them).
|
118
159
|
|
119
|
-
|
120
|
-
documentation.
|
160
|
+
The grade distribution does a much better job of painting the bigger picture.
|
121
161
|
|
122
162
|
|
123
163
|
|
@@ -128,8 +168,67 @@ Inch is build to parse [YARD](http://yardoc.org/),
|
|
128
168
|
style documentation comments, but works reasonably well with unstructured
|
129
169
|
comments.
|
130
170
|
|
131
|
-
|
171
|
+
These inline-docs below all score an `A` despite being written in different styles:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
# Detects the size of the blob.
|
175
|
+
#
|
176
|
+
# @example
|
177
|
+
# blob_size(filename, blob) # => some value
|
178
|
+
#
|
179
|
+
# @param filename [String] the filename
|
180
|
+
# @param blob [String] the blob data
|
181
|
+
# @param mode [String, nil] optional String mode
|
182
|
+
# @return [Fixnum,nil]
|
183
|
+
def blob_size(filename, blob, mode = nil)
|
184
|
+
```
|
185
|
+
|
186
|
+
```ruby
|
187
|
+
# Detects the size of the blob.
|
188
|
+
#
|
189
|
+
# blob_size(filename, blob) # => some value
|
190
|
+
#
|
191
|
+
# Params:
|
192
|
+
# +filename+:: String filename
|
193
|
+
# +blob+:: String blob data
|
194
|
+
# +mode+:: Optional String mode (defaults to nil)
|
195
|
+
def blob_size(filename, blob, mode = nil)
|
196
|
+
```
|
197
|
+
|
198
|
+
```ruby
|
199
|
+
# Public: Detects the size of the blob.
|
200
|
+
#
|
201
|
+
# filename - String filename
|
202
|
+
# blob - String blob data
|
203
|
+
# mode - Optional String mode (defaults to nil)
|
204
|
+
#
|
205
|
+
# Examples
|
206
|
+
#
|
207
|
+
# blob_size(filename, blob)
|
208
|
+
# # => some value
|
209
|
+
#
|
210
|
+
# Returns Fixnum or nil.
|
211
|
+
def blob_size(filename, blob, mode = nil)
|
212
|
+
```
|
213
|
+
|
214
|
+
|
215
|
+
But you don't have to adhere to any specific syntax. This gets an `A` as well:
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
# Returns the size of a +blob+ for a given +filename+.
|
219
|
+
#
|
220
|
+
# blob_size(filename, blob)
|
221
|
+
# # => some value
|
222
|
+
#
|
223
|
+
def blob_size(filename, blob, mode = nil)
|
224
|
+
```
|
225
|
+
|
226
|
+
Inch *let's you write your documentation the way you want*.
|
227
|
+
|
228
|
+
|
229
|
+
## Subcommands
|
132
230
|
|
231
|
+
It comes with four sub-commands: `suggest`, `stats`, `show`, and `list`
|
133
232
|
|
134
233
|
|
135
234
|
### inch suggest
|
@@ -278,6 +377,21 @@ This creates a rake task named `inch`. Change the name by passing it to the cons
|
|
278
377
|
|
279
378
|
|
280
379
|
|
380
|
+
|
381
|
+
|
382
|
+
## Limitations
|
383
|
+
|
384
|
+
How you document your code is up to you and Inch can't actually tell you how good your docs are.
|
385
|
+
|
386
|
+
It can't tell if your code examples work or if you described parameters
|
387
|
+
correctly or if you have just added `# TODO: write docs` to each and every
|
388
|
+
method.
|
389
|
+
|
390
|
+
It is just a tool, that you can use to find parts in your codebase that are
|
391
|
+
lacking documentation.
|
392
|
+
|
393
|
+
|
394
|
+
|
281
395
|
## How is this different from ...?
|
282
396
|
|
283
397
|
### Documentation coverage
|
data/TODOS.md
CHANGED
@@ -9,10 +9,4 @@
|
|
9
9
|
(realized via the @overload tag in YARD)
|
10
10
|
|
11
11
|
* Think about implicit cases in terms of evaluation:
|
12
|
-
* constructors and ?-methods are automatically assigned a @return tag
|
13
12
|
* attr_* methods are automatically assigned a docstring and @param tag
|
14
|
-
|
15
|
-
* Think about limiting the number of `B`-objects in `inch suggest`
|
16
|
-
`inch suggest` shows too many `B`s even though there are still undocumented
|
17
|
-
objects in the codebase. this becomes a problem, when one thinks of `B` as
|
18
|
-
"good enough", which Inch itself suggests.
|
data/config/defaults.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
Inch::Config.run do
|
2
|
+
# development!
|
3
|
+
|
4
|
+
evaluation do
|
5
|
+
grade(:A) do
|
6
|
+
scores 80..100
|
7
|
+
label "Seems really good"
|
8
|
+
color :green
|
9
|
+
end
|
10
|
+
|
11
|
+
grade(:B) do
|
12
|
+
scores 50...80
|
13
|
+
label "Proper documentation present"
|
14
|
+
color :yellow
|
15
|
+
end
|
16
|
+
|
17
|
+
grade(:C) do
|
18
|
+
scores 1...50
|
19
|
+
label "Needs work"
|
20
|
+
color :red
|
21
|
+
end
|
22
|
+
|
23
|
+
grade(:U) do
|
24
|
+
scores 0..0
|
25
|
+
label "Undocumented"
|
26
|
+
color :color141
|
27
|
+
bg_color :color105
|
28
|
+
end
|
29
|
+
|
30
|
+
schema(:ConstantObject) do
|
31
|
+
docstring 1.0
|
32
|
+
|
33
|
+
# optional:
|
34
|
+
unconsidered_tag 0.2
|
35
|
+
end
|
36
|
+
|
37
|
+
schema(:ClassObject) do
|
38
|
+
docstring 1.0
|
39
|
+
|
40
|
+
# optional:
|
41
|
+
code_example_single 0.1
|
42
|
+
code_example_multi 0.2
|
43
|
+
unconsidered_tag 0.2
|
44
|
+
end
|
45
|
+
|
46
|
+
schema(:ModuleObject) do
|
47
|
+
docstring 1.0
|
48
|
+
|
49
|
+
# optional:
|
50
|
+
code_example_single 0.1
|
51
|
+
code_example_multi 0.2
|
52
|
+
unconsidered_tag 0.2
|
53
|
+
end
|
54
|
+
|
55
|
+
schema(:MethodObject) do
|
56
|
+
docstring 0.5
|
57
|
+
parameters 0.4
|
58
|
+
return_type 0.1
|
59
|
+
return_description 0.3
|
60
|
+
|
61
|
+
if object.constructor? || object.questioning_name?
|
62
|
+
parameters parameters + return_type
|
63
|
+
return_type 0.0
|
64
|
+
end
|
65
|
+
|
66
|
+
if object.constructor?
|
67
|
+
return_description 0.0
|
68
|
+
end
|
69
|
+
|
70
|
+
if !object.has_parameters? || object.setter?
|
71
|
+
return_description docstring + parameters
|
72
|
+
docstring docstring + parameters
|
73
|
+
parameters 0.0
|
74
|
+
end
|
75
|
+
|
76
|
+
# optional:
|
77
|
+
code_example_single 0.1
|
78
|
+
code_example_multi 0.25
|
79
|
+
unconsidered_tag 0.2
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -50,6 +50,15 @@ module Inch
|
|
50
50
|
command
|
51
51
|
end
|
52
52
|
|
53
|
+
# Registers the current Command in the CommandParser
|
54
|
+
#
|
55
|
+
# @param name [Symbol] name of the Command
|
56
|
+
# @return [void]
|
57
|
+
def self.register_command_as(name, default = false)
|
58
|
+
CLI::CommandParser.default_command = name if default
|
59
|
+
CLI::CommandParser.commands[name] = self
|
60
|
+
end
|
61
|
+
|
53
62
|
def initialize
|
54
63
|
options_class = "Command::Options::#{self.class.to_s.split('::').last}"
|
55
64
|
@options = eval(options_class).new
|
@@ -14,10 +14,10 @@ module Inch
|
|
14
14
|
|
15
15
|
def initialize
|
16
16
|
super
|
17
|
-
@
|
17
|
+
@grade_lists = Evaluation.new_grade_lists
|
18
18
|
end
|
19
19
|
|
20
|
-
# Prepares the list of objects and
|
20
|
+
# Prepares the list of objects and grade_lists, parsing arguments and
|
21
21
|
# running the source parser.
|
22
22
|
#
|
23
23
|
# @param *args [Array<String>] the list of arguments.
|
@@ -27,17 +27,17 @@ module Inch
|
|
27
27
|
@options.verify
|
28
28
|
run_source_parser(@options.paths, @options.excluded)
|
29
29
|
filter_objects
|
30
|
-
|
30
|
+
assign_objects_to_grade_lists
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
34
34
|
|
35
|
-
# Assigns the objects returned by {#objects} to the
|
36
|
-
#
|
35
|
+
# Assigns the objects returned by {#objects} to the grade_lists
|
36
|
+
# based on their score
|
37
37
|
#
|
38
|
-
def
|
39
|
-
@
|
40
|
-
list = objects.select { |o| range.
|
38
|
+
def assign_objects_to_grade_lists
|
39
|
+
@grade_lists.each do |range|
|
40
|
+
list = objects.select { |o| range.scores.include?(o.score) }
|
41
41
|
range.objects = sort_by_priority(list)
|
42
42
|
end
|
43
43
|
end
|
@@ -1,7 +1,12 @@
|
|
1
|
+
require_relative 'options/list'
|
2
|
+
require_relative 'output/list'
|
3
|
+
|
1
4
|
module Inch
|
2
5
|
module CLI
|
3
6
|
module Command
|
4
7
|
class List < BaseList
|
8
|
+
register_command_as :list
|
9
|
+
|
5
10
|
def description
|
6
11
|
'Lists all objects with their results'
|
7
12
|
end
|
@@ -17,7 +22,7 @@ module Inch
|
|
17
22
|
# @return [void]
|
18
23
|
def run(*args)
|
19
24
|
prepare_list(*args)
|
20
|
-
Output::List.new(@options, objects, @
|
25
|
+
Output::List.new(@options, objects, @grade_lists)
|
21
26
|
end
|
22
27
|
end
|
23
28
|
end
|
@@ -101,7 +101,7 @@ module Inch
|
|
101
101
|
#
|
102
102
|
# @return [String]
|
103
103
|
def description_hint_grades
|
104
|
-
grades = Evaluation.
|
104
|
+
grades = Evaluation::Grade.all
|
105
105
|
"School grades (#{grades.join(', ')}) are assigned and " +
|
106
106
|
"displayed with each object."
|
107
107
|
end
|
@@ -8,6 +8,7 @@ module Inch
|
|
8
8
|
|
9
9
|
attribute :proper_grades, [:A, :B]
|
10
10
|
attribute :grades_to_display, [:B, :C, :U]
|
11
|
+
attribute :grade_weights, [0.2, 0.4, 0.4]
|
11
12
|
attribute :object_min_priority, 0
|
12
13
|
attribute :object_max_score, ::Inch::Evaluation::Base::MAX_SCORE
|
13
14
|
|
@@ -49,7 +50,8 @@ module Inch
|
|
49
50
|
@object_max_score = object_max_score - 1
|
50
51
|
# only A-listers are regarded as 'proper'
|
51
52
|
@proper_grades = [:A]
|
52
|
-
@grades_to_display = [:A, :B, :C]
|
53
|
+
@grades_to_display = [:A, :B, :C, :U]
|
54
|
+
@grade_weights = [0.3, 0.3, 0.2, 0.2]
|
53
55
|
@object_count = 30
|
54
56
|
@pedantic = true
|
55
57
|
end
|
@@ -7,10 +7,10 @@ module Inch
|
|
7
7
|
|
8
8
|
PER_RANGE = 10
|
9
9
|
|
10
|
-
def initialize(options, objects,
|
10
|
+
def initialize(options, objects, grade_lists)
|
11
11
|
@options = options
|
12
12
|
@objects = objects
|
13
|
-
@
|
13
|
+
@grade_lists = grade_lists
|
14
14
|
@omitted = 0
|
15
15
|
|
16
16
|
display_list
|
@@ -19,13 +19,13 @@ module Inch
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def display_list
|
22
|
-
@
|
22
|
+
@grade_lists.each do |range|
|
23
23
|
if range.objects.empty?
|
24
24
|
# pass
|
25
25
|
else
|
26
26
|
trace
|
27
|
-
trace_header(range.
|
28
|
-
|
27
|
+
trace_header(range.label, range.color, range.bg_color)
|
28
|
+
display_grade_list(range)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -36,7 +36,7 @@ module Inch
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def display_grade_list(range)
|
40
40
|
display_count = @options.show_all? ? range.objects.size : PER_RANGE
|
41
41
|
list = range.objects[0...display_count]
|
42
42
|
list.each do |o|
|
@@ -68,9 +68,9 @@ module Inch
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def grade(score)
|
71
|
-
|
72
|
-
r =
|
73
|
-
"#{r.grade} - #{r.
|
71
|
+
grade_lists ||= Evaluation.new_grade_lists
|
72
|
+
r = grade_lists.detect { |r| r.scores.include?(score) }
|
73
|
+
"#{r.grade} - #{r.label}".color(r.color)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|