defmastership 1.3.2 → 1.3.4

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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -9
  3. data/Guardfile +2 -5
  4. data/Rakefile +1 -1
  5. data/config/mutant.yml +2 -1
  6. data/config/rubocop.yml +20 -8
  7. data/defmastership.gemspec +6 -15
  8. data/features/changeref.feature +108 -0
  9. data/features/definition_checksum.feature +118 -0
  10. data/features/definition_version.feature +168 -0
  11. data/features/export.feature +122 -22
  12. data/features/external_ref_checksum.feature +169 -0
  13. data/features/external_ref_version.feature +173 -0
  14. data/features/internal_ref_checksum.feature +77 -0
  15. data/features/internal_ref_version.feature +81 -0
  16. data/features/rename_included_files.feature +55 -0
  17. data/features/step_definitions/git_steps.rb +3 -0
  18. data/lib/defmastership/app.rb +35 -8
  19. data/lib/defmastership/comment_filter.rb +2 -0
  20. data/lib/defmastership/def_type_list.rb +25 -0
  21. data/lib/defmastership/definition_parser.rb +2 -6
  22. data/lib/defmastership/document.rb +6 -9
  23. data/lib/defmastership/export/csv/formatter.rb +8 -60
  24. data/lib/defmastership/export/formatter.rb +88 -0
  25. data/lib/defmastership/export/json/formatter.rb +34 -0
  26. data/lib/defmastership/export/xlsx/formatter.rb +87 -0
  27. data/lib/defmastership/export/yaml/formatter.rb +34 -0
  28. data/lib/defmastership/modifier/change_ref.rb +24 -39
  29. data/lib/defmastership/modifier/factory.rb +5 -1
  30. data/lib/defmastership/modifier/modifier_common.rb +4 -4
  31. data/lib/defmastership/modifier/rename_included_files.rb +16 -5
  32. data/lib/defmastership/modifier/replacement_formatter.rb +37 -0
  33. data/lib/defmastership/modifier/update_def.rb +7 -2
  34. data/lib/defmastership/modifier/update_eref_checksum.rb +46 -0
  35. data/lib/defmastership/modifier/update_eref_common.rb +78 -0
  36. data/lib/defmastership/modifier/update_eref_version.rb +46 -0
  37. data/lib/defmastership/modifier/update_iref_checksum.rb +52 -0
  38. data/lib/defmastership/modifier/update_iref_common.rb +45 -0
  39. data/lib/defmastership/modifier/update_iref_version.rb +59 -0
  40. data/lib/defmastership/version.rb +1 -1
  41. data/spec/spec_helper.rb +11 -10
  42. data/spec/unit/defmastership/app_spec.rb +57 -20
  43. data/spec/unit/defmastership/batch_modifier_spec.rb +9 -7
  44. data/spec/unit/defmastership/def_type_list_spec.rb +22 -0
  45. data/spec/unit/defmastership/definition_spec.rb +8 -51
  46. data/spec/unit/defmastership/document_spec.rb +12 -36
  47. data/spec/unit/defmastership/export/body_formatter_spec.rb +5 -18
  48. data/spec/unit/defmastership/export/csv/formatter_spec.rb +45 -231
  49. data/spec/unit/defmastership/export/formatter_spec.rb +97 -0
  50. data/spec/unit/defmastership/export/header_formatter_spec.rb +2 -6
  51. data/spec/unit/defmastership/export/json/formatter_spec.rb +85 -0
  52. data/spec/unit/defmastership/export/xlsx/formatter_spec.rb +82 -0
  53. data/spec/unit/defmastership/export/yaml/formatter_spec.rb +85 -0
  54. data/spec/unit/defmastership/hash_spec.rb +2 -0
  55. data/spec/unit/defmastership/modifier/change_ref_spec.rb +66 -97
  56. data/spec/unit/defmastership/modifier/factory_spec.rb +40 -17
  57. data/spec/unit/defmastership/modifier/modifier_common_spec.rb +7 -5
  58. data/spec/unit/defmastership/modifier/rename_included_files_spec.rb +105 -85
  59. data/spec/unit/defmastership/modifier/update_def_checksum_spec.rb +6 -13
  60. data/spec/unit/defmastership/modifier/update_def_spec.rb +79 -22
  61. data/spec/unit/defmastership/modifier/update_def_version_spec.rb +13 -37
  62. data/spec/unit/defmastership/modifier/update_eref_checksum_spec.rb +209 -0
  63. data/spec/unit/defmastership/modifier/update_eref_version_spec.rb +227 -0
  64. data/spec/unit/defmastership/modifier/update_iref_checksum_spec.rb +133 -0
  65. data/spec/unit/defmastership/modifier/update_iref_version_spec.rb +162 -0
  66. data/tasks/code_quality.rake +1 -8
  67. data/tasks/test.rake +15 -0
  68. metadata +59 -6
