defmastership 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +2 -5
  3. data/config/mutant.yml +2 -1
  4. data/config/rubocop.yml +20 -8
  5. data/defmastership.gemspec +4 -14
  6. data/features/changeref.feature +78 -0
  7. data/features/definition_checksum.feature +118 -0
  8. data/features/definition_version.feature +168 -0
  9. data/features/export.feature +67 -22
  10. data/features/external_ref_checksum.feature +169 -0
  11. data/features/external_ref_version.feature +173 -0
  12. data/features/internal_ref_checksum.feature +77 -0
  13. data/features/internal_ref_version.feature +81 -0
  14. data/features/rename_included_files.feature +28 -0
  15. data/lib/defmastership/app.rb +5 -6
  16. data/lib/defmastership/comment_filter.rb +2 -0
  17. data/lib/defmastership/def_type_list.rb +25 -0
  18. data/lib/defmastership/definition_parser.rb +2 -6
  19. data/lib/defmastership/document.rb +6 -9
  20. data/lib/defmastership/modifier/change_ref.rb +11 -34
  21. data/lib/defmastership/modifier/factory.rb +5 -1
  22. data/lib/defmastership/modifier/rename_included_files.rb +9 -0
  23. data/lib/defmastership/modifier/replacement_formatter.rb +37 -0
  24. data/lib/defmastership/modifier/update_def.rb +5 -1
  25. data/lib/defmastership/modifier/update_eref_checksum.rb +46 -0
  26. data/lib/defmastership/modifier/update_eref_common.rb +77 -0
  27. data/lib/defmastership/modifier/update_eref_version.rb +46 -0
  28. data/lib/defmastership/modifier/update_iref_checksum.rb +51 -0
  29. data/lib/defmastership/modifier/update_iref_common.rb +45 -0
  30. data/lib/defmastership/modifier/update_iref_version.rb +58 -0
  31. data/lib/defmastership/version.rb +1 -1
  32. data/spec/spec_helper.rb +11 -10
  33. data/spec/unit/defmastership/app_spec.rb +32 -19
  34. data/spec/unit/defmastership/batch_modifier_spec.rb +9 -7
  35. data/spec/unit/defmastership/def_type_list_spec.rb +22 -0
  36. data/spec/unit/defmastership/definition_spec.rb +8 -51
  37. data/spec/unit/defmastership/document_spec.rb +12 -36
  38. data/spec/unit/defmastership/export/body_formatter_spec.rb +5 -18
  39. data/spec/unit/defmastership/export/csv/formatter_spec.rb +1 -0
  40. data/spec/unit/defmastership/export/header_formatter_spec.rb +2 -6
  41. data/spec/unit/defmastership/hash_spec.rb +2 -0
  42. data/spec/unit/defmastership/modifier/change_ref_spec.rb +33 -70
  43. data/spec/unit/defmastership/modifier/factory_spec.rb +40 -17
  44. data/spec/unit/defmastership/modifier/modifier_common_spec.rb +2 -0
  45. data/spec/unit/defmastership/modifier/rename_included_files_spec.rb +62 -46
  46. data/spec/unit/defmastership/modifier/update_def_checksum_spec.rb +2 -9
  47. data/spec/unit/defmastership/modifier/update_def_spec.rb +76 -21
  48. data/spec/unit/defmastership/modifier/update_def_version_spec.rb +6 -32
  49. data/spec/unit/defmastership/modifier/update_eref_checksum_spec.rb +200 -0
  50. data/spec/unit/defmastership/modifier/update_eref_version_spec.rb +215 -0
  51. data/spec/unit/defmastership/modifier/update_iref_checksum_spec.rb +133 -0
  52. data/spec/unit/defmastership/modifier/update_iref_version_spec.rb +162 -0
  53. data/tasks/code_quality.rake +1 -8
  54. data/tasks/test.rake +15 -0
  55. metadata +34 -3
