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
@@ -0,0 +1,85 @@
1
+ # Copyright (c) 2020 Jerome Arbez-Gindre
2
+ # frozen_string_literal: true
3
+
4
+ require('defmastership/document')
5
+ require('defmastership/export/yaml/formatter')
6
+
7
+ RSpec.describe(Defmastership::Export::YAML::Formatter) do
8
+ subject(:formatter) { described_class.new(document) }
9
+
10
+ let(:document) { instance_double(Defmastership::Document, 'document') }
11
+
12
+ describe '.new' do
13
+ it { is_expected.not_to(be_nil) }
14
+ end
15
+
16
+ describe '#export_to' do
17
+ let(:header) { instance_double(Defmastership::Export::HeaderFormatter, 'header') }
18
+ let(:bodies) do
19
+ [
20
+ instance_double(Defmastership::Export::BodyFormatter, 'bodies[0]'),
21
+ instance_double(Defmastership::Export::BodyFormatter, 'bodies[1]')
22
+ ]
23
+ end
24
+
25
+ let(:yaml) { instance_double(YAML, 'yaml') }
26
+ let(:expected_hash_array) do
27
+ [
28
+ {
29
+ 'checksum header': 'checksum def0 body',
30
+ 'reference header': 'reference def0 body',
31
+ 'type header': 'type def0 body',
32
+ 'value header': 'value def0 body'
33
+ },
34
+ {
35
+ 'checksum header': 'checksum def1 body',
36
+ 'reference header': 'reference def1 body',
37
+ 'type header': 'type def1 body',
38
+ 'value header': 'value def1 body'
39
+ }
40
+ ]
41
+ end
42
+
43
+ before do
44
+ allow(Defmastership::Export::HeaderFormatter).to(receive(:new).with(document).and_return(header))
45
+ bodies.each_with_index do |body, index|
46
+ allow(Defmastership::Export::BodyFormatter).to(
47
+ receive(:new).with(
48
+ document,
49
+ :"def#{index}"
50
+ ).and_return(body)
51
+ )
52
+ end
53
+ allow(document).to(receive(:definitions).and_return(%i[def0 def1]))
54
+ allow(document).to(receive(:summaries?).with(no_args).and_return(false))
55
+ allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
56
+ allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
57
+ allow(document).to(receive(:labels).with(no_args).and_return([]))
58
+ allow(document).to(receive(:eref).with(no_args).and_return([]))
59
+ allow(document).to(receive(:iref).with(no_args).and_return(false))
60
+ allow(document).to(receive(:attributes).with(no_args).and_return([]))
61
+
62
+ COLUMN_METHODS.each do |method|
63
+ allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
64
+ bodies.each_with_index do |body, index|
65
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
66
+ end
67
+ end
68
+
69
+ allow(YAML).to(receive(:dump)).and_return('the generated yaml')
70
+ allow(File).to(receive(:write).with('filename', 'the generated yaml'))
71
+ formatter.export_to('filename')
72
+ end
73
+
74
+ COLUMN_METHODS.each do |method|
75
+ it { expect(header).to(have_received(method).with(no_args)) }
76
+
77
+ 2.times do |index|
78
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
79
+ end
80
+ end
81
+
82
+ it { expect(YAML).to(have_received(:dump).with(expected_hash_array)) }
83
+ it { expect(File).to(have_received(:write).with('filename', 'the generated yaml')) }
84
+ end
85
+ end
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2025 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
+ require('defmastership/hash_merge_no_new')
5
+
4
6
  RSpec.describe(Hash) do
5
7
  describe '.merge_no_new' do
6
8
  context 'when we don\'t want to modiy original Hash' do
@@ -12,6 +12,7 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
12
12
  it { is_expected.to(have_attributes(from_regexp: '')) }
13
13
  it { is_expected.to(have_attributes(to_template: '')) }
14
14
  it { is_expected.to(have_attributes(next_ref: 0)) }
15
+ it { is_expected.to(have_attributes(config: { def_type: '', from_regexp: '', to_template: '', next_ref: 0 })) }
15
16
  end
16
17
 
17
18
  describe '.replacement_methods' do
@@ -21,71 +22,48 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
21
22
  end
22
23
  end
23
24
 
24
- describe '#config' do
25
- context 'when not initalized' do
26
- it do
27
- expect(refchanger.config).to(
28
- include(from_regexp: '', to_template: '', next_ref: 0)
29
- )
30
- end
31
- end
32
- end
33
-
34
25
  describe '#replace_refdef' do
35
26
  context 'when really simple rule' do