@@ -24,12 +24,7 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
24
24
 
25
25
  describe '#replace' do
26
26
  context 'when NOT valid include' do
27
- subject(:includeschanger) do
28
- described_class.new(
29
- from_regexp: 'orig',
30
- to_template: 'dest'
31
- )
32
- end
27
+ subject(:includeschanger) { described_class.new(from_regexp: 'orig', to_template: 'dest') }
33
28
 
34
29
  before do
35
30
  allow(File).to(receive(:rename))
@@ -38,17 +33,14 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
38
33
  context 'when the include statement do not match' do
39
34
  before do
40
35
  ['[define,requirement,REFERENCE]', '--'].each do |line|
41
- includeschanger.replace(line)
36
+ includeschanger.replace('', line)
42
37
  end
43
38
  end
44
39
 
45
- it do
46
- expect(includeschanger.replace('badinclude::orig[]'))
47
- .to(eq('badinclude::orig[]'))
48
- end
40
+ it { expect(includeschanger.replace('', 'badinclude::orig[]')).to(eq('badinclude::orig[]')) }
49
41
 
50
42
  it do
51
- includeschanger.replace('badinclude::orig[]')
43
+ includeschanger.replace('', 'badinclude::orig[]')
52
44
  expect(includeschanger).to(have_attributes(changes: []))
53
45
  end
54
46
  end
@@ -56,51 +48,38 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
56
48
  context 'when the include is not in a definition' do
57
49
  before do
58
50
  ['[define,requirement,REFERENCE]', '--', 'text', '--'].each do |line|
59
- includeschanger.replace(line)
51
+ includeschanger.replace('', line)
60
52
  end
61
53
  end
62
54
 
63
- it do
64
- expect(includeschanger.replace('include::orig[]'))
65
- .to(eq('include::orig[]'))
66
- end
55
+ it { expect(includeschanger.replace('', 'include::orig[]')).to(eq('include::orig[]')) }
67
56
 
68
57
  it do
69
- includeschanger.replace('include::orig[]')
58
+ includeschanger.replace('', 'include::orig[]')
70
59
  expect(includeschanger).to(have_attributes(changes: []))
71
60
  end
72
61
  end
73
62
 
74
63
  context 'when the line is commented' do
75
64
  before do
76
- includeschanger.replace('[define,requirement,REFERENCE]')
77
- includeschanger.replace('--')
65
+ includeschanger.replace('', '[define,requirement,REFERENCE]')
66
+ includeschanger.replace('', '--')
78
67
  end
79
68
 
80
- it do
81
- expect(includeschanger.replace('// include::orig[]'))
82
- .to(eq('// include::orig[]'))
83
- end
69
+ it { expect(includeschanger.replace('', '// include::orig[]')).to(eq('// include::orig[]')) }
84
70
  end
85
71
 
86
72
  context 'when the cancel regexp is met' do
87
73
  subject(:includeschanger) do
88
- described_class.new(
89
- from_regexp: 'orig',
90
- cancel_if_match: 'orig',
91
- to_template: 'dest'
92
- )
74
+ described_class.new(from_regexp: 'orig', cancel_if_match: 'orig', to_template: 'dest')
93
75
  end