@@ -0,0 +1,162 @@
1
+ # Copyright (c) 2025 Jerome Arbez-Gindre
2
+ # frozen_string_literal: true
3
+
4
+ require('defmastership/modifier/update_iref_version')
5
+
6
+ RSpec.describe(Defmastership::Modifier::UpdateIrefVersion) do
7
+ subject(:modifier) { described_class.new({}) }
8
+
9
+ describe '.new' do
10
+ it { is_expected.not_to(be_nil) }
11
+ it { expect(described_class.ancestors).to(include(Defmastership::Modifier::ModifierCommon)) }
12
+ it { is_expected.to(have_attributes(config: {})) }
13
+ end
14
+
15
+ describe '.replacement_methods' do
16
+ it { expect(described_class.replacement_methods).to(eq(%i[replace_irefs])) }
17
+ end
18
+
19
+ describe '#do_modifications' do
20
+ let(:document) { instance_double(Defmastership::Document, 'document') }
21
+ let(:adoc_sources) do
22
+ {
23
+ 'file1.adoc' => 'pouet',
24
+ 'file2.adoc' => 'tagada'
25
+ }
26
+ end
27
+
28
+ before do
29
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
30
+ allow(document).to(receive(:parse_file_with_preprocessor))
31
+ allow_any_instance_of(Defmastership::Modifier::ModifierCommon).to(receive(:do_modifications).and_return(adoc_sources))
32
+
33
+ modifier.do_modifications(adoc_sources)
34
+ end
35
+
36
+ it { expect(Defmastership::Document).to(have_received(:new)) }
37
+
38
+ it do
39
+ expect(document).to(
40
+ have_received(:parse_file_with_preprocessor)
41
+ .once.with('file1.adoc')
42
+ .once.with('file2.adoc')
43
+ )
44
+ end
45
+
46
+ it { expect(modifier.do_modifications(adoc_sources)).to(eq(adoc_sources)) }
47
+
48
+ it 'call the parent method' do
49
+ expect_any_instance_of(Defmastership::Modifier::ModifierCommon).to(receive(:do_modifications).with(adoc_sources))
50
+ modifier.do_modifications(adoc_sources)
51
+ end
52
+ end
53
+
54
+ describe '#replace_irefs' do
55
+ let(:document) { instance_double(Defmastership::Document, 'document') }
56
+ let(:definition) { instance_double(Defmastership::Definition, 'definition') }
57
+
58
+ before do
59
+ allow(Defmastership::Document).to(receive(:new).and_return(document))
60
+ end
61
+
62
+ context 'when the line is matching a good internal ref definition (with version)' do
63
+ before do
64
+ allow(document).to(receive(:ref_to_def).and_return(definition))
65
+ allow(definition).to(receive(:explicit_version).and_return('z'))
66
+ end
67
+
68
+ [
69
+ ['', '(z)'],
70
+ ['(~abcd1234)', '(z~abcd1234)'],
71
+ ['(a)', '(z)'],
72
+ ['(a~abcd1234)', '(z~abcd1234)']
73
+ ].each do |from, to|
74
+ it do
75
+ modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever")
76
+ expect(document).to(have_received(:ref_to_def).with('THE_REF'))
77
+ end
78
+
79
+ it do
80
+ modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever")
81
+ expect(definition).to(have_received(:explicit_version))
82
+ end
83
+
84
+ it {
85
+ expect(modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever"))
86
+ .to(eq("whatever defs:iref[THE_REF#{to}] whatever"))
87
+ }
88
+ end
89
+ end
90
+
91
+ context 'when the line is matching a good internal ref definition (without version)' do
92
+ before do
93
+ allow(document).to(receive(:ref_to_def).and_return(definition))
94
+ allow(definition).to(receive(:explicit_version).and_return(nil))
95
+ end
96
+
97
+ [
98
+ ['', ''],
99
+ ['(~abcd1234)', '(~abcd1234)'],
100
+ ['(a)', ''],
101
+ ['(a~abcd1234)', '(~abcd1234)']
102
+ ].each do |from, to|
103
+ it do
104
+ modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever")
105
+ expect(document).to(have_received(:ref_to_def).with('THE_REF'))
106
+ end
107
+
108
+ it do
109
+ modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever")
110
+ expect(definition).to(have_received(:explicit_version))
111
+ end
112
+
113
+ it {
114
+ expect(modifier.replace_irefs("whatever defs:iref[THE_REF#{from}] whatever"))
115
+ .to(eq("whatever defs:iref[THE_REF#{to}] whatever"))
116
+ }
117
+ end
118
+ end
119
+
120
+ context 'when the definition does not exist' do
121
+ before do
122
+ allow(document).to(receive(:ref_to_def).and_return(nil))
123
+ end
124
+
125
+ it do
126
+ modifier.replace_irefs('whatever defs:iref[BAD_REF(a~abcd1234)] whatever')
127
+ expect(document).to(have_received(:ref_to_def).with('BAD_REF'))
128
+ end
129
+
130
+ it {
131
+ expect(modifier.replace_irefs('whatever defs:iref[BAD_REF(a~abcd1234)] whatever'))
132
+ .to(eq('whatever defs:iref[BAD_REF(a~abcd1234)] whatever'))
133
+ }
134
+ end
135
+
136
+ context 'when the line is not a valid iref' do
137
+ it { expect(modifier.replace_irefs('bla bla')).to(eq('bla bla')) }
138
+ end
139
+
140
+ context 'when the line is matching more than one iref' do
141
+ let(:other_definition) { instance_double(Defmastership::Definition, 'other_definition') }
142
+
143
+ before do
144
+ allow(document).to(receive(:ref_to_def).with('REF1').and_return(definition))
145
+ allow(document).to(receive(:ref_to_def).with('REF2').and_return(other_definition))
146
+ allow(definition).to(receive(:explicit_version).and_return('pouet'))
147
+ allow(other_definition).to(receive(:explicit_version).and_return('tagada'))
148
+ modifier.replace_irefs('defs:iref[REF1], defs:iref[REF2]')
149
+ end
150
+
151
+ it { expect(document).to(have_received(:ref_to_def).with('REF1')) }
152
+ it { expect(document).to(have_received(:ref_to_def).with('REF2')) }
153
+ it { expect(definition).to(have_received(:explicit_version)) }
154
+ it { expect(other_definition).to(have_received(:explicit_version)) }
155
+
156
+ it {
157
+ expect(modifier.replace_irefs('defs:iref[REF1], defs:iref[REF2]'))
158
+ .to(eq('defs:iref[REF1(pouet)], defs:iref[REF2(tagada)]'))
159
+ }
160
+ end
161
+ end
162
+ end
@@ -56,14 +56,7 @@ namespace 'quality' do
56
56
  end
57
57
 
58
58
  desc 'Runs all quality code check'
59
- task(
60
- all: [
61
- 'quality:rubocop',
62
- 'quality:reek',
63
- 'quality:flay',
64
- 'quality:rubycritic'
65
- ]
66
- )
59
+ task(all: ['quality:rubocop', 'quality:reek', 'quality:flay', 'quality:rubycritic'])
67
60
  end
68
61
  # rubocop:enable Metrics/BlockLength
69
62
 
data/tasks/test.rake CHANGED
@@ -16,6 +16,18 @@ namespace 'test' do
16
16
  t.cucumber_opts = ['--profile wip']
17
17
  end
18
18
 
19
+ desc 'mutation testing'
20
+ task :mutation do
21
+ sh 'mutant run'
22
+ end
23
+
24
+ namespace 'mutation' do
25
+ desc 'mutation testing (fail fast)'
26
+ task :ff do
27
+ sh 'mutant run --fail-fast'
28
+ end
29
+ end
30
+
19
31
  desc 'Runs all unit tests and acceptance tests'
20
32
  task(all: ['test:spec', 'test:features'])
21
33
  end
@@ -28,3 +40,6 @@ task(test: 'test:all')
28
40
 
29
41
  desc('Test all features')
30
42
  task(cucumber: 'test:features')
43
+
44
+ desc 'Synonym for test:mutation'
45
+ task(mutation: 'test:mutation')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defmastership
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jérôme Arbez-Gindre
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.5'
60
+ version: 1.5.3
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.5'
67
+ version: 1.5.3
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: facets
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +107,20 @@ dependencies:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
109
  version: '2.22'
110
+ - !ruby/object:Gem::Dependency
111
+ name: memoist
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.16'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.16'
110
124
  - !ruby/object:Gem::Dependency
111
125
  name: ostruct
112
126
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +161,10 @@ files:
147
161
  - features/defmastership.feature
148
162
  - features/defmastership_version.feature
149
163
  - features/export.feature
164
+ - features/external_ref_checksum.feature
165
+ - features/external_ref_version.feature
166
+ - features/internal_ref_checksum.feature
167
+ - features/internal_ref_version.feature
150
168
  - features/modify.feature
151
169
  - features/rename_included_files.feature
152
170
  - features/step_definitions/defmastership_steps.rb
@@ -156,6 +174,7 @@ files:
156
174
  - lib/defmastership/batch_modifier.rb
157
175
  - lib/defmastership/comment_filter.rb
158
176
  - lib/defmastership/config_preserver.rb
177
+ - lib/defmastership/def_type_list.rb
159
178
  - lib/defmastership/definition.rb
160
179
  - lib/defmastership/definition_parser.rb
161
180
  - lib/defmastership/document.rb
@@ -169,14 +188,22 @@ files:
169
188
  - lib/defmastership/modifier/factory.rb
170
189
  - lib/defmastership/modifier/modifier_common.rb
171
190
  - lib/defmastership/modifier/rename_included_files.rb
191
+ - lib/defmastership/modifier/replacement_formatter.rb
172
192
  - lib/defmastership/modifier/update_def.rb
173
193
  - lib/defmastership/modifier/update_def_checksum.rb
174
194
  - lib/defmastership/modifier/update_def_version.rb
195
+ - lib/defmastership/modifier/update_eref_checksum.rb
196
+ - lib/defmastership/modifier/update_eref_common.rb
197
+ - lib/defmastership/modifier/update_eref_version.rb
198
+ - lib/defmastership/modifier/update_iref_checksum.rb
199
+ - lib/defmastership/modifier/update_iref_common.rb
200
+ - lib/defmastership/modifier/update_iref_version.rb
175
201
  - lib/defmastership/version.rb
176
202
  - spec/spec_helper.rb
177
203
  - spec/unit/defmastership/app_spec.rb
178
204
  - spec/unit/defmastership/batch_modifier_spec.rb
179
205
  - spec/unit/defmastership/config_preserver_spec.rb
206
+ - spec/unit/defmastership/def_type_list_spec.rb
180
207
  - spec/unit/defmastership/definition_parser_spec.rb
181
208
  - spec/unit/defmastership/definition_spec.rb
182
209
  - spec/unit/defmastership/document_spec.rb
@@ -192,6 +219,10 @@ files:
192
219
  - spec/unit/defmastership/modifier/update_def_checksum_spec.rb
193
220
  - spec/unit/defmastership/modifier/update_def_spec.rb
194
221
  - spec/unit/defmastership/modifier/update_def_version_spec.rb
222
+ - spec/unit/defmastership/modifier/update_eref_checksum_spec.rb
223
+ - spec/unit/defmastership/modifier/update_eref_version_spec.rb
224
+ - spec/unit/defmastership/modifier/update_iref_checksum_spec.rb
225
+ - spec/unit/defmastership/modifier/update_iref_version_spec.rb
195
226
  - spec/unit/defmastership/string_spec.rb
196
227
  - spec/unit/defmastership_spec.rb
197
228
  - tasks/code_quality.rake