36
- subject(:refchanger) do
37
- described_class.new(
38
- from_regexp: 'TEMP',
39
- to_template: 'TUTU'
40
- )
41
- end
27
+ subject(:refchanger) { described_class.new(from_regexp: 'TEMP', to_template: 'TUTU') }
42
28
 
43
29
  context 'when valid definition' do
44
30
  it do
45
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
46
- .to(eq('[define, whatever, TUTU]'))
31
+ expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TUTU]'))
47
32
  end
48
33
 
49
34
  it do
50
- expect(refchanger.replace_refdef('[define, whatever, TEMP(a~12345678)]'))
35
+ expect(refchanger.replace_refdef('', '[define, whatever, TEMP(a~12345678)]'))
51
36
  .to(eq('[define, whatever, TUTU(a~12345678)]'))
52
37
  end
53
38
 
54
39
  it do
55
- expect(refchanger.replace_refdef('[define, whatever, TEMP(~12345678)]'))
40
+ expect(refchanger.replace_refdef('', '[define, whatever, TEMP(~12345678)]'))
56
41
  .to(eq('[define, whatever, TUTU(~12345678)]'))
57
42
  end
58
43
 
59
44
  it do
60
- expect(refchanger.replace_refdef('[define, whatever, TEMP(a)]'))
61
- .to(eq('[define, whatever, TUTU(a)]'))
45
+ expect(refchanger.replace_refdef('', '[define, whatever, TEMP(a)]')).to(eq('[define, whatever, TUTU(a)]'))
62
46
  end
63
47
  end
64
48
 
65
49
  context 'when no valid definition' do
66
50
  it do
67
- expect(refchanger.replace_refdef('[pouet, whatever, TEMP]'))
68
- .to(eq('[pouet, whatever, TEMP]'))
51
+ expect(refchanger.replace_refdef('', '[pouet, whatever, TEMP]')).to(eq('[pouet, whatever, TEMP]'))
69
52
  end
70
53
  end
71
54
  end
72
55
 
73
56
  context 'when template is variable' do
74
57
  subject(:refchanger) do
75
- described_class.new(
76
- from_regexp: 'TEMP',
77
- to_template: 'TOTO-%<next_ref>04d',
78
- next_ref: 124
79
- )
58
+ described_class.new(from_regexp: 'TEMP', to_template: 'TOTO-%<next_ref>04d', next_ref: 124)
80
59
  end
81
60
 
82
61
  it do
83
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
84
- .to(eq('[define, whatever, TOTO-0124]'))
62
+ expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TOTO-0124]'))
85
63
  end
86
64
 
87
65
  it do
88
- refchanger.replace_refdef('[define, whatever, TEMP]')
66
+ refchanger.replace_refdef('', '[define, whatever, TEMP]')
89
67
  expect(refchanger).to(have_attributes(next_ref: 125))
90
68
  end
91
69
  end
@@ -100,59 +78,58 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
100
78
  end
101
79
 
102
80
  it do
103
- expect(refchanger.replace_refdef('[define, whatever, TOTO-TEMP]'))
104
- .to(eq('[define, whatever, TOTO-0132]'))
81
+ expect(refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP]')).to(eq('[define, whatever, TOTO-0132]'))
105
82
  end
106
83
 
107
84
  it do
108
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP]')
109
- expect(refchanger.replace_refdef('[define, whatever, TITI-TEMP]'))
110
- .to(eq('[define, whatever, TITI-0133]'))
85
+ refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP]')
86
+ expect(refchanger.replace_refdef('', '[define, whatever, TITI-TEMP]')).to(eq('[define, whatever, TITI-0133]'))
111
87
  end
112
88
 
113
89
  it do
114
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP1]')
115
- refchanger.replace_refdef('[define, whatever, TITI-TEMP2]')
90
+ refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP1]')
91
+ refchanger.replace_refdef('', '[define, whatever, TITI-TEMP2]')
116
92
  expect(refchanger).to(have_attributes(changes: [%w[TOTO-TEMP1 TOTO-0132], %w[TITI-TEMP2 TITI-0133]]))
117
93
  end
118
94
  end
119
95
 
120
96
  context 'when definition is in literal block' do
121
- subject(:refchanger) do
122
- described_class.new(
123
- from_regexp: 'TEMP',
124
- to_template: 'TUTU'
125
- )
126
- end
97
+ subject(:refchanger) { described_class.new(from_regexp: 'TEMP', to_template: 'TUTU') }
127
98
 
128
99
  before do
129
- refchanger.replace_refdef('....')
100
+ refchanger.replace_refdef('', '....')
130
101
  end
131
102
 