94
76
 
95
77
  before do
96
- includeschanger.replace('[define,requirement,REFERENCE]')
97
- includeschanger.replace('--')
78
+ includeschanger.replace('', '[define,requirement,REFERENCE]')
79
+ includeschanger.replace('', '--')
98
80
  end
99
81
 
100
- it do
101
- expect(includeschanger.replace("include::orig[]\n"))
102
- .to(eq("include::orig[]\n"))
103
- end
82
+ it { expect(includeschanger.replace('', "include::orig[]\n")).to(eq("include::orig[]\n")) }
104
83
  end
105
84
  end
106
85
 
@@ -111,127 +90,168 @@ RSpec.describe(Defmastership::Modifier::RenameIncludedFiles) do
111
90
 
112
91
  context 'when really simple rule' do
113
92
  subject(:includeschanger) do
114
- described_class.new(
115
- from_regexp: 'orig',
116
- cancel_if_match: '_no_cancel_',
117
- to_template: 'dest'
118
- )
93
+ described_class.new(from_regexp: 'orig', cancel_if_match: '_no_cancel_', to_template: 'dest')
119
94
  end
120
95
 
121
96
  before do
122
- includeschanger.replace('[define,requirement,REFERENCE]')
123
- includeschanger.replace('--')
97
+ includeschanger.replace('sub/one_file.adoc', '[define,requirement,REFERENCE]')
98
+ includeschanger.replace('sub/one_file.adoc', '--')
124
99
  end
125
100
 
126
101
  it do
127
- expect(includeschanger.replace("include::orig[]\n"))
102
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
128
103
  .to(eq("include::dest[]\n"))
129
104
  end
130
105
 
131
106
  it do
132
- includeschanger.replace("include::orig[]\n")
133
- expect(File).to(have_received(:rename).with('orig', 'dest'))
107
+ includeschanger.replace('sub/one_file.adoc', "include::orig[]\n")
108
+ expect(File).to(have_received(:rename).with('sub/orig', 'sub/dest'))
134
109
  end
135
110
 
136
111
  it do
137
- expect(includeschanger.replace("include::orig[leveloffset=offset,lines=ranges]\n"))
112
+ expect(includeschanger.replace('', "include::orig[leveloffset=offset,lines=ranges]\n"))
138
113
  .to(eq("include::dest[leveloffset=offset,lines=ranges]\n"))
139
114
  end
140
115
 
141
116
  it do
142
- includeschanger.replace("include::orig[leveloffset=offset,lines=ranges]\n")
143
- expect(File).to(have_received(:rename).with('orig', 'dest'))
117
+ includeschanger.replace('sub/one_file.adoc', "include::orig[leveloffset=offset,lines=ranges]\n")
118
+ expect(File).to(have_received(:rename).with('sub/orig', 'sub/dest'))
144
119
  end
145
120
 
146
121
  it do
147
- includeschanger.replace("include::orig[]\n")
148
- expect(includeschanger).to(have_attributes(changes: [%w[orig dest]]))
122
+ includeschanger.replace('', "include::orig[]\n")
123
+ expect(includeschanger).to(have_attributes(changes: [%w[./orig ./dest]]))
149
124
  end
150
125
 
151
126
  it do
152
- expect(includeschanger.replace("include::toto/orig[]\n"))
127
+ expect(includeschanger.replace('sub/one_file.adoc', "include::toto/orig[]\n"))
153
128
  .to(eq("include::toto/dest[]\n"))
154
129
  end
155
130
 
156
131
  it do
157
- includeschanger.replace("include::toto/orig[]\n")
158
- expect(File).to(have_received(:rename).with('toto/orig', 'toto/dest'))
132
+ includeschanger.replace('sub/one_file.adoc', "include::toto/orig[]\n")
133
+ expect(File).to(have_received(:rename).with('sub/toto/orig', 'sub/toto/dest'))
159
134
  end
160
135
 
161
136
  it do
