defmastership 1.0.17 → 1.0.19
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/.gitignore +1 -0
- data/.gitlab-ci.yml +37 -11
- data/Gemfile +71 -1
- data/Guardfile +44 -0
- data/Rakefile +16 -61
- data/bin/defmastership +9 -6
- data/config/cucumber.yml +3 -0
- data/config/mutant.yml +27 -3
- data/config/reek.yml +129 -105
- data/config/rubocop.yml +72 -28
- data/defmastership.gemspec +5 -13
- data/features/changeref.feature +0 -8
- data/features/definition_checksum.feature +30 -10
- data/features/definition_version.feature +168 -10
- data/features/export.feature +64 -17
- data/features/modify.feature +1 -5
- data/features/rename_included_files.feature +27 -4
- data/features/step_definitions/git_steps.rb +19 -0
- data/lib/defmastership/batch_modifier.rb +17 -12
- data/lib/defmastership/change_ref_modifier.rb +88 -6
- data/lib/defmastership/comment_filter.rb +1 -1
- data/lib/defmastership/constants.rb +10 -7
- data/lib/defmastership/csv_formatter.rb +16 -12
- data/lib/defmastership/csv_formatter_body.rb +18 -15
- data/lib/defmastership/csv_formatter_header.rb +1 -1
- data/lib/defmastership/definition.rb +59 -20
- data/lib/defmastership/document.rb +101 -74
- data/lib/defmastership/matching_line.rb +17 -0
- data/lib/defmastership/modifier.rb +42 -0
- data/lib/defmastership/modifier_factory.rb +12 -0
- data/lib/defmastership/parsing_state.rb +15 -9
- data/lib/defmastership/rename_included_files_modifier.rb +172 -5
- data/lib/defmastership/set_join_hack.rb +11 -0
- data/lib/defmastership/update_def_checksum_modifier.rb +8 -13
- data/lib/defmastership/update_def_modifier.rb +49 -0
- data/lib/defmastership/update_def_version_modifier.rb +81 -15
- data/lib/defmastership/version.rb +1 -1
- data/lib/defmastership.rb +1 -6
- data/spec/spec_helper.rb +3 -1
- data/spec/unit/def_mastership/batch_modifier_spec.rb +40 -36
- data/spec/unit/def_mastership/change_ref_modifier_spec.rb +196 -51
- data/spec/unit/def_mastership/csv_formatter_body_spec.rb +60 -31
- data/spec/unit/def_mastership/csv_formatter_header_spec.rb +1 -1
- data/spec/unit/def_mastership/csv_formatter_spec.rb +79 -87
- data/spec/unit/def_mastership/definition_parser_spec.rb +1 -1
- data/spec/unit/def_mastership/definition_spec.rb +16 -6
- data/spec/unit/def_mastership/document_spec.rb +81 -38
- data/spec/unit/def_mastership/matching_line_spec.rb +37 -0
- data/spec/unit/def_mastership/modifier_factory_spec.rb +38 -0
- data/spec/unit/def_mastership/modifier_spec.rb +85 -0
- data/spec/unit/def_mastership/parsing_state_spec.rb +1 -1
- data/spec/unit/def_mastership/rename_included_files_modifier_spec.rb +219 -47
- data/spec/unit/def_mastership/string_spec.rb +1 -1
- data/spec/unit/def_mastership/update_def_checksum_modifier_spec.rb +82 -50
- data/spec/unit/def_mastership/update_def_modifier_spec.rb +121 -0
- data/spec/unit/def_mastership/update_def_version_modifier_spec.rb +327 -56
- data/tasks/code_quality.rake +74 -0
- data/tasks/console.rake +8 -0
- data/tasks/package.task +9 -0
- data/tasks/test.rake +30 -0
- metadata +33 -145
- data/.rubocop.yml +0 -76
- data/config/devtools.yml +0 -2
- data/config/flay.yml +0 -3
- data/config/flog.yml +0 -2
- data/config/yardstick.yml +0 -2
- data/cucumber.yml +0 -2
- data/lib/defmastership/change_ref_line_modifier.rb +0 -85
- data/lib/defmastership/line_modifier_base.rb +0 -29
- data/lib/defmastership/modifier_base.rb +0 -36
- data/lib/defmastership/rename_included_files_line_modifier.rb +0 -126
- data/lib/defmastership/update_def_checksum_line_modifier.rb +0 -38
- data/lib/defmastership/update_def_version_line_modifier.rb +0 -58
- data/spec/unit/def_mastership/change_ref_line_modifier_spec.rb +0 -250
- data/spec/unit/def_mastership/rename_included_files_line_modifier_spec.rb +0 -207
- data/spec/unit/def_mastership/update_def_checksum_line_modifier_spec.rb +0 -82
- data/spec/unit/def_mastership/update_def_version_line_modifier_spec.rb +0 -131
- /data/{.rspec → config/rspec} +0 -0
data/features/export.feature
CHANGED
@@ -20,7 +20,6 @@ Feature: The extract command
|
|
20
20
|
Second line.",~b86dcbde
|
21
21
|
"""
|
22
22
|
And the stdout should not contain anything
|
23
|
-
And the stderr should not contain anything
|
24
23
|
|
25
24
|
Scenario: Extract to CSV with alternative CSV separator
|
26
25
|
Given a file named "toto.adoc" with:
|
@@ -60,7 +59,6 @@ Feature: The extract command
|
|
60
59
|
Third line with {not_defined_variable}.",~3bf370ed
|
61
60
|
"""
|
62
61
|
And the stdout should not contain anything
|
63
|
-
And the stderr should not contain anything
|
64
62
|
|
65
63
|
|
66
64
|
Scenario: Extract some definitions to CSV
|
@@ -93,7 +91,6 @@ Feature: The extract command
|
|
93
91
|
ignored multiline
|
94
92
|
"""
|
95
93
|
And the stdout should not contain anything
|
96
|
-
And the stderr should not contain anything
|
97
94
|
|
98
95
|
Scenario: Ignore definitions in literal block
|
99
96
|
Given a file named "toto.adoc" with:
|
@@ -114,7 +111,6 @@ Feature: The extract command
|
|
114
111
|
something_else
|
115
112
|
"""
|
116
113
|
And the stdout should not contain anything
|
117
|
-
And the stderr should not contain anything
|
118
114
|
|
119
115
|
Scenario: Ignore definitions in example block
|
120
116
|
Given a file named "toto.adoc" with:
|
@@ -135,7 +131,6 @@ Feature: The extract command
|
|
135
131
|
something_else
|
136
132
|
"""
|
137
133
|
And the stdout should not contain anything
|
138
|
-
And the stderr should not contain anything
|
139
134
|
|
140
135
|
Scenario: Ignore definitions in commment block
|
141
136
|
Given a file named "toto.adoc" with:
|
@@ -156,7 +151,6 @@ Feature: The extract command
|
|
156
151
|
something_else
|
157
152
|
"""
|
158
153
|
And the stdout should not contain anything
|
159
|
-
And the stderr should not contain anything
|
160
154
|
|
161
155
|
Scenario: Handle mixes comment and literal blocks
|
162
156
|
Given a file named "toto.adoc" with:
|
@@ -179,7 +173,6 @@ Feature: The extract command
|
|
179
173
|
something_else
|
180
174
|
"""
|
181
175
|
And the stdout should not contain anything
|
182
|
-
And the stderr should not contain anything
|
183
176
|
|
184
177
|
Scenario: Extract definition with labels
|
185
178
|
Given a file named "toto.adoc" with:
|
@@ -199,9 +192,8 @@ Feature: The extract command
|
|
199
192
|
label2"
|
200
193
|
"""
|
201
194
|
And the stdout should not contain anything
|
202
|
-
And the stderr should not contain anything
|
203
195
|
|
204
|
-
Scenario: Extract one definition with external ref to CSV
|
196
|
+
Scenario: Extract one definition with external ref to CSV
|
205
197
|
Given a file named "toto.adoc" with:
|
206
198
|
"""
|
207
199
|
:eref-implements-prefix: Participate to:
|
@@ -222,7 +214,49 @@ Feature: The extract command
|
|
222
214
|
SYSTEM-0014"
|
223
215
|
"""
|
224
216
|
And the stdout should not contain anything
|
225
|
-
|
217
|
+
|
218
|
+
Scenario: Extract one definition with external ref (with version and checksum) to CSV
|
219
|
+
Given a file named "toto.adoc" with:
|
220
|
+
"""
|
221
|
+
:eref-implements-prefix: Participate to:
|
222
|
+
:eref-implements-url: ./the_other_document.html
|
223
|
+
[define, requirement, TOTO-0001]
|
224
|
+
--
|
225
|
+
Exemple of multiline requirement.
|
226
|
+
Second line.
|
227
|
+
--
|
228
|
+
defs:eref[implements, [SYSTEM-0012(a), SYSTEM-0014, SYSTEM-0015(b~1223abcd)]]
|
229
|
+
"""
|
230
|
+
When I successfully run `defmastership export toto.adoc`
|
231
|
+
Then the file "toto.csv" should contain:
|
232
|
+
"""
|
233
|
+
Type,Reference,Value,Checksum,Participate to:
|
234
|
+
requirement,TOTO-0001,"Exemple of multiline requirement.
|
235
|
+
Second line.",~b86dcbde,"SYSTEM-0012(a)
|
236
|
+
SYSTEM-0014
|
237
|
+
SYSTEM-0015(b~1223abcd)"
|
238
|
+
"""
|
239
|
+
And the stdout should not contain anything
|
240
|
+
|
241
|
+
Scenario: Extract one definition with missing external ref to CSV
|
242
|
+
Given a file named "toto.adoc" with:
|
243
|
+
"""
|
244
|
+
:eref-implements-prefix: Participate to:
|
245
|
+
:eref-implements-url: ./the_other_document.html
|
246
|
+
[define, requirement, TOTO-0001]
|
247
|
+
--
|
248
|
+
Exemple of multiline requirement.
|
249
|
+
Second line.
|
250
|
+
--
|
251
|
+
"""
|
252
|
+
When I successfully run `defmastership export toto.adoc`
|
253
|
+
Then the file "toto.csv" should contain:
|
254
|
+
"""
|
255
|
+
Type,Reference,Value,Checksum,Participate to:
|
256
|
+
requirement,TOTO-0001,"Exemple of multiline requirement.
|
257
|
+
Second line.",~b86dcbde,
|
258
|
+
"""
|
259
|
+
And the stdout should not contain anything
|
226
260
|
|
227
261
|
Scenario: Extract one definition with external ref without url to CSV
|
228
262
|
Given a file named "toto.adoc" with:
|
@@ -245,7 +279,6 @@ Feature: The extract command
|
|
245
279
|
SYSTEM-0014"
|
246
280
|
"""
|
247
281
|
And the stdout should not contain anything
|
248
|
-
And the stderr should not contain anything
|
249
282
|
|
250
283
|
Scenario: Extract one definition with external ref to CSV without URL
|
251
284
|
Given a file named "toto.adoc" with:
|
@@ -260,7 +293,6 @@ Feature: The extract command
|
|
260
293
|
"""
|
261
294
|
When I successfully run `defmastership export toto.adoc`
|
262
295
|
Then the stdout should not contain anything
|
263
|
-
And the stderr should not contain anything
|
264
296
|
And the file "toto.csv" should contain:
|
265
297
|
"""
|
266
298
|
Type,Reference,Value,Checksum,Participate to:
|
@@ -289,7 +321,6 @@ Feature: The extract command
|
|
289
321
|
TOTO-0002"
|
290
322
|
"""
|
291
323
|
And the stdout should not contain anything
|
292
|
-
And the stderr should not contain anything
|
293
324
|
|
294
325
|
Scenario: Extract one definition with attributes to CSV
|
295
326
|
Given a file named "toto.adoc" with:
|
@@ -311,7 +342,26 @@ Feature: The extract command
|
|
311
342
|
requirement,TOTO-0001,One single line.,~554b0ff5,Beautiful Test,Very cool
|
312
343
|
"""
|
313
344
|
And the stdout should not contain anything
|
314
|
-
|
345
|
+
|
346
|
+
Scenario: Extract one definition with missing attributes to CSV
|
347
|
+
Given a file named "toto.adoc" with:
|
348
|
+
"""
|
349
|
+
:attr-verifiedby-prefix: Verified by:
|
350
|
+
:attr-criticity-prefix: Criticity:
|
351
|
+
[define, requirement, TOTO-0001]
|
352
|
+
One single line.
|
353
|
+
|
354
|
+
something else.
|
355
|
+
defs:attribute[verifiedby, Beautiful Test]
|
356
|
+
"""
|
357
|
+
When I successfully run `defmastership export toto.adoc`
|
358
|
+
And the stdout should not contain anything
|
359
|
+
Then the file "toto.csv" should contain:
|
360
|
+
"""
|
361
|
+
Type,Reference,Value,Checksum,Verified by:,Criticity:
|
362
|
+
requirement,TOTO-0001,One single line.,~554b0ff5,Beautiful Test,
|
363
|
+
"""
|
364
|
+
And the stdout should not contain anything
|
315
365
|
|
316
366
|
Scenario: Extract one definition with example in it
|
317
367
|
Given a file named "toto.adoc" with:
|
@@ -336,7 +386,6 @@ Feature: The extract command
|
|
336
386
|
----",~8f20a443
|
337
387
|
"""
|
338
388
|
And the stdout should not contain anything
|
339
|
-
And the stderr should not contain anything
|
340
389
|
|
341
390
|
Scenario: Extract one definition with single line comment in it
|
342
391
|
Given a file named "toto.adoc" with:
|
@@ -353,7 +402,6 @@ Feature: The extract command
|
|
353
402
|
requirement,TOTO-0001,// comment,~b0b506c3
|
354
403
|
"""
|
355
404
|
And the stdout should not contain anything
|
356
|
-
And the stderr should not contain anything
|
357
405
|
|
358
406
|
Scenario: Extract one definition with multi line comment or literal in it
|
359
407
|
Given a file named "toto.adoc" with:
|
@@ -380,4 +428,3 @@ Feature: The extract command
|
|
380
428
|
....",~7eb3c490
|
381
429
|
"""
|
382
430
|
And the stdout should not contain anything
|
383
|
-
And the stderr should not contain anything
|
data/features/modify.feature
CHANGED
@@ -20,7 +20,6 @@ Feature: The modify command
|
|
20
20
|
"""
|
21
21
|
When I successfully run `defmastership modify --modifications temp-references thedoc.adoc`
|
22
22
|
Then the stdout should not contain anything
|
23
|
-
And the stderr should not contain anything
|
24
23
|
And the file "modifications.yml" should contain:
|
25
24
|
"""
|
26
25
|
---
|
@@ -75,7 +74,6 @@ Feature: The modify command
|
|
75
74
|
"""
|
76
75
|
When I successfully run `defmastership modify --modifications-file=pouet.yml --modifications toto thedoc.adoc`
|
77
76
|
Then the stdout should not contain anything
|
78
|
-
And the stderr should not contain anything
|
79
77
|
And the file "pouet.yml" should contain:
|
80
78
|
"""
|
81
79
|
---
|
@@ -108,8 +106,7 @@ Feature: The modify command
|
|
108
106
|
[define, requirement, TOTO-TEMP-XXX2]
|
109
107
|
"""
|
110
108
|
When I successfully run `defmastership modify --modifications temp-references --changes-summary=changes.csv thedoc.adoc`
|
111
|
-
Then the
|
112
|
-
And the stdout should not contain anything
|
109
|
+
Then the stdout should not contain anything
|
113
110
|
And the file "changes.csv" should contain:
|
114
111
|
"""
|
115
112
|
Modifier,Was,Becomes
|
@@ -141,7 +138,6 @@ Feature: The modify command
|
|
141
138
|
"""
|
142
139
|
When I successfully run `defmastership modify --modifications temp-references,tata_or_titi --changes-summary=changes.csv thedoc.adoc`
|
143
140
|
Then the stdout should not contain anything
|
144
|
-
And the stderr should not contain anything
|
145
141
|
And the file "modifications.yml" should contain:
|
146
142
|
"""
|
147
143
|
---
|
@@ -23,7 +23,6 @@ Feature: The rename_included_files command
|
|
23
23
|
And an empty file named "any_path/one_file.png"
|
24
24
|
When I successfully run `defmastership modify --modifications rename_included_png thedoc.adoc`
|
25
25
|
Then the stdout should not contain anything
|
26
|
-
And the stderr should not contain anything
|
27
26
|
And the file "thedoc.adoc" should contain:
|
28
27
|
"""
|
29
28
|
include::any_path/one_file.png[]
|
@@ -49,7 +48,6 @@ Feature: The rename_included_files command
|
|
49
48
|
And an empty file named "any_path/one_file.png"
|
50
49
|
When I successfully run `defmastership modify --modifications rename_included_png thedoc.adoc`
|
51
50
|
Then the stdout should not contain anything
|
52
|
-
And the stderr should not contain anything
|
53
51
|
And the file "thedoc.adoc" should contain:
|
54
52
|
"""
|
55
53
|
[define, requirement, TOTO-WHATEVER-123]
|
@@ -58,6 +56,33 @@ Feature: The rename_included_files command
|
|
58
56
|
And the file "any_path/one_file.png" should not exist
|
59
57
|
And the file "any_path/TOTO-WHATEVER-123_one_file.png" should exist
|
60
58
|
|
59
|
+
Scenario: change the filename with options in include macro
|
60
|
+
Given a file named "modifications.yml" with:
|
61
|
+
"""
|
62
|
+
---
|
63
|
+
:rename_included_png:
|
64
|
+
:type: rename_included_files
|
65
|
+
:config:
|
66
|
+
:from_regexp: (?<origin>.*\.png)
|
67
|
+
:to_template: "%<reference>s_%<origin>s"
|
68
|
+
"""
|
69
|
+
And a file named "thedoc.adoc" with:
|
70
|
+
"""
|
71
|
+
[define, requirement, TOTO-WHATEVER-123]
|
72
|
+
include::any_path/one_file.png[leveloffset=offset,lines=ranges]
|
73
|
+
"""
|
74
|
+
And a directory named "any_path"
|
75
|
+
And an empty file named "any_path/one_file.png"
|
76
|
+
When I successfully run `defmastership modify --modifications rename_included_png thedoc.adoc`
|
77
|
+
Then the stdout should not contain anything
|
78
|
+
And the file "thedoc.adoc" should contain:
|
79
|
+
"""
|
80
|
+
[define, requirement, TOTO-WHATEVER-123]
|
81
|
+
include::any_path/TOTO-WHATEVER-123_one_file.png[leveloffset=offset,lines=ranges]
|
82
|
+
"""
|
83
|
+
And the file "any_path/one_file.png" should not exist
|
84
|
+
And the file "any_path/TOTO-WHATEVER-123_one_file.png" should exist
|
85
|
+
|
61
86
|
Scenario: change the filename with variable in path
|
62
87
|
Given a file named "modifications.yml" with:
|
63
88
|
"""
|
@@ -81,7 +106,6 @@ Feature: The rename_included_files command
|
|
81
106
|
And an empty file named "one_two/one_file.png"
|
82
107
|
When I successfully run `defmastership modify --modifications rename_included_png thedoc.adoc`
|
83
108
|
Then the stdout should not contain anything
|
84
|
-
And the stderr should not contain anything
|
85
109
|
And the file "thedoc.adoc" should contain:
|
86
110
|
"""
|
87
111
|
:any: one
|
@@ -114,7 +138,6 @@ Feature: The rename_included_files command
|
|
114
138
|
And an empty file named "any_path/TOTO-WHATEVER-123_one_file.png"
|
115
139
|
When I successfully run `defmastership modify --modifications rename_included_png thedoc.adoc`
|
116
140
|
Then the stdout should not contain anything
|
117
|
-
And the stderr should not contain anything
|
118
141
|
And the file "thedoc.adoc" should contain:
|
119
142
|
"""
|
120
143
|
[define, requirement, TOTO-WHATEVER-123]
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (c) 2024 Jerome Arbez-Gindre
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'git'
|
5
|
+
|
6
|
+
Given('I initialize a git repo') do
|
7
|
+
Git.init(Aruba.config.home_directory)
|
8
|
+
end
|
9
|
+
|
10
|
+
Given('I add and commit the {string} file') do |filename|
|
11
|
+
git = Git.open(Aruba.config.home_directory)
|
12
|
+
git.add(filename)
|
13
|
+
git.commit('whatever')
|
14
|
+
end
|
15
|
+
|
16
|
+
Given('I set the {string} tag') do |tag_name|
|
17
|
+
git = Git.open(Aruba.config.home_directory)
|
18
|
+
git.add_tag(tag_name)
|
19
|
+
end
|
@@ -4,32 +4,37 @@
|
|
4
4
|
module DefMastership
|
5
5
|
# Change references from temporary to definitive with multiple RefChangers
|
6
6
|
class BatchModifier
|
7
|
-
attr_reader :config, :
|
7
|
+
attr_reader :config, :adoc_sources, :changes
|
8
8
|
|
9
|
-
def initialize(config,
|
9
|
+
def initialize(config, adoc_sources)
|
10
10
|
@config = config
|
11
|
-
@
|
11
|
+
@adoc_sources = adoc_sources
|
12
12
|
@changes = []
|
13
13
|
end
|
14
14
|
|
15
15
|
def apply(modifs)
|
16
|
-
modifs.
|
16
|
+
modifs.each do |modif|
|
17
17
|
modifier = modifier_from(modif)
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
@adoc_sources = modifier.do_modifications(adoc_sources)
|
19
|
+
config.fetch(modif)[:config] = modifier.config
|
20
|
+
|
21
|
+
collect_changes(modifier, modif)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
25
|
private
|
27
26
|
|
28
27
|
def modifier_from(modif)
|
29
|
-
|
28
|
+
config_modif_sym = config[modif]
|
29
|
+
raise(ArgumentError, "#{modif} is not a known modification") unless config_modif_sym
|
30
|
+
|
31
|
+
ModifierFactory.from_config(config_modif_sym)
|
32
|
+
end
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
def collect_changes(modifier, modif)
|
35
|
+
modifier.changes.reduce(changes) do |acc, change|
|
36
|
+
acc << ([modif.to_s] + change)
|
37
|
+
end
|
33
38
|
end
|
34
39
|
end
|
35
40
|
end
|
@@ -1,17 +1,99 @@
|
|
1
1
|
# Copyright (c) 2020 Jerome Arbez-Gindre
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'defmastership/
|
4
|
+
require 'defmastership/constants'
|
5
|
+
require 'defmastership/modifier'
|
5
6
|
|
6
7
|
module DefMastership
|
7
|
-
# Change
|
8
|
-
class ChangeRefModifier
|
9
|
-
|
8
|
+
# Change references from temporary to definitive with multiple RefChangers
|
9
|
+
class ChangeRefModifier
|
10
|
+
include Modifier
|
11
|
+
|
12
|
+
REGEXP_FROM = {
|
13
|
+
definition: {
|
14
|
+
before: DMRegexp::DEF_BEFORE_REF,
|
15
|
+
after: DMRegexp::DEF_AFTER_REF
|
16
|
+
},
|
17
|
+
iref: {
|
18
|
+
before: DMRegexp::IREF_DEF_BEF,
|
19
|
+
after: DMRegexp::IREF_DEF_AFT
|
20
|
+
}
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
private_constant :REGEXP_FROM
|
24
|
+
|
25
|
+
def self.replacement_methods
|
10
26
|
%i[replace_refdef replace_irefs]
|
11
27
|
end
|
12
28
|
|
13
|
-
def
|
14
|
-
|
29
|
+
def self.default_config
|
30
|
+
{
|
31
|
+
from_regexp: '',
|
32
|
+
to_template: '',
|
33
|
+
next_ref: 0
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(config)
|
38
|
+
@parsing_state = ParsingState.new
|
39
|
+
|
40
|
+
setup_modifier_module(config)
|
41
|
+
end
|
42
|
+
|
43
|
+
def replace(method, line)
|
44
|
+
public_send(:"replace_#{method}", line)
|
45
|
+
end
|
46
|
+
|
47
|
+
def replace_refdef(line)
|
48
|
+
if @parsing_state.enabled?(line)
|
49
|
+
do_replace_refdef(line)
|
50
|
+
else
|
51
|
+
line
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def replace_irefs(line)
|
56
|
+
changes.reduce(line) do |res_line, (from, to)|
|
57
|
+
res_line.gsub(Helper.regexp_from(:iref, from)) do
|
58
|
+
Helper.text_with(Regexp.last_match, to)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def do_replace_refdef(line)
|
66
|
+
line.sub(Helper.regexp_from(:definition, from_regexp)) do
|
67
|
+
replacement_from(Regexp.last_match)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def replacement_from(match)
|
72
|
+
replacement = to_template % hmerge(match)
|
73
|
+
changes << [match[:from], replacement]
|
74
|
+
config[:next_ref] += 1
|
75
|
+
Helper.text_with(match, replacement)
|
76
|
+
end
|
77
|
+
|
78
|
+
def hmerge(match)
|
79
|
+
config.merge(match.named_captures.transform_keys(&:to_sym))
|
80
|
+
end
|
81
|
+
|
82
|
+
# Helper functions
|
83
|
+
module Helper
|
84
|
+
def self.regexp_from(const, from)
|
85
|
+
regexps = REGEXP_FROM.fetch(const)
|
86
|
+
regexp_str =
|
87
|
+
"(?<before>#{regexps[:before]})" \
|
88
|
+
"(?<from>#{from})" \
|
89
|
+
"#{DMRegexp::DEF_VERSION_AND_CHECKSUM}" \
|
90
|
+
"(?<after>#{regexps[:after]})"
|
91
|
+
Regexp.new(regexp_str, Regexp::EXTENDED)
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.text_with(match, replacement)
|
95
|
+
match[:before] + replacement + (match[:version_and_checksum] || '') + match[:after]
|
96
|
+
end
|
15
97
|
end
|
16
98
|
end
|
17
99
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
module DefMastership
|
5
5
|
# set of regexp of added asciidoctor constructions
|
6
|
+
# This module smells of :reek:TooManyConstants
|
6
7
|
module DMRegexp
|
7
8
|
SINGLE_LINE_COMMENT = %r{^//[^/]}.freeze
|
8
9
|
|
@@ -22,22 +23,24 @@ module DefMastership
|
|
22
23
|
'\((?<explicit_version>[^~]+)?(?<explicit_checksum>~[[:alnum:]]+)?\)' \
|
23
24
|
')?'
|
24
25
|
|
26
|
+
REFERENCE = '(?<reference>[\\w:_-]+)'
|
27
|
+
|
25
28
|
DEFINITION = Regexp.new(
|
26
|
-
"#{DEF_BEFORE_REF}
|
29
|
+
"#{DEF_BEFORE_REF}#{REFERENCE}#{DEF_VERSION_AND_CHECKSUM}#{DEF_AFTER_REF}",
|
27
30
|
Regexp::EXTENDED
|
28
31
|
)
|
29
32
|
|
30
|
-
VARIABLE_DEF = /^\s*:(?<varname>[\w:_-]+):\s
|
31
|
-
|
33
|
+
VARIABLE_DEF = /^\s*:(?<varname>[\w:_-]+):\s+
|
34
|
+
(?<value>\S.*\S)\s*$/x.freeze
|
32
35
|
|
33
36
|
VARIABLE_USE = /{(?<varname>[\w:_-]+)}/x.freeze
|
34
37
|
|
35
|
-
EREF_CONFIG = /^\s*:eref-(?<
|
38
|
+
EREF_CONFIG = /^\s*:eref-(?<reference>[\w:_-]+)-(?<symb>prefix|url):\s*
|
36
39
|
\s*(?<value>\S.*\S)\s*/x.freeze
|
37
40
|
EREF_DEF = /^\s*
|
38
41
|
defs:eref\[
|
39
|
-
\s*(?<
|
40
|
-
\s*\[(?<extrefs>[^\]]
|
42
|
+
\s*(?<reference>[\w:_-]+)\s*,
|
43
|
+
\s*\[\s*(?<extrefs>[^\]]+?)\s*\]\s*\]/x.freeze
|
41
44
|
BLOCK = /^--\s*$/.freeze
|
42
45
|
|
43
46
|
IREF_DEF_BEF = 'defs:iref\[\s*'
|
@@ -61,7 +64,7 @@ module DefMastership
|
|
61
64
|
INCLUDE_KEYWORD = '\binclude::'
|
62
65
|
INCLUDE_PATH = '(?<path>.*/)?'
|
63
66
|
INCLUDE_FILENAME = '(?<filename>[^\\/]+)'
|
64
|
-
INCLUDE_OPTIONS = '\[(?<options>[
|
67
|
+
INCLUDE_OPTIONS = '\[(?<options>[^\]]*)\]'
|
65
68
|
|
66
69
|
INCLUDE = Regexp.new(
|
67
70
|
INCLUDE_KEYWORD + INCLUDE_PATH + INCLUDE_FILENAME + INCLUDE_OPTIONS,
|
@@ -8,7 +8,7 @@ require('defmastership/csv_formatter_header')
|
|
8
8
|
module DefMastership
|
9
9
|
# to export a CSV file
|
10
10
|
class CSVFormatter
|
11
|
-
def initialize(doc, sep
|
11
|
+
def initialize(doc, sep)
|
12
12
|
@doc = doc
|
13
13
|
@sep = sep
|
14
14
|
end
|
@@ -17,12 +17,16 @@ module DefMastership
|
|
17
17
|
column_list = build_column_list
|
18
18
|
CSV.open(output_file, 'w:ISO-8859-1', col_sep: @sep) do |csv|
|
19
19
|
csv << header(column_list)
|
20
|
-
|
20
|
+
export_definitions_in(csv, column_list)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
+
def export_definitions_in(csv, column_list)
|
27
|
+
@doc.definitions.each { |definition| csv << body(definition, column_list) }
|
28
|
+
end
|
29
|
+
|
26
30
|
def header(column_list)
|
27
31
|
header_formatter = CSVFormatterHeader.new(@doc)
|
28
32
|
header_line = column_list.map { |part| header_formatter.public_send(part) }
|
@@ -30,20 +34,20 @@ module DefMastership
|
|
30
34
|
end
|
31
35
|
|
32
36
|
def body(definition, column_list)
|
33
|
-
body_formatter = CSVFormatterBody.new(@doc)
|
34
|
-
body_line = column_list.map { |part| body_formatter.public_send(part
|
37
|
+
body_formatter = CSVFormatterBody.new(@doc, definition)
|
38
|
+
body_line = column_list.map { |part| body_formatter.public_send(part) }
|
35
39
|
body_line.flatten
|
36
40
|
end
|
37
41
|
|
38
42
|
def build_column_list
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
[
|
44
|
+
[:wrong_explicit_checksum, @doc.wrong_explicit_checksum?],
|
45
|
+
[:explicit_version, @doc.explicit_version?],
|
46
|
+
[:labels, !@doc.labels.empty?],
|
47
|
+
[:eref, !@doc.eref.empty?],
|
48
|
+
[:iref, @doc.iref],
|
49
|
+
[:attributes, !@doc.attributes.empty?]
|
50
|
+
].reduce([:fixed]) { |acc, elem| acc + (elem.fetch(1) ? [elem.first] : []) }
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -3,41 +3,44 @@
|
|
3
3
|
|
4
4
|
require('csv')
|
5
5
|
|
6
|
+
require('defmastership/set_join_hack')
|
7
|
+
|
6
8
|
module DefMastership
|
7
9
|
# format lines per definition
|
8
10
|
class CSVFormatterBody
|
9
|
-
def initialize(doc)
|
11
|
+
def initialize(doc, definition)
|
10
12
|
@doc = doc
|
13
|
+
@definition = definition
|
11
14
|
end
|
12
15
|
|
13
|
-
def fixed
|
14
|
-
[definition.type, definition.reference, definition.value, definition.
|
16
|
+
def fixed
|
17
|
+
[@definition.type, @definition.reference, @definition.value, @definition.sha256_short]
|
15
18
|
end
|
16
19
|
|
17
|
-
def wrong_explicit_checksum
|
18
|
-
wrong_explicit_checksum = definition.wrong_explicit_checksum
|
20
|
+
def wrong_explicit_checksum
|
21
|
+
wrong_explicit_checksum = @definition.wrong_explicit_checksum
|
19
22
|
wrong_explicit_checksum ? [wrong_explicit_checksum] : ['']
|
20
23
|
end
|
21
24
|
|
22
|
-
def explicit_version
|
23
|
-
explicit_version = definition.explicit_version
|
25
|
+
def explicit_version
|
26
|
+
explicit_version = @definition.explicit_version
|
24
27
|
explicit_version ? [explicit_version] : ['']
|
25
28
|
end
|
26
29
|
|
27
|
-
def labels
|
28
|
-
[definition.labels.
|
30
|
+
def labels
|
31
|
+
[@definition.labels.join("\n")]
|
29
32
|
end
|
30
33
|
|
31
|
-
def eref
|
32
|
-
@doc.eref.map { |key
|
34
|
+
def eref
|
35
|
+
@doc.eref.map { |key,| @definition.eref.fetch(key, []).join("\n") }
|
33
36
|
end
|
34
37
|
|
35
|
-
def iref
|
36
|
-
[definition.iref.join("\n")]
|
38
|
+
def iref
|
39
|
+
[@definition.iref.join("\n")]
|
37
40
|
end
|
38
41
|
|
39
|
-
def attributes
|
40
|
-
@doc.attributes.map { |key
|
42
|
+
def attributes
|
43
|
+
@doc.attributes.map { |key,| @definition.attributes.fetch(key, '') }
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|