132
- it do
133
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
134
- .to(eq('[define, whatever, TEMP]'))
135
- end
103
+ it { expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
136
104
  end
137
105
 
138
- context 'when defintion is after literal block' do
106
+ context 'when definition is after literal block' do
139
107
  subject(:refchanger) do
140
- described_class.new(
141
- from_regexp: 'TEMP',
142
- to_template: 'TUTU'
143
- )
108
+ described_class.new(from_regexp: 'TEMP', to_template: 'TUTU')
144
109
  end
145
110
 
146
111
  before do
147
- refchanger.replace_refdef("....\n")
148
- refchanger.replace_refdef('[define, whatever, TEMP]')
149
- refchanger.replace_refdef("....\n")
112
+ refchanger.replace_refdef('', "....\n")
113
+ refchanger.replace_refdef('', '[define, whatever, TEMP]')
114
+ refchanger.replace_refdef('', "....\n")
150
115
  end
151
116
 
152
- it do
153
- expect(refchanger.replace_refdef('[define, whatever, TEMP]'))
154
- .to(eq('[define, whatever, TUTU]'))
155
- end
117
+ it { expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TUTU]')) }
118
+ end
119
+
120
+ context 'when definition do no fit with a definition\'s type value' do
121
+ subject(:refchanger) { described_class.new(def_type: 'req', from_regexp: 'TEMP', to_template: 'TUTU') }
122
+
123
+ it { expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
124
+ it { expect(refchanger.replace_refdef('', '[define, req, TEMP]')).to(eq('[define, req, TUTU]')) }
125
+ end
126
+
127
+ context 'when definition do no fit with a definition\'s type list' do
128
+ subject(:refchanger) { described_class.new(def_type: %w[req pouet], from_regexp: 'TEMP', to_template: 'TUTU') }
129
+
130
+ it { expect(refchanger.replace_refdef('', '[define, whatever, TEMP]')).to(eq('[define, whatever, TEMP]')) }
131
+ it { expect(refchanger.replace_refdef('', '[define, req, TEMP]')).to(eq('[define, req, TUTU]')) }
132
+ it { expect(refchanger.replace_refdef('', '[define, pouet, TEMP]')).to(eq('[define, pouet, TUTU]')) }
156
133
  end
157
134
  end
158
135
 
@@ -166,33 +143,22 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
166
143
  end
167
144
 
168
145
  before do
169
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP123]')
170
- refchanger.replace_refdef('[define, whatever, TITI-TEMP421]')
146
+ refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP123]')
147
+ refchanger.replace_refdef('', '[define, whatever, TITI-TEMP421]')
171
148
  end
172
149
 
173
- it do
174
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP1234]'))
175
- .to(eq('defs:iref[TOTO-TEMP1234]'))
176
- end
177
-
178
- it do
179
- expect(refchanger.replace_irefs('defs:iref[TOTO-TEMP123]'))
180
- .to(eq('defs:iref[TOTO-0132]'))
181
- end
150
+ it { expect(refchanger.replace_irefs('', 'defs:iref[TOTO-TEMP1234]')).to(eq('defs:iref[TOTO-TEMP1234]')) }
151
+ it { expect(refchanger.replace_irefs('', 'defs:iref[TOTO-TEMP123]')).to(eq('defs:iref[TOTO-0132]')) }
182
152
 
183
153
  it do
184
154
  expect(
185
- refchanger.replace_irefs(
186
- 'defs:iref[TOTO-TEMP123] defs:iref[TITI-TEMP421] bla'
187
- )
155
+ refchanger.replace_irefs('', 'defs:iref[TOTO-TEMP123] defs:iref[TITI-TEMP421] bla')
188
156
  ).to(eq('defs:iref[TOTO-0132] defs:iref[TITI-0133] bla'))
189
157
  end
190
158
 
191
159
  it do
192
160
  expect(
193
- refchanger.replace_irefs(
194
- 'defs:iref[TOTO-TEMP123] defs:iref[TOTO-TEMP123] bla'
195
- )
161
+ refchanger.replace_irefs('', 'defs:iref[TOTO-TEMP123] defs:iref[TOTO-TEMP123] bla')
196
162
  ).to(eq('defs:iref[TOTO-0132] defs:iref[TOTO-0132] bla'))
197
163
  end
198
164
  end
@@ -207,12 +173,12 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
207
173
  end
208
174
 
209
175
  before do
210
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP123]')
211
- refchanger.replace_refdef('[define, whatever, TITI-TEMP421]')
176
+ refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP123]')
177
+ refchanger.replace_refdef('', '[define, whatever, TITI-TEMP421]')
212
178
  end
213
179
 
214
180
  it do