162
- includeschanger.replace("include::toto/orig[]\n")
163
- expect(includeschanger).to(have_attributes(changes: [%w[toto/orig toto/dest]]))
137
+ includeschanger.replace('sub/one_file.adoc', "include::toto/orig[]\n")
138
+ expect(includeschanger).to(have_attributes(changes: [%w[sub/toto/orig sub/toto/dest]]))
164
139
  end
165
140
  end
166
141
 
167
142
  context 'when complex from_regexp' do
168
143
  subject(:includeschanger) do
169
- described_class.new(
170
- from_regexp: '(?<origin>.*\.extension)',
171
- to_template: '%<reference>s_%<origin>s'
172
- )
144
+ described_class.new(from_regexp: '(?<origin>.*\.extension)', to_template: '%<reference>s_%<origin>s')
173
145
  end
174
146
 
175
147
  before do
176
- includeschanger.replace('[define,requirement,REF]')
148
+ includeschanger.replace('sub/one_file.adoc', '[define,requirement,REF]')
177
149
  end
178
150
 
179
151
  it do
180
- expect(includeschanger.replace('include::any_path/one_file.extension[]'))
152
+ expect(includeschanger.replace('sub/one_file.adoc', 'include::any_path/one_file.extension[]'))
181
153
  .to(eq('include::any_path/REF_one_file.extension[]'))
182
154
  end
183
155
 
184
156
  it do
185
- includeschanger.replace('include::any_path/one_file.extension[]')
186
- expect(File).to(have_received(:rename).with('any_path/one_file.extension', 'any_path/REF_one_file.extension'))
157
+ includeschanger.replace('sub/one_file.adoc', 'include::any_path/one_file.extension[]')
158
+ expect(File).to(
159
+ have_received(:rename).with('sub/any_path/one_file.extension', 'sub/any_path/REF_one_file.extension')
160
+ )
187
161
  end
188
162
 
189
163
  it do
190
- changes = [%w[any_path/one_file.extension any_path/REF_one_file.extension]]
191
- includeschanger.replace('include::any_path/one_file.extension[]')
164
+ changes = [%w[sub/any_path/one_file.extension sub/any_path/REF_one_file.extension]]
165
+ includeschanger.replace('sub/one_file.adoc', 'include::any_path/one_file.extension[]')
192
166
  expect(includeschanger).to(have_attributes(changes: changes))
193
167
  end
194
168
  end
195
169
 
196
170
  context 'when path with variable' do
197
- subject(:includeschanger) do
198
- described_class.new(
199
- from_regexp: 'orig',
200
- to_template: 'dest'
201
- )
202
- end
171
+ subject(:includeschanger) { described_class.new(from_regexp: 'orig', to_template: 'dest') }
203
172
 
204
173
  before do
205
- includeschanger.replace(':any: one')
206
- includeschanger.replace(':path: two')
207
- includeschanger.replace(':var: three')
208
- includeschanger.replace('[define,requirement,REFERENCE]')
209
- includeschanger.replace('--')
174
+ includeschanger.replace('sub/one_file.adoc', ':any: one')
175
+ includeschanger.replace('sub/one_file.adoc', ':path: two')
176
+ includeschanger.replace('sub/one_file.adoc', ':var: three')
177
+ includeschanger.replace('sub/one_file.adoc', '[define,requirement,REFERENCE]')
178
+ includeschanger.replace('sub/one_file.adoc', '--')
210
179
  end
211
180
 
212
181
  it do
213
- expect(includeschanger.replace('include::{any}/orig[]'))
214
- .to(eq('include::{any}/dest[]'))
182
+ expect(includeschanger.replace('sub/one_file.adoc', 'include::{any}/orig[]')).to(eq('include::{any}/dest[]'))
215
183
  end
216
184
 
217
185
  it do
218
- includeschanger.replace('include::{any}{var}/orig[]')
219
- expect(File).to(have_received(:rename).with('onethree/orig', 'onethree/dest'))
186
+ includeschanger.replace('sub/one_file.adoc', 'include::{any}{var}/orig[]')
187
+ expect(File).to(have_received(:rename).with('sub/onethree/orig', 'sub/onethree/dest'))
220
188
  end
