trackler 2.1.0.36 → 2.1.0.37
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/CONTRIBUTING.md +1 -1
- data/lib/trackler/version.rb +1 -1
- data/lib/trackler.rb +0 -5
- data/tracks/c/config.json +0 -5
- data/tracks/clojure/config.json +177 -59
- data/tracks/clojure/exercises/kindergarten-garden/src/example.clj +10 -8
- data/tracks/elisp/config.json +60 -24
- data/tracks/elixir/exercises/poker/poker_test.exs +1 -1
- data/tracks/fortran/config.json +6 -0
- data/tracks/fortran/exercises/pangram/example.f90 +33 -0
- data/tracks/fortran/exercises/pangram/pangram.fun +42 -0
- data/tracks/go/config.json +10 -4
- data/tracks/go/exercises/acronym/acronym.go +1 -1
- data/tracks/groovy/{SETUP.md → docs/EXERCISE_README_INSERT.md} +0 -0
- data/tracks/haskell/config.json +1 -1
- data/tracks/java/bin/journey-test.sh +3 -0
- data/tracks/java/config.json +14 -14
- data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +20 -20
- data/tracks/java/exercises/binary-search-tree/src/test/java/BSTTest.java +32 -32
- data/tracks/java/exercises/build.gradle +57 -31
- data/tracks/java/exercises/hello-world/GETTING_STARTED.md +4 -0
- data/tracks/java/exercises/pythagorean-triplet/src/test/java/PythagoreanTripletTest.java +8 -8
- data/tracks/java/exercises/scrabble-score/src/example/java/Scrabble.java +1 -1
- data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +10 -5
- data/tracks/java/exercises/series/src/test/java/SeriesTest.java +20 -20
- data/tracks/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/tracks/java/gradle/wrapper/gradle-wrapper.properties +2 -2
- data/tracks/julia/runtests.jl +1 -6
- data/tracks/kotlin/.gitignore +0 -5
- data/tracks/kotlin/.travis.yml +21 -1
- data/tracks/kotlin/bin/build-jq.sh +11 -0
- data/tracks/kotlin/bin/fetch-configlet +1 -1
- data/tracks/kotlin/bin/journey-test.sh +34 -14
- data/tracks/kotlin/bin/unit-tests.sh +2 -2
- data/tracks/kotlin/config.json +230 -160
- data/tracks/kotlin/exercises/build.gradle +3 -0
- data/tracks/kotlin/exercises/collatz-conjecture/src/test/kotlin/CollatzCalculatorTest.kt +7 -1
- data/tracks/kotlin/exercises/gradle.properties +1 -0
- data/tracks/kotlin/exercises/list-ops/HINTS.md +5 -0
- data/tracks/kotlin/exercises/list-ops/build.gradle +28 -0
- data/tracks/kotlin/exercises/list-ops/src/example/kotlin/CustomListExtensions.kt +43 -0
- data/tracks/kotlin/exercises/list-ops/src/main/kotlin/.keep +0 -0
- data/tracks/kotlin/exercises/list-ops/src/test/kotlin/ListExtensionsTest.kt +157 -0
- data/tracks/kotlin/exercises/settings.gradle +13 -12
- data/tracks/kotlin/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/tracks/kotlin/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/tracks/kotlin/gradlew +172 -0
- data/tracks/kotlin/gradlew.bat +84 -0
- data/tracks/lfe/config.json +90 -30
- data/tracks/ocaml/.travis-ci.sh +1 -1
- data/tracks/ocaml/.travis.yml +1 -1
- data/tracks/ocaml/README.md +1 -1
- data/tracks/perl5/.travis.yml +3 -2
- data/tracks/perl6/bin/exercise-gen.pl6 +6 -3
- data/tracks/racket/config.json +63 -21
- data/tracks/ruby/exercises/bob/bob_test.rb +0 -1
- data/tracks/ruby/lib/generator/command_line.rb +7 -3
- data/tracks/ruby/lib/generator/exercise.rb +19 -0
- data/tracks/ruby/lib/generator/files/generator_cases.rb +0 -4
- data/tracks/ruby/lib/generator/files/metadata_files.rb +1 -1
- data/tracks/ruby/lib/generator/files/track_files.rb +3 -3
- data/tracks/ruby/lib/generator/implementation.rb +7 -11
- data/tracks/ruby/lib/generator/template_values.rb +5 -9
- data/tracks/ruby/lib/generator/underscore.rb +4 -0
- data/tracks/ruby/lib/generator.rb +2 -2
- data/tracks/ruby/test/fixtures/xruby/lib/generator/test_template.erb +3 -3
- data/tracks/ruby/test/generator/exercise_test.rb +20 -0
- data/tracks/ruby/test/generator/files/generate_cases_test.rb +0 -4
- data/tracks/ruby/test/generator/files/metadata_files_test.rb +2 -2
- data/tracks/ruby/test/generator/files/track_files_test.rb +4 -5
- data/tracks/ruby/test/generator/implementation_test.rb +12 -20
- data/tracks/ruby/test/generator/template_values_test.rb +2 -33
- data/tracks/ruby/test/generator/underscore_test.rb +4 -0
- data/tracks/ruby/test/generator_test.rb +2 -2
- data/tracks/rust/exercises/gigasecond/Cargo.lock +58 -13
- data/tracks/rust/exercises/gigasecond/Cargo.toml +1 -1
- data/tracks/scala/exercises/acronym/src/test/scala/AcronymTest.scala +32 -12
- data/tracks/scala/exercises/hamming/example.scala +1 -1
- data/tracks/scala/exercises/hamming/src/test/scala/HammingTest.scala +55 -19
- data/tracks/scala/exercises/phone-number/example.scala +10 -20
- data/tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala +28 -81
- data/tracks/scala/testgen/src/main/scala/AcronymTestGenerator.scala +16 -0
- data/tracks/scala/testgen/src/main/scala/HammingTestGenerator.scala +34 -0
- data/tracks/scala/testgen/src/main/scala/PhoneNumberTestGenerator.scala +34 -0
- data/tracks/scheme/config.json +43 -16
- metadata +21 -5
- data/lib/trackler/problem.rb +0 -7
- data/lib/trackler/problems.rb +0 -7
data/tracks/lfe/config.json
CHANGED
@@ -20,152 +20,212 @@
|
|
20
20
|
{
|
21
21
|
"difficulty": 1,
|
22
22
|
"slug": "leap",
|
23
|
-
"topics": [
|
23
|
+
"topics": [
|
24
|
+
|
25
|
+
]
|
24
26
|
},
|
25
27
|
{
|
26
28
|
"difficulty": 1,
|
27
29
|
"slug": "rna-transcription",
|
28
|
-
"topics": [
|
30
|
+
"topics": [
|
31
|
+
|
32
|
+
]
|
29
33
|
},
|
30
34
|
{
|
31
35
|
"difficulty": 1,
|
32
36
|
"slug": "bob",
|
33
|
-
"topics": [
|
37
|
+
"topics": [
|
38
|
+
|
39
|
+
]
|
34
40
|
},
|
35
41
|
{
|
36
42
|
"difficulty": 1,
|
37
43
|
"slug": "sum-of-multiples",
|
38
|
-
"topics": [
|
44
|
+
"topics": [
|
45
|
+
|
46
|
+
]
|
39
47
|
},
|
40
48
|
{
|
41
49
|
"difficulty": 1,
|
42
50
|
"slug": "strain",
|
43
|
-
"topics": [
|
51
|
+
"topics": [
|
52
|
+
|
53
|
+
]
|
44
54
|
},
|
45
55
|
{
|
46
56
|
"difficulty": 1,
|
47
57
|
"slug": "hamming",
|
48
|
-
"topics": [
|
58
|
+
"topics": [
|
59
|
+
|
60
|
+
]
|
49
61
|
},
|
50
62
|
{
|
51
63
|
"difficulty": 1,
|
52
64
|
"slug": "space-age",
|
53
|
-
"topics": [
|
65
|
+
"topics": [
|
66
|
+
|
67
|
+
]
|
54
68
|
},
|
55
69
|
{
|
56
70
|
"difficulty": 1,
|
57
71
|
"slug": "grains",
|
58
|
-
"topics": [
|
72
|
+
"topics": [
|
73
|
+
|
74
|
+
]
|
59
75
|
},
|
60
76
|
{
|
61
77
|
"difficulty": 1,
|
62
78
|
"slug": "anagram",
|
63
|
-
"topics": [
|
79
|
+
"topics": [
|
80
|
+
|
81
|
+
]
|
64
82
|
},
|
65
83
|
{
|
66
84
|
"difficulty": 1,
|
67
85
|
"slug": "nucleotide-count",
|
68
|
-
"topics": [
|
86
|
+
"topics": [
|
87
|
+
|
88
|
+
]
|
69
89
|
},
|
70
90
|
{
|
71
91
|
"difficulty": 1,
|
72
92
|
"slug": "atbash-cipher",
|
73
|
-
"topics": [
|
93
|
+
"topics": [
|
94
|
+
|
95
|
+
]
|
74
96
|
},
|
75
97
|
{
|
76
98
|
"difficulty": 1,
|
77
99
|
"slug": "phone-number",
|
78
|
-
"topics": [
|
100
|
+
"topics": [
|
101
|
+
|
102
|
+
]
|
79
103
|
},
|
80
104
|
{
|
81
105
|
"difficulty": 1,
|
82
106
|
"slug": "robot-simulator",
|
83
|
-
"topics": [
|
107
|
+
"topics": [
|
108
|
+
|
109
|
+
]
|
84
110
|
},
|
85
111
|
{
|
86
112
|
"difficulty": 1,
|
87
113
|
"slug": "grade-school",
|
88
|
-
"topics": [
|
114
|
+
"topics": [
|
115
|
+
|
116
|
+
]
|
89
117
|
},
|
90
118
|
{
|
91
119
|
"difficulty": 1,
|
92
120
|
"slug": "binary",
|
93
|
-
"topics": [
|
121
|
+
"topics": [
|
122
|
+
|
123
|
+
]
|
94
124
|
},
|
95
125
|
{
|
96
126
|
"difficulty": 1,
|
97
127
|
"slug": "word-count",
|
98
|
-
"topics": [
|
128
|
+
"topics": [
|
129
|
+
|
130
|
+
]
|
99
131
|
},
|
100
132
|
{
|
101
133
|
"difficulty": 1,
|
102
134
|
"slug": "circular-buffer",
|
103
|
-
"topics": [
|
135
|
+
"topics": [
|
136
|
+
|
137
|
+
]
|
104
138
|
},
|
105
139
|
{
|
106
140
|
"difficulty": 1,
|
107
141
|
"slug": "etl",
|
108
|
-
"topics": [
|
142
|
+
"topics": [
|
143
|
+
|
144
|
+
]
|
109
145
|
},
|
110
146
|
{
|
111
147
|
"difficulty": 1,
|
112
148
|
"slug": "clock",
|
113
|
-
"topics": [
|
149
|
+
"topics": [
|
150
|
+
|
151
|
+
]
|
114
152
|
},
|
115
153
|
{
|
116
154
|
"difficulty": 1,
|
117
155
|
"slug": "gigasecond",
|
118
|
-
"topics": [
|
156
|
+
"topics": [
|
157
|
+
|
158
|
+
]
|
119
159
|
},
|
120
160
|
{
|
121
161
|
"difficulty": 1,
|
122
162
|
"slug": "beer-song",
|
123
|
-
"topics": [
|
163
|
+
"topics": [
|
164
|
+
|
165
|
+
]
|
124
166
|
},
|
125
167
|
{
|
126
168
|
"difficulty": 1,
|
127
169
|
"slug": "difference-of-squares",
|
128
|
-
"topics": [
|
170
|
+
"topics": [
|
171
|
+
|
172
|
+
]
|
129
173
|
},
|
130
174
|
{
|
131
175
|
"difficulty": 1,
|
132
176
|
"slug": "allergies",
|
133
|
-
"topics": [
|
177
|
+
"topics": [
|
178
|
+
|
179
|
+
]
|
134
180
|
},
|
135
181
|
{
|
136
182
|
"difficulty": 1,
|
137
183
|
"slug": "bank-account",
|
138
|
-
"topics": [
|
184
|
+
"topics": [
|
185
|
+
|
186
|
+
]
|
139
187
|
},
|
140
188
|
{
|
141
189
|
"difficulty": 1,
|
142
190
|
"slug": "luhn",
|
143
|
-
"topics": [
|
191
|
+
"topics": [
|
192
|
+
|
193
|
+
]
|
144
194
|
},
|
145
195
|
{
|
146
196
|
"difficulty": 1,
|
147
197
|
"slug": "series",
|
148
|
-
"topics": [
|
198
|
+
"topics": [
|
199
|
+
|
200
|
+
]
|
149
201
|
},
|
150
202
|
{
|
151
203
|
"difficulty": 1,
|
152
204
|
"slug": "trinary",
|
153
|
-
"topics": [
|
205
|
+
"topics": [
|
206
|
+
|
207
|
+
]
|
154
208
|
},
|
155
209
|
{
|
156
210
|
"difficulty": 1,
|
157
211
|
"slug": "largest-series-product",
|
158
|
-
"topics": [
|
212
|
+
"topics": [
|
213
|
+
|
214
|
+
]
|
159
215
|
},
|
160
216
|
{
|
161
217
|
"difficulty": 1,
|
162
218
|
"slug": "meetup",
|
163
|
-
"topics": [
|
219
|
+
"topics": [
|
220
|
+
|
221
|
+
]
|
164
222
|
},
|
165
223
|
{
|
166
224
|
"difficulty": 1,
|
167
225
|
"slug": "parallel-letter-frequency",
|
168
|
-
"topics": [
|
226
|
+
"topics": [
|
227
|
+
|
228
|
+
]
|
169
229
|
}
|
170
230
|
]
|
171
231
|
}
|
data/tracks/ocaml/.travis-ci.sh
CHANGED
data/tracks/ocaml/.travis.yml
CHANGED
data/tracks/ocaml/README.md
CHANGED
@@ -11,7 +11,7 @@ notes contain a few details specific to Ocaml.
|
|
11
11
|
|
12
12
|
## Prerequisites
|
13
13
|
|
14
|
-
The OCaml track assumes installation of OCaml version 4.04.
|
14
|
+
The OCaml track assumes installation of OCaml version 4.04.1, and installation of Core, OUnit, and React (for the Hangman exercise).
|
15
15
|
Assuming you have opam, these can be installed with
|
16
16
|
```bash
|
17
17
|
opam install core ounit react
|
data/tracks/perl5/.travis.yml
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: perl
|
3
3
|
perl:
|
4
|
+
- '5.26'
|
5
|
+
- '5.24'
|
4
6
|
- '5.22'
|
5
7
|
- '5.20'
|
6
8
|
- '5.18'
|
7
9
|
- '5.16'
|
8
10
|
- '5.14'
|
9
11
|
- '5.12'
|
10
|
-
- '5.10'
|
11
12
|
before_script:
|
12
13
|
- bin/fetch-configlet
|
13
14
|
script:
|
14
15
|
- bin/configlet .
|
15
|
-
-
|
16
|
+
- prove -r exercises/
|
@@ -23,9 +23,12 @@ if @*ARGS {
|
|
23
23
|
}
|
24
24
|
|
25
25
|
for @exercises -> $exercise {
|
26
|
-
say "Generating $exercise...";
|
27
26
|
my $exercise-dir = $base-dir.child("exercises/$exercise");
|
28
|
-
|
27
|
+
if (my $yaml = $exercise-dir.child('example.yaml')) !~~ :f {
|
28
|
+
say "No example.yaml found for $exercise.";
|
29
|
+
next;
|
30
|
+
};
|
31
|
+
print "Generating $exercise... ";
|
29
32
|
|
30
33
|
my %data = load-yaml $yaml.slurp;
|
31
34
|
$_=.chomp when Str for @(%data.values);
|
@@ -41,7 +44,7 @@ for @exercises -> $exercise {
|
|
41
44
|
%data<module_file> = %data<stub>;
|
42
45
|
create-file "{%data<exercise>}.pm6", 'module';
|
43
46
|
|
44
|
-
say
|
47
|
+
say 'Generated.';
|
45
48
|
|
46
49
|
sub create-file ($filename, $template) {
|
47
50
|
spurt (my $file = $exercise-dir.child($filename)),
|
data/tracks/racket/config.json
CHANGED
@@ -15,107 +15,149 @@
|
|
15
15
|
{
|
16
16
|
"difficulty": 1,
|
17
17
|
"slug": "grains",
|
18
|
-
"topics": [
|
18
|
+
"topics": [
|
19
|
+
|
20
|
+
]
|
19
21
|
},
|
20
22
|
{
|
21
23
|
"difficulty": 1,
|
22
24
|
"slug": "leap",
|
23
|
-
"topics": [
|
25
|
+
"topics": [
|
26
|
+
|
27
|
+
]
|
24
28
|
},
|
25
29
|
{
|
26
30
|
"difficulty": 1,
|
27
31
|
"slug": "difference-of-squares",
|
28
|
-
"topics": [
|
32
|
+
"topics": [
|
33
|
+
|
34
|
+
]
|
29
35
|
},
|
30
36
|
{
|
31
37
|
"difficulty": 1,
|
32
38
|
"slug": "perfect-numbers",
|
33
|
-
"topics": [
|
39
|
+
"topics": [
|
40
|
+
|
41
|
+
]
|
34
42
|
},
|
35
43
|
{
|
36
44
|
"difficulty": 1,
|
37
45
|
"slug": "gigasecond",
|
38
|
-
"topics": [
|
46
|
+
"topics": [
|
47
|
+
|
48
|
+
]
|
39
49
|
},
|
40
50
|
{
|
41
51
|
"difficulty": 1,
|
42
52
|
"slug": "bob",
|
43
|
-
"topics": [
|
53
|
+
"topics": [
|
54
|
+
|
55
|
+
]
|
44
56
|
},
|
45
57
|
{
|
46
58
|
"difficulty": 1,
|
47
59
|
"slug": "hamming",
|
48
|
-
"topics": [
|
60
|
+
"topics": [
|
61
|
+
|
62
|
+
]
|
49
63
|
},
|
50
64
|
{
|
51
65
|
"difficulty": 1,
|
52
66
|
"slug": "scrabble-score",
|
53
|
-
"topics": [
|
67
|
+
"topics": [
|
68
|
+
|
69
|
+
]
|
54
70
|
},
|
55
71
|
{
|
56
72
|
"difficulty": 1,
|
57
73
|
"slug": "roman-numerals",
|
58
|
-
"topics": [
|
74
|
+
"topics": [
|
75
|
+
|
76
|
+
]
|
59
77
|
},
|
60
78
|
{
|
61
79
|
"difficulty": 1,
|
62
80
|
"slug": "anagram",
|
63
|
-
"topics": [
|
81
|
+
"topics": [
|
82
|
+
|
83
|
+
]
|
64
84
|
},
|
65
85
|
{
|
66
86
|
"difficulty": 1,
|
67
87
|
"slug": "rna-transcription",
|
68
|
-
"topics": [
|
88
|
+
"topics": [
|
89
|
+
|
90
|
+
]
|
69
91
|
},
|
70
92
|
{
|
71
93
|
"difficulty": 1,
|
72
94
|
"slug": "etl",
|
73
|
-
"topics": [
|
95
|
+
"topics": [
|
96
|
+
|
97
|
+
]
|
74
98
|
},
|
75
99
|
{
|
76
100
|
"difficulty": 1,
|
77
101
|
"slug": "word-count",
|
78
|
-
"topics": [
|
102
|
+
"topics": [
|
103
|
+
|
104
|
+
]
|
79
105
|
},
|
80
106
|
{
|
81
107
|
"difficulty": 1,
|
82
108
|
"slug": "phone-number",
|
83
|
-
"topics": [
|
109
|
+
"topics": [
|
110
|
+
|
111
|
+
]
|
84
112
|
},
|
85
113
|
{
|
86
114
|
"difficulty": 1,
|
87
115
|
"slug": "nucleotide-count",
|
88
|
-
"topics": [
|
116
|
+
"topics": [
|
117
|
+
|
118
|
+
]
|
89
119
|
},
|
90
120
|
{
|
91
121
|
"difficulty": 1,
|
92
122
|
"slug": "raindrops",
|
93
|
-
"topics": [
|
123
|
+
"topics": [
|
124
|
+
|
125
|
+
]
|
94
126
|
},
|
95
127
|
{
|
96
128
|
"difficulty": 1,
|
97
129
|
"slug": "grep",
|
98
|
-
"topics": [
|
130
|
+
"topics": [
|
131
|
+
|
132
|
+
]
|
99
133
|
},
|
100
134
|
{
|
101
135
|
"difficulty": 1,
|
102
136
|
"slug": "say",
|
103
|
-
"topics": [
|
137
|
+
"topics": [
|
138
|
+
|
139
|
+
]
|
104
140
|
},
|
105
141
|
{
|
106
142
|
"difficulty": 1,
|
107
143
|
"slug": "allergies",
|
108
|
-
"topics": [
|
144
|
+
"topics": [
|
145
|
+
|
146
|
+
]
|
109
147
|
},
|
110
148
|
{
|
111
149
|
"difficulty": 1,
|
112
150
|
"slug": "list-ops",
|
113
|
-
"topics": [
|
151
|
+
"topics": [
|
152
|
+
|
153
|
+
]
|
114
154
|
},
|
115
155
|
{
|
116
156
|
"difficulty": 1,
|
117
157
|
"slug": "acronym",
|
118
|
-
"topics": [
|
158
|
+
"topics": [
|
159
|
+
|
160
|
+
]
|
119
161
|
}
|
120
162
|
],
|
121
163
|
"deprecated": [
|
@@ -16,7 +16,7 @@ module Generator
|
|
16
16
|
attr_reader :paths
|
17
17
|
|
18
18
|
def generators
|
19
|
-
implementations.map { |slug| generator(implementation(slug)) }
|
19
|
+
implementations.map { |slug| generator(implementation(exercise(slug))) }
|
20
20
|
end
|
21
21
|
|
22
22
|
def implementations
|
@@ -35,9 +35,13 @@ module Generator
|
|
35
35
|
@options[:freeze] || @options[:all]
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
38
|
+
def exercise(slug)
|
39
|
+
Exercise.new(slug: slug)
|
40
|
+
end
|
41
|
+
|
42
|
+
def implementation(exercise)
|
39
43
|
LoggingImplementation.new(
|
40
|
-
implementation: Implementation.new(paths: paths,
|
44
|
+
implementation: Implementation.new(paths: paths, exercise: exercise),
|
41
45
|
logger: logger
|
42
46
|
)
|
43
47
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Generator
|
2
|
+
class Exercise
|
3
|
+
using Generator::Underscore
|
4
|
+
|
5
|
+
attr_reader :slug
|
6
|
+
|
7
|
+
def initialize(slug:)
|
8
|
+
@slug = slug
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
@name ||= slug.underscore
|
13
|
+
end
|
14
|
+
|
15
|
+
def case_class
|
16
|
+
slug.camel_case + 'Case'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -6,10 +6,6 @@ module Generator
|
|
6
6
|
cases_filepaths(track_path).map { |filepath| slugify(filepath) }.sort
|
7
7
|
end
|
8
8
|
|
9
|
-
def class_name(exercise_name_or_slug)
|
10
|
-
filename(exercise_name_or_slug).split('_').map(&:capitalize).join
|
11
|
-
end
|
12
|
-
|
13
9
|
def source_filepath(track_path, slug)
|
14
10
|
path = meta_generator_path(track_path, slug)
|
15
11
|
filename = filename(slug) + '.rb'
|
@@ -22,7 +22,7 @@ module Generator
|
|
22
22
|
private
|
23
23
|
|
24
24
|
def exercise_path
|
25
|
-
File.join(paths.track, 'exercises', slug)
|
25
|
+
File.join(paths.track, 'exercises', exercise.slug)
|
26
26
|
end
|
27
27
|
|
28
28
|
def meta_path
|
@@ -34,7 +34,7 @@ module Generator
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def minitest_tests_filename
|
37
|
-
"#{
|
37
|
+
"#{exercise.name}_test.rb"
|
38
38
|
end
|
39
39
|
|
40
40
|
def version_filename
|
@@ -42,7 +42,7 @@ module Generator
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def example_filename
|
45
|
-
"#{
|
45
|
+
"#{exercise.name}.rb"
|
46
46
|
end
|
47
47
|
|
48
48
|
def tests_template_absolute_filename
|
@@ -6,12 +6,12 @@ module Generator
|
|
6
6
|
include Files::MetadataFiles
|
7
7
|
include TemplateValuesFactory
|
8
8
|
|
9
|
-
def initialize(paths:,
|
9
|
+
def initialize(paths:, exercise:)
|
10
10
|
@paths = paths
|
11
|
-
@
|
11
|
+
@exercise = exercise
|
12
12
|
end
|
13
13
|
|
14
|
-
attr_reader :paths, :
|
14
|
+
attr_reader :paths, :exercise
|
15
15
|
|
16
16
|
def version
|
17
17
|
tests_version.to_i
|
@@ -25,16 +25,12 @@ module Generator
|
|
25
25
|
example_solution.update_version(version)
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
28
|
+
def build_tests
|
29
29
|
minitest_tests.generate(
|
30
30
|
template: tests_template.to_s,
|
31
31
|
values: template_values
|
32
32
|
)
|
33
33
|
end
|
34
|
-
|
35
|
-
def exercise_name
|
36
|
-
@exercise_name ||= slug.tr('-', '_')
|
37
|
-
end
|
38
34
|
end
|
39
35
|
|
40
36
|
# This exists to give us a clue as to what we are delegating to.
|
@@ -58,9 +54,9 @@ module Generator
|
|
58
54
|
@logger.debug "Updated version in example solution to #{version}"
|
59
55
|
end
|
60
56
|
|
61
|
-
def
|
62
|
-
@implementation.
|
63
|
-
@logger.info "Generated #{slug} tests version #{version}"
|
57
|
+
def build_tests
|
58
|
+
@implementation.build_tests
|
59
|
+
@logger.info "Generated #{exercise.slug} tests version #{version}"
|
64
60
|
end
|
65
61
|
end
|
66
62
|
end
|
@@ -28,30 +28,26 @@ module Generator
|
|
28
28
|
abbreviated_commit_hash: canonical_data.abbreviated_commit_hash,
|
29
29
|
canonical_data_version: canonical_data.version,
|
30
30
|
version: version,
|
31
|
-
exercise_name:
|
31
|
+
exercise_name: exercise.name,
|
32
32
|
test_cases: extract
|
33
33
|
)
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
37
37
|
|
38
|
-
def slug_underscore
|
39
|
-
slug ? slug.tr('-_', '_') : ''
|
40
|
-
end
|
41
|
-
|
42
38
|
def extract
|
43
39
|
load cases_load_name
|
44
40
|
extractor.cases(canonical_data.to_s)
|
45
41
|
end
|
46
42
|
|
47
43
|
def extractor
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
CaseValues::Extractor.new(
|
45
|
+
case_class: Object.const_get(exercise.case_class)
|
46
|
+
)
|
51
47
|
end
|
52
48
|
|
53
49
|
def cases_load_name
|
54
|
-
Files::GeneratorCases.source_filepath(paths.track, slug)
|
50
|
+
Files::GeneratorCases.source_filepath(paths.track, exercise.slug)
|
55
51
|
end
|
56
52
|
end
|
57
53
|
end
|