215
- expect(refchanger.replace_irefs('include::target[tags=TOTO-TEMP1234]'))
181
+ expect(refchanger.replace_irefs('', 'include::target[tags=TOTO-TEMP1234]'))
216
182
  .to(eq('include::target[tags=TOTO-TEMP1234]'))
217
183
  end
218
184
 
@@ -225,8 +191,9 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
225
191
  ['tag=!TITI-TEMP421;TOTO-TEMP123', 'tag=!TITI-0133;TOTO-0132']
226
192
  ].each do |from, to|
227
193
  it do
228
- expect(refchanger.replace_include_tags("include::path/target[#{from}]"))
229
- .to(eq("include::path/target[#{to}]"))
194
+ expect(
195
+ refchanger.replace_include_tags('', "include::path/target[#{from}]")
196
+ ).to(eq("include::path/target[#{to}]"))
230
197
  end
231
198
  end
232
199
 
@@ -236,7 +203,7 @@ RSpec.describe(Defmastership::Modifier::ChangeRef) do
236
203
  'include:target[tag=TITI-TEMP421]',
237
204
  '# include::target[tag=TITI-TEMP421]'
238
205
  ].each do |unchanged|
239
- it { expect(refchanger.replace_include_tags(unchanged)).to(eq(unchanged)) }
206
+ it { expect(refchanger.replace_include_tags('', unchanged)).to(eq(unchanged)) }
240
207
  end
241
208
  end
242
209
 
@@ -282,30 +249,32 @@ MIF
282
249
  end
283
250
 
284
251
  before do
285
- refchanger.replace_refdef('[define, whatever, TOTO-TEMP123]')
286
- refchanger.replace_refdef('[define, whatever, TITI-TEMP421]')
252
+ refchanger.replace_refdef('', '[define, whatever, TOTO-TEMP123]')
253
+ refchanger.replace_refdef('', '[define, whatever, TITI-TEMP421]')
287
254
 
288
- allow(File).to(receive(:readlines)).with('target').and_return(['# tag::TOTO-TEMP123'])
289
- allow(File).to(receive(:readlines)).with('path/target').and_return(original_included_file.split)
255
+ allow(File).to(receive(:readlines)).with('sub/target').and_return(['whatever'])
256
+ allow(File).to(receive(:readlines)).with('sub/path/target').and_return(original_included_file.split)
257
+ allow(File).to(receive(:readlines)).with('./path/target').and_return(['whatever'])
258
+ allow(File).to(receive(:readlines)).with('./target').and_return(['whatever'])
290
259
 
291
260
  allow(File).to(receive(:writelines))
292
261
 
293
- refchanger.replace_tags_in_included_files('include::path/target[]')
294
- refchanger.replace_tags_in_included_files('includ::otherpath/othertarget[]')
262
+ refchanger.replace_tags_in_included_files('sub/one_file.adoc', 'include::path/target[]')
263
+ refchanger.replace_tags_in_included_files('', 'includ::otherpath/othertarget[]')
295
264
  end
296
265
 
297
- it { expect(File).to(have_received(:readlines).with('path/target')) }
266
+ it { expect(File).to(have_received(:readlines).with('sub/path/target')) }
298
267
 
299
268
  it do
300
- expect(File).to(
301
- have_received(:writelines).with('path/target', mofified_included_file.split)
302
- )
269
+ expect(File).to(have_received(:writelines).with('sub/path/target', mofified_included_file.split))
303
270
  end
304
271
 
305
272
  it { expect(File).not_to(have_received(:readlines).with('otherpath/othertarget')) }
306
273
 
307
- it { expect(refchanger.replace_tags_in_included_files('include::target[]')).to(eq('include::target[]')) }
274
+ it { expect(refchanger.replace_tags_in_included_files('', 'include::target[]')).to(eq('include::target[]')) }
308
275
 
309
- it { expect(refchanger.replace_tags_in_included_files('include::path/target[]')).to(eq('include::path/target[]')) }
276
+ it do
277
+ expect(refchanger.replace_tags_in_included_files('', 'include::path/target[]')).to(eq('include::path/target[]'))
278
+ end
310
279
  end
311
280
  end
@@ -14,32 +14,55 @@ module Defmastership
14
14
  class TuTu
15
15
  include ModifierCommon
16
16
  end
17
+
18
+ # Modifier example
19
+ class Nono
20
+ include ModifierCommon
21
+ end
17
22
  end
18
23
  end
19
24
 
20
25
  RSpec.describe(Defmastership::Modifier::Factory) do
21
26
  describe('.from_config') do