221
189
 
222
190
  it do
223
- includeschanger.replace('include::{any}_{path}/orig[]')
224
- expect(File).to(have_received(:rename).with('one_two/orig', 'one_two/dest'))
191
+ includeschanger.replace('sub/one_file.adoc', 'include::{any}_{path}/orig[]')
192
+ expect(File).to(have_received(:rename).with('sub/one_two/orig', 'sub/one_two/dest'))
225
193
  end
226
194
 
227
195
  it do
228
- expect { includeschanger.replace('include::{bad_variable}/orig[]') }
196
+ expect { includeschanger.replace('sub/one_file.adoc', 'include::{bad_variable}/orig[]') }
229
197
  .to(raise_error(KeyError, 'key not found: :bad_variable'))
230
198
  end
231
199
 
232
200
  it do
233
- includeschanger.replace('include::{any}_{path}/orig[]')
234
- expect(includeschanger).to(have_attributes(changes: [%w[one_two/orig one_two/dest]]))
201
+ includeschanger.replace('sub/one_file.adoc', 'include::{any}_{path}/orig[]')
202
+ expect(includeschanger).to(have_attributes(changes: [%w[sub/one_two/orig sub/one_two/dest]]))
203
+ end
204
+ end
205
+
206
+ context 'when definition\'s type does not fit a value' do
207
+ subject(:includeschanger) do
208
+ described_class.new(def_type: 'requirement', from_regexp: 'orig', to_template: 'dest')
209
+ end
210
+
211
+ it do
212
+ includeschanger.replace('sub/one_file.adoc', '[define,whatever,REFERENCE]')
213
+ includeschanger.replace('sub/one_file.adoc', '--')
214
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
215
+ .to(eq("include::orig[]\n"))
216
+ end
217
+
218
+ it do
219
+ includeschanger.replace('sub/one_file.adoc', '[define,requirement,REFERENCE]')
220
+ includeschanger.replace('sub/one_file.adoc', '--')
221
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
222
+ .to(eq("include::dest[]\n"))
223
+ end
224
+ end
225
+
226
+ context 'when definition\'s type is not included in a list' do
227
+ subject(:includeschanger) do
228
+ described_class.new(def_type: %w[requirement pouet], from_regexp: 'orig', to_template: 'dest')
229
+ end
230
+
231
+ it do
232
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
233
+ .to(eq("include::orig[]\n"))
234
+ end
235
+
236
+ it do
237
+ includeschanger.replace('sub/one_file.adoc', '[define,whatever,REFERENCE]')
238
+ includeschanger.replace('sub/one_file.adoc', '--')
239
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
240
+ .to(eq("include::orig[]\n"))
241
+ end
242
+
243
+ it do
244
+ includeschanger.replace('sub/one_file.adoc', '[define,requirement,REFERENCE]')
245
+ includeschanger.replace('sub/one_file.adoc', '--')
246
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
247
+ .to(eq("include::dest[]\n"))
248
+ end
249
+
250
+ it do
251
+ includeschanger.replace('sub/one_file.adoc', '[define,pouet,REFERENCE]')
252
+ includeschanger.replace('sub/one_file.adoc', '--')
253
+ expect(includeschanger.replace('sub/one_file.adoc', "include::orig[]\n"))
254
+ .to(eq("include::dest[]\n"))
235
255
  end
236
256
  end
237
257
  end
@@ -55,11 +55,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefChecksum) do
55
55
  end
56
56
 
57
57
  describe '#replace' do
58
- subject(:modifier) do
59
- described_class.new(
60
- def_type: 'requirement'
61
- )
62
- end
58
+ subject(:modifier) { described_class.new(def_type: 'requirement') }
63
59
 
64
60
  let(:definition) { instance_double(Defmastership::Definition, 'definition') }
65
61
  let(:document) { instance_double(Defmastership::Document, 'document') }
@@ -70,10 +66,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefChecksum) do
70
66
  end
71
67
 
72
68
  context 'when definition has not the good type' do
73
- it do
74
- expect(modifier.replace_reference('[define,req,REFERENCE]'))
75
- .to(eq('[define,req,REFERENCE]'))
76
- end
69
+ it { expect(modifier.replace_reference('', '[define,req,REFERENCE]')).to(eq('[define,req,REFERENCE]')) }
77
70
  end
78
71
 
79
72
  context 'when definition has the good type' do
@@ -84,22 +77,22 @@ RSpec.describe(Defmastership::Modifier::UpdateDefChecksum) do
84
77
  end
85
78
 
86
79
  it do
87
- expect(modifier.replace_reference('[define,requirement,REFERENCE]'))
80
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE]'))
88
81
  .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
89
82
  end
90
83
 
91
84
  it do
92
- expect(modifier.replace_reference('[define,requirement,REFERENCE(~bad)]'))
85
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(~bad)]'))
93
86
  .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
94
87
  end
95
88
 
96
89
  it do
97
- expect(modifier.replace_reference('[define,requirement,REFERENCE(toto~bad)]'))
90
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(toto~bad)]'))
98
91
  .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
99
92
  end
100
93
 
101
94
  it do
102
- expect(modifier.replace_reference('[define,requirement,REFERENCE(toto)]'))
95
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(toto)]'))
103
96
  .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
104
97
  end
105
98
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2020 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
+ require('defmastership/modifier/update_def')
5
+
4
6
  module Defmastership
5
7
  module Modifier
6
8
  # Just a class for tests
@@ -60,19 +62,10 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
60
62
  )
61
63
  end
62
64
 
63
- it do
64
- expect(modifier.do_modifications(adoc_sources).fetch('file1.adoc'))
65
- .to(include('REFERENCE_something_'))
66
- end
65
+ it { expect(modifier.do_modifications(adoc_sources).fetch('file1.adoc')).to(include('REFERENCE_something_')) }
67
66
  end
68
67
 
69
68
  describe '#replace_reference' do
70
- subject(:modifier) do
71
- Defmastership::Modifier::ConcreteRef.new(
72
- def_type: 'requirement'
73
- )
74
- end
75
-
76
69
  let(:definition) { instance_double(Defmastership::Definition, 'definition') }
77
70
  let(:document) { instance_double(Defmastership::Document, 'document') }
78
71
  let(:definitions) { { 'REFERENCE' => definition } }
@@ -81,21 +74,45 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
81
74
  allow(File).to(receive(:rename))
82
75
  end
83
76
 
84
- context 'when line do not match' do
77
+ context 'when def_type is not specified' do
78
+ subject(:modifier) do
79
+ Defmastership::Modifier::ConcreteRef.new(def_type: '')
80
+ end
81
+
82
+ before do
83
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
84
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
85
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
86
+ end
87
+
85
88
  it do
86
- expect(modifier.replace_reference('[define---,req,REFERENCE(abcd)]'))
87
- .to(eq('[define---,req,REFERENCE(abcd)]'))
89
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(abcd)]'))
90
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
88
91
  end
89
92
  end
90
93
 
91
- context 'when definition has not the good type' do
94
+ context 'when def_type is \'all\'' do
95
+ subject(:modifier) do
96
+ Defmastership::Modifier::ConcreteRef.new(def_type: 'all')
97
+ end
98
+
99
+ before do
100
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
101
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
102
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
103
+ end
104
+
92
105
  it do
93
- expect(modifier.replace_reference('[define,req,REFERENCE(abcd)]'))
94
- .to(eq('[define,req,REFERENCE(abcd)]'))
106
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(abcd)]'))
107
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
95
108
  end
96
109
  end
97
110
 
98
- context 'when definition has the good type' do
111
+ context 'when def_type is a list' do
112
+ subject(:modifier) do
113
+ Defmastership::Modifier::ConcreteRef.new(def_type: %w[requirement pouet])
114
+ end
115
+
99
116
  before do
100
117
  allow(Defmastership::Document).to(receive(:new).and_return(document))