22
- let(:toto) { instance_double(Defmastership::Modifier::Toto, 'toto') }
23
- let(:toto_config) { { type: 'toto', config: { p: 'whatever' } } }
24
- let(:tutu) { instance_double(Defmastership::Modifier::TuTu, 'tutu') }
25
- let(:tutu_config) { { type: 'tu_tu', config: { p: 'whatever' } } }
26
-
27
- before do
28
- allow(Defmastership::Modifier::Toto).to(receive(:new).with(toto_config[:config]).and_return(toto))
29
- allow(Defmastership::Modifier::TuTu).to(receive(:new).with(tutu_config[:config]).and_return(tutu))
30
- end
27
+ context 'when :config is not empty' do
28
+ let(:toto) { instance_double(Defmastership::Modifier::Toto, 'toto') }
29
+ let(:toto_config) { { type: 'toto', config: { p: 'whatever' } } }
30
+ let(:tutu) { instance_double(Defmastership::Modifier::TuTu, 'tutu') }
31
+ let(:tutu_config) { { type: 'tu_tu', config: { p: 'whatever' } } }
31
32
 
32
- it { expect(described_class.from_config(toto_config)).to(be(toto)) }
33
- it { expect(described_class.from_config(tutu_config)).to(be(tutu)) }
33
+ before do
34
+ allow(Defmastership::Modifier::Toto).to(receive(:new).and_return(toto))
35
+ allow(Defmastership::Modifier::TuTu).to(receive(:new).and_return(tutu))
36
+ end
34
37
 
35
- it do
36
- described_class.from_config(toto_config)
37
- expect(Defmastership::Modifier::Toto).to(have_received(:new).with(toto_config[:config]))
38
+ it { expect(described_class.from_config(toto_config)).to(be(toto)) }
39
+ it { expect(described_class.from_config(tutu_config)).to(be(tutu)) }
40
+
41
+ it do
42
+ described_class.from_config(toto_config)
43
+ expect(Defmastership::Modifier::Toto).to(have_received(:new).with(toto_config[:config]))
44
+ end
45
+
46
+ it do
47
+ described_class.from_config(tutu_config)
48
+ expect(Defmastership::Modifier::TuTu).to(have_received(:new).with(tutu_config[:config]))
49
+ end
38
50
  end
39
51
 
40
- it do
41
- described_class.from_config(tutu_config)
42
- expect(Defmastership::Modifier::TuTu).to(have_received(:new).with(tutu_config[:config]))
52
+ context 'when :config is empty' do
53
+ let(:nono) { instance_double(Defmastership::Modifier::Nono, 'nono') }
54
+ let(:nono_config) { { type: 'nono' } }
55
+
56
+ before do
57
+ allow(Defmastership::Modifier::Nono).to(receive(:new).and_return(nono))
58
+ end
59
+
60
+ it { expect(described_class.from_config(nono_config)).to(be(nono)) }
61
+
62
+ it do
63
+ described_class.from_config(nono_config)
64
+ expect(Defmastership::Modifier::Nono).to(have_received(:new).with({}))
65
+ end
43
66
  end
44
67
  end
45
68
  end
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) 2023 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
+ require('defmastership/modifier/modifier_common')
5
+
4
6
  # just a class for test
5
7
  class DummyClassParent
6
8
  # This method smells of :reek:ControlParameter
@@ -30,13 +32,13 @@ class DummyClass < DummyClassParent
30
32
  end
31
33
 
32
34
  # This method smells of :reek:UtilityFunction
33
- def replace_pouet_by_foo(line)
34
- line.gsub('pouet', 'foo')
35
+ def replace_pouet_by_foo(filename, line)
36
+ line.gsub('pouet', "foo(#{filename})")
35
37
  end
36
38
 
37
39
  # This method smells of :reek:UtilityFunction
38
- def replace_foo_by_zoo(line)
39
- line.gsub('foo', 'zoo')
40
+ def replace_foo_by_zoo(filename, line)
41
+ line.gsub('foo', "zoo(#{filename})")
40
42
  end
41
43
  end
42
44
 
@@ -68,7 +70,7 @@ RSpec.describe(Defmastership::Modifier::ModifierCommon) do
68
70
  adoc_sources = { first: "pouet\ntoto\npouet", second: "toto\npouet\ntoto" }
69
71
 
70
72
  expect(modifier.do_modifications(adoc_sources))
71
- .to(eq({ first: "zoo\ntoto\nzoo", second: "toto\nzoo\ntoto" }))
73
+ .to(eq({ first: "zoo(first)(first)\ntoto\nzoo(first)(first)", second: "toto\nzoo(second)(second)\ntoto" }))
72
74
  end
73
75
  end
74
76
  end