101
118
  allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
@@ -103,18 +120,58 @@ RSpec.describe(Defmastership::Modifier::UpdateDef) do
103
120
  end
104
121
 
105
122
  it do
106
- expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd)]'))
123
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(abcd)]'))
107
124
  .to(eq('[define,requirement,REFERENCE_something_abcd]'))
108
125
  end
109
126
 
110
127
  it do
111
- expect(modifier.replace_reference('[define,requirement,REFERENCE(abcd~bad)]'))
112
- .to(eq('[define,requirement,REFERENCE_something_abcd]'))
128
+ expect(modifier.replace_reference('', '[define,pouet,REFERENCE(abcd)]'))
129
+ .to(eq('[define,pouet,REFERENCE_something_abcd]'))
113
130
  end
114
131
 
115
132
  it do
116
- expect(modifier.replace_reference('// [define,requirement,REFERENCE(abcd~bad)]'))
117
- .to(eq('// [define,requirement,REFERENCE(abcd~bad)]'))
133
+ expect(modifier.replace_reference('', '[define,whatever,REFERENCE(abcd)]'))
134
+ .to(eq('[define,whatever,REFERENCE(abcd)]'))
135
+ end
136
+ end
137
+
138
+ context 'when modifier is specific' do
139
+ subject(:modifier) { Defmastership::Modifier::ConcreteRef.new(def_type: 'requirement') }
140
+
141
+ context 'when line do not match' do
142
+ it do
143
+ expect(modifier.replace_reference('', '[define---,req,REFERENCE(abcd)]'))
144
+ .to(eq('[define---,req,REFERENCE(abcd)]'))
145
+ end
146
+ end
147
+
148
+ context 'when definition has not the good type' do
149
+ it do
150
+ expect(modifier.replace_reference('', '[define,req,REFERENCE(abcd)]')).to(eq('[define,req,REFERENCE(abcd)]'))
151
+ end
152
+ end
153
+
154
+ context 'when definition has the good type' do
155
+ before do
156
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
157
+ allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
158
+ allow(definition).to(receive(:sha256_short).and_return('~abcd1234'))
159
+ end
160
+
161
+ it do
162
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(abcd)]'))
163
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
164
+ end
165
+
166
+ it do
167
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(abcd~bad)]'))
168
+ .to(eq('[define,requirement,REFERENCE_something_abcd]'))
169
+ end
170
+
171
+ it do
172
+ expect(modifier.replace_reference('', '// [define,requirement,REFERENCE(abcd~bad)]'))
173
+ .to(eq('// [define,requirement,REFERENCE(abcd~bad)]'))
174
+ end
118
175
  end
119
176
  end
120
177
  end
@@ -20,13 +20,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
20
20
 
21
21
  describe '#do_modifications' do
22
22
  context 'when only one ref document' do
23
- subject(:modifier) do
24
- described_class.new(
25
- ref_document: 'ref_doc.adoc',
26
- def_type: 'req',
27
- first_version: 'a'
28
- )
29
- end
23
+ subject(:modifier) { described_class.new(ref_document: 'ref_doc.adoc', def_type: 'req', first_version: 'a') }
30
24
 
31
25
  let(:document) { instance_double(Defmastership::Document, 'document') }
32
26
  let(:ref_document) { instance_double(Defmastership::Document, 'ref_document') }
@@ -106,13 +100,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
106
100
  end
107
101
 
108
102
  context 'when ref_tag is provided' do
109
- subject(:modifier) do
110
- described_class.new(
111
- ref_tag: 'THE_TAG',
112
- def_type: 'req',
113
- first_version: 'a'
114
- )
115
- end
103
+ subject(:modifier) { described_class.new(ref_tag: 'THE_TAG', def_type: 'req', first_version: 'a') }
116
104
 
117
105
  let(:document) { instance_double(Defmastership::Document, 'document') }
118
106
  let(:ref_document) { instance_double(Defmastership::Document, 'ref_document') }
@@ -156,12 +144,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
156
144
 
157
145
  context 'when ref_tag and ref_repo is provided' do
158
146
  subject(:modifier) do
159
- described_class.new(
160
- ref_tag: 'THE_TAG',
161
- ref_repo: 'not dot',
162
- def_type: 'req',
163
- first_version: 'a'
164
- )
147
+ described_class.new(ref_tag: 'THE_TAG', ref_repo: 'not dot', def_type: 'req', first_version: 'a')
165
148
  end
166
149
 
167
150
  let(:document) { instance_double(Defmastership::Document, 'document') }
@@ -254,12 +237,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
254
237
  end
255
238
 
256
239
  describe '#replace_reference' do
257
- subject(:modifier) do
258
- described_class.new(
259
- def_type: 'requirement',
260
- first_version: 'a'
261
- )
262
- end
240
+ subject(:modifier) { described_class.new(def_type: 'requirement', first_version: 'a') }
263
241
 
264
242
  let(:document) { instance_double(Defmastership::Document, 'document') }
265
243
  let(:ref_document) { instance_double(Defmastership::Document, 'ref_document') }
@@ -272,10 +250,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
272
250
  end
273
251
 
274
252
  context 'when definition has not the good type' do
275
- it do
276
- expect(modifier.replace_reference('[define,req,REFERENCE]'))
277
- .to(eq('[define,req,REFERENCE]'))
278
- end
253
+ it { expect(modifier.replace_reference('', '[define,req,REFERENCE]')).to(eq('[define,req,REFERENCE]')) }
279
254
  end
280
255
 
281
256
  context 'when definition has the good type' do
@@ -292,19 +267,20 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
292
267
 
293
268
  it do
294
269
  allow(ref_definition).to(receive(:explicit_version).and_return(nil))
295
- expect(modifier.replace_reference('[define,requirement,REFERENCE]'))
296
- .to(eq('[define,requirement,REFERENCE]'))
270
+ expect(
271
+ modifier.replace_reference('', '[define,requirement,REFERENCE]')
272
+ ).to(eq('[define,requirement,REFERENCE]'))
297
273
  end
298
274
 
299
275
  it do
300
276
  allow(ref_definition).to(receive(:explicit_version).and_return('c'))
301
- expect(modifier.replace_reference('[define,requirement,REFERENCE]'))
277
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE]'))
302
278
  .to(eq('[define,requirement,REFERENCE(c)]'))
303
279
  end
304
280
 
305
281
  it do
306
282
  allow(ref_definition).to(receive(:explicit_version).and_return('c'))
307
- expect(modifier.replace_reference('[define,requirement,REFERENCE(tyty~1234)]'))
283
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(tyty~1234)]'))
308
284
  .to(eq('[define,requirement,REFERENCE(c~1234)]'))
309
285
  end
310
286
  end
@@ -325,7 +301,7 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
325
301
  ].each do |ref, from, to|
326
302
  it do
327
303
  allow(ref_definition).to(receive(:explicit_version).and_return(ref))
328
- expect(modifier.replace_reference("[define,requirement,REFERENCE#{from}]"))
304
+ expect(modifier.replace_reference('', "[define,requirement,REFERENCE#{from}]"))
329
305
  .to(eq("[define,requirement,REFERENCE#{to}]"))
330
306
  end
331
307
  end
@@ -337,12 +313,12 @@ RSpec.describe(Defmastership::Modifier::UpdateDefVersion) do
337
313
  end
338
314
 
339
315
  it do
340
- expect(modifier.replace_reference('[define,requirement,REFERENCE(whatever)]'))
316
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(whatever)]'))
341
317
  .to(eq('[define,requirement,REFERENCE]'))
342
318
  end
343
319
 
344
320
  it do
345
- expect(modifier.replace_reference('[define,requirement,REFERENCE(~1234)]'))
321
+ expect(modifier.replace_reference('', '[define,requirement,REFERENCE(~1234)]'))
346
322
  .to(eq('[define,requirement,REFERENCE(~1234)]'))
347
323
  end
348
324
  end