defmastership 1.0.17 → 1.0.18

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +22 -10
  3. data/Gemfile +51 -1
  4. data/Rakefile +16 -61
  5. data/bin/defmastership +9 -6
  6. data/config/mutant.yml +23 -3
  7. data/defmastership.gemspec +0 -10
  8. data/features/definition_checksum.feature +31 -1
  9. data/features/export.feature +43 -1
  10. data/features/rename_included_files.feature +28 -0
  11. data/lib/defmastership/batch_modifier.rb +17 -12
  12. data/lib/defmastership/change_ref_modifier.rb +88 -6
  13. data/lib/defmastership/comment_filter.rb +1 -1
  14. data/lib/defmastership/constants.rb +5 -4
  15. data/lib/defmastership/csv_formatter.rb +16 -12
  16. data/lib/defmastership/csv_formatter_body.rb +18 -15
  17. data/lib/defmastership/csv_formatter_header.rb +1 -1
  18. data/lib/defmastership/definition.rb +58 -19
  19. data/lib/defmastership/document.rb +109 -74
  20. data/lib/defmastership/matching_line.rb +17 -0
  21. data/lib/defmastership/modifier.rb +42 -0
  22. data/lib/defmastership/modifier_factory.rb +12 -0
  23. data/lib/defmastership/parsing_state.rb +15 -9
  24. data/lib/defmastership/rename_included_files_modifier.rb +172 -5
  25. data/lib/defmastership/set_join_hack.rb +11 -0
  26. data/lib/defmastership/update_def_checksum_modifier.rb +8 -13
  27. data/lib/defmastership/update_def_modifier.rb +49 -0
  28. data/lib/defmastership/update_def_version_modifier.rb +56 -15
  29. data/lib/defmastership/version.rb +1 -1
  30. data/lib/defmastership.rb +1 -6
  31. data/spec/spec_helper.rb +3 -1
  32. data/spec/unit/def_mastership/batch_modifier_spec.rb +38 -36
  33. data/spec/unit/def_mastership/change_ref_modifier_spec.rb +196 -51
  34. data/spec/unit/def_mastership/csv_formatter_body_spec.rb +60 -31
  35. data/spec/unit/def_mastership/csv_formatter_header_spec.rb +1 -1
  36. data/spec/unit/def_mastership/csv_formatter_spec.rb +79 -87
  37. data/spec/unit/def_mastership/definition_parser_spec.rb +1 -1
  38. data/spec/unit/def_mastership/definition_spec.rb +16 -6
  39. data/spec/unit/def_mastership/document_spec.rb +81 -38
  40. data/spec/unit/def_mastership/matching_line_spec.rb +37 -0
  41. data/spec/unit/def_mastership/modifier_factory_spec.rb +37 -0
  42. data/spec/unit/def_mastership/modifier_spec.rb +83 -0
  43. data/spec/unit/def_mastership/parsing_state_spec.rb +1 -1
  44. data/spec/unit/def_mastership/rename_included_files_modifier_spec.rb +219 -47
  45. data/spec/unit/def_mastership/string_spec.rb +1 -1
  46. data/spec/unit/def_mastership/update_def_checksum_modifier_spec.rb +82 -50
  47. data/spec/unit/def_mastership/update_def_modifier_spec.rb +119 -0
  48. data/spec/unit/def_mastership/update_def_version_modifier_spec.rb +135 -56
  49. data/tasks/console.rake +8 -0
  50. data/tasks/package.task +9 -0
  51. data/tasks/smelling_code.rake +38 -0
  52. data/tasks/test.rake +45 -0
  53. metadata +16 -153
  54. data/lib/defmastership/change_ref_line_modifier.rb +0 -85
  55. data/lib/defmastership/line_modifier_base.rb +0 -29
  56. data/lib/defmastership/modifier_base.rb +0 -36
  57. data/lib/defmastership/rename_included_files_line_modifier.rb +0 -126
  58. data/lib/defmastership/update_def_checksum_line_modifier.rb +0 -38
  59. data/lib/defmastership/update_def_version_line_modifier.rb +0 -58
  60. data/spec/unit/def_mastership/change_ref_line_modifier_spec.rb +0 -250
  61. data/spec/unit/def_mastership/rename_included_files_line_modifier_spec.rb +0 -207
  62. data/spec/unit/def_mastership/update_def_checksum_line_modifier_spec.rb +0 -82
  63. data/spec/unit/def_mastership/update_def_version_line_modifier_spec.rb +0 -131
@@ -1,207 +0,0 @@
1
- # Copyright (c) 2021 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::RenameIncludedFilesLineModifier) do
7
- subject(:includeschanger) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(from_regexp: '')) }
12
- it { is_expected.to(have_attributes(to_template: '')) }
13
- it { is_expected.to(have_attributes(changes: [])) }
14
-
15
- it do
16
- expect { includeschanger.user_defined_attribute }
17
- .to(raise_error(NoMethodError))
18
- end
19
- end
20
-
21
- describe '.from_config' do
22
- subject(:includeschanger) do
23
- described_class.from_config(
24
- from_regexp: 'Whatever.+',
25
- to_template: 'Whatever'
26
- )
27
- end
28
-
29
- it { is_expected.not_to(be_nil) }
30
- it { is_expected.to(have_attributes(from_regexp: 'Whatever.+')) }
31
- it { is_expected.to(have_attributes(to_template: 'Whatever')) }
32
- end
33
-
34
- describe '#replace' do
35
- context 'when NOT valid include' do
36
- before do
37
- includeschanger.from_config(
38
- from_regexp: 'orig',
39
- cancel_if_match: 'REF',
40
- to_template: 'dest'
41
- )
42
- allow(File).to(receive(:rename))
43
- end
44
-
45
- context 'when the include statement do not match' do
46
- before do
47
- ['[define,requirement,REFERENCE]', '--'].each do |line|
48
- includeschanger.replace(line)
49
- end
50
- end
51
-
52
- it do
53
- expect(includeschanger.replace('badinclude::orig[]'))
54
- .to(eq('badinclude::orig[]'))
55
- end
56
-
57
- it do
58
- includeschanger.replace('badinclude::orig[]')
59
- expect(includeschanger).to(have_attributes(changes: []))
60
- end
61
- end
62
-
63
- context 'when the include is not in a definition' do
64
- before do
65
- ['[define,requirement,REFERENCE]', '--', 'text', '--'].each do |line|
66
- includeschanger.replace(line)
67
- end
68
- end
69
-
70
- it do
71
- expect(includeschanger.replace('include::orig[]'))
72
- .to(eq('include::orig[]'))
73
- end
74
-
75
- it do
76
- includeschanger.replace('include::orig[]')
77
- expect(includeschanger).to(have_attributes(changes: []))
78
- end
79
- end
80
-
81
- context 'when the cancel regexp is met' do
82
- before do
83
- ['[define,requirement,REFERENCE]', '--'].each do |line|
84
- includeschanger.replace(line)
85
- end
86
- end
87
-
88
- it do
89
- expect(includeschanger.replace('include::REFERENCE_orig[]'))
90
- .to(eq('include::REFERENCE_orig[]'))
91
- end
92
-
93
- it do
94
- includeschanger.replace('include::REFERENCE_orig[]')
95
- expect(includeschanger).to(have_attributes(changes: []))
96
- end
97
- end
98
- end
99
-
100
- context 'when valid include' do
101
- before do
102
- allow(File).to(receive(:rename))
103
- end
104
-
105
- context 'when really simple rule' do
106
- before do
107
- includeschanger.from_config(
108
- from_regexp: 'orig',
109
- cancel_if_match: 'REF',
110
- to_template: 'dest'
111
- )
112
- includeschanger.replace('[define,requirement,REFERENCE]')
113
- includeschanger.replace('--')
114
- end
115
-
116
- it do
117
- expect(includeschanger.replace("include::orig[]\n"))
118
- .to(eq("include::dest[]\n"))
119
- end
120
-
121
- it do
122
- includeschanger.replace("include::orig[]\n")
123
- expect(File).to(have_received(:rename).with('orig', 'dest'))
124
- end
125
-
126
- it do
127
- includeschanger.replace("include::orig[]\n")
128
- expect(includeschanger).to(have_attributes(changes: [%w[orig dest]]))
129
- end
130
-
131
- it do
132
- expect(includeschanger.replace("include::toto/orig[]\n"))
133
- .to(eq("include::toto/dest[]\n"))
134
- end
135
-
136
- it do
137
- includeschanger.replace("include::toto/orig[]\n")
138
- expect(File).to(have_received(:rename).with('toto/orig', 'toto/dest'))
139
- end
140
-
141
- it do
142
- includeschanger.replace("include::toto/orig[]\n")
143
- expect(includeschanger).to(have_attributes(changes: [%w[toto/orig toto/dest]]))
144
- end
145
- end
146
-
147
- context 'when complex from_regexp' do
148
- before do
149
- includeschanger.from_config(
150
- from_regexp: '(?<origin>.*\.extension)',
151
- to_template: '%<reference>s_%<origin>s'
152
- )
153
- includeschanger.replace('[define,requirement,REF]')
154
- end
155
-
156
- it do
157
- expect(includeschanger.replace('include::any_path/one_file.extension[]'))
158
- .to(eq('include::any_path/REF_one_file.extension[]'))
159
- end
160
-
161
- it do
162
- includeschanger.replace('include::any_path/one_file.extension[]')
163
- expect(File).to(have_received(:rename).with('any_path/one_file.extension', 'any_path/REF_one_file.extension'))
164
- end
165
-
166
- it do
167
- changes = [%w[any_path/one_file.extension any_path/REF_one_file.extension]]
168
- includeschanger.replace('include::any_path/one_file.extension[]')
169
- expect(includeschanger).to(have_attributes(changes: changes))
170
- end
171
- end
172
-
173
- context 'when path with variable' do
174
- before do
175
- includeschanger.from_config(
176
- from_regexp: 'orig',
177
- to_template: 'dest'
178
- )
179
- includeschanger.replace(':any: one')
180
- includeschanger.replace(':path: two')
181
- includeschanger.replace('[define,requirement,REFERENCE]')
182
- includeschanger.replace('--')
183
- end
184
-
185
- it do
186
- expect(includeschanger.replace('include::{any}/orig[]'))
187
- .to(eq('include::{any}/dest[]'))
188
- end
189
-
190
- it do
191
- includeschanger.replace('include::{any}/orig[]')
192
- expect(File).to(have_received(:rename).with('one/orig', 'one/dest'))
193
- end
194
-
195
- it do
196
- includeschanger.replace('include::{any}_{path}/orig[]')
197
- expect(File).to(have_received(:rename).with('one_two/orig', 'one_two/dest'))
198
- end
199
-
200
- it do
201
- includeschanger.replace('include::{any}_{path}/orig[]')
202
- expect(includeschanger).to(have_attributes(changes: [%w[one_two/orig one_two/dest]]))
203
- end
204
- end
205
- end
206
- end
207
- end
@@ -1,82 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::UpdateDefChecksumLineModifier) do
7
- subject(:linemodifier) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(def_type: '')) }
12
- it { is_expected.to(have_attributes(changes: [])) }
13
-
14
- it do
15
- expect { linemodifier.user_defined_attribute }
16
- .to(raise_error(NoMethodError))
17
- end
18
- end
19
-
20
- describe '.from_config' do
21
- subject(:linemodifier) do
22
- described_class.from_config(
23
- def_type: 'requirement'
24
- )
25
- end
26
-
27
- it { is_expected.not_to(be_nil) }
28
- it { is_expected.to(have_attributes(def_type: 'requirement')) }
29
- it { is_expected.to(have_attributes(document: nil)) }
30
- end
31
-
32
- describe '#replace' do
33
- subject(:linemodifier) do
34
- described_class.from_config(
35
- def_type: 'requirement'
36
- )
37
- end
38
-
39
- let(:definition) { instance_double(DefMastership::Definition, 'definition') }
40
- let(:document) { instance_double(DefMastership::Document, 'document') }
41
- let(:definitions) { { 'REFERENCE' => definition } }
42
-
43
- before do
44
- linemodifier.document = document
45
- allow(File).to(receive(:rename))
46
- end
47
-
48
- context 'when definition has not the good type' do
49
- it do
50
- expect(linemodifier.replace('[define,req,REFERENCE]'))
51
- .to(eq('[define,req,REFERENCE]'))
52
- end
53
- end
54
-
55
- context 'when definition has the good type' do
56
- before do
57
- allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
58
- allow(definition).to(receive(:sha256).and_return('~abcd1234'))
59
- end
60
-
61
- it do
62
- expect(linemodifier.replace('[define,requirement,REFERENCE]'))
63
- .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
64
- end
65
-
66
- it do
67
- expect(linemodifier.replace('[define,requirement,REFERENCE(~bad)]'))
68
- .to(eq('[define,requirement,REFERENCE(~abcd1234)]'))
69
- end
70
-
71
- it do
72
- expect(linemodifier.replace('[define,requirement,REFERENCE(toto~bad)]'))
73
- .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
74
- end
75
-
76
- it do
77
- expect(linemodifier.replace('[define,requirement,REFERENCE(toto)]'))
78
- .to(eq('[define,requirement,REFERENCE(toto~abcd1234)]'))
79
- end
80
- end
81
- end
82
- end
@@ -1,131 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::UpdateDefVersionLineModifier) do
7
- subject(:linemodifier) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be_nil) }
11
- it { is_expected.to(have_attributes(def_type: '')) }
12
- it { is_expected.to(have_attributes(changes: [])) }
13
-
14
- it do
15
- expect { linemodifier.user_defined_attribute }
16
- .to(raise_error(NoMethodError))
17
- end
18
- end
19
-
20
- describe '.from_config' do
21
- subject(:linemodifier) do
22
- described_class.from_config(
23
- def_type: 'requirement',
24
- first_version: 'a'
25
- )
26
- end
27
-
28
- it { is_expected.not_to(be_nil) }
29
- it { is_expected.to(have_attributes(def_type: 'requirement')) }
30
- it { is_expected.to(have_attributes(first_version: 'a')) }
31
- it { is_expected.to(have_attributes(document: nil)) }
32
- it { is_expected.to(have_attributes(ref_document: nil)) }
33
- end
34
-
35
- describe '#replace' do
36
- subject(:linemodifier) do
37
- described_class.from_config(
38
- def_type: 'requirement',
39
- first_version: 'a'
40
- )
41
- end
42
-
43
- let(:document) { instance_double(DefMastership::Document, 'document') }
44
- let(:ref_document) { instance_double(DefMastership::Document, 'ref_document') }
45
- let(:definition) { instance_double(DefMastership::Definition, 'definition') }
46
- let(:ref_definition) { instance_double(DefMastership::Definition, 'ref_definitions') }
47
-
48
- before do
49
- linemodifier.document = document
50
- linemodifier.ref_document = ref_document
51
- allow(File).to(receive(:rename))
52
- end
53
-
54
- context 'when definition has not the good type' do
55
- it do
56
- expect(linemodifier.replace('[define,req,REFERENCE]'))
57
- .to(eq('[define,req,REFERENCE]'))
58
- end
59
- end
60
-
61
- context 'when definition has the good type' do
62
- before do
63
- allow(document).to(receive(:ref_to_def).with('REFERENCE').and_return(definition))
64
- allow(definition).to(receive(:sha256).and_return('~abcd1234'))
65
- end
66
-
67
- context 'when definition has NOT changed' do
68
- before do
69
- allow(ref_document).to(receive(:ref_to_def).with('REFERENCE').and_return(ref_definition))
70
- allow(ref_definition).to(receive(:sha256).and_return('~abcd1234'))
71
- end
72
-
73
- it do
74
- allow(ref_definition).to(receive(:explicit_version).and_return(nil))
75
- expect(linemodifier.replace('[define,requirement,REFERENCE]'))
76
- .to(eq('[define,requirement,REFERENCE]'))
77
- end
78
-
79
- it do
80
- allow(ref_definition).to(receive(:explicit_version).and_return('c'))
81
- expect(linemodifier.replace('[define,requirement,REFERENCE]'))
82
- .to(eq('[define,requirement,REFERENCE(c)]'))
83
- end
84
-
85
- it do
86
- allow(ref_definition).to(receive(:explicit_version).and_return('c'))
87
- expect(linemodifier.replace('[define,requirement,REFERENCE(tyty~1234)]'))
88
- .to(eq('[define,requirement,REFERENCE(c~1234)]'))
89
- end
90
- end
91
-
92
- context 'when definition has changed' do
93
- before do
94
- allow(ref_document).to(receive(:ref_to_def).with('REFERENCE').and_return(ref_definition))
95
- allow(ref_definition).to(receive(:sha256).and_return('~4321aaaa'))
96
- end
97
-
98
- [
99
- [nil, '', '(a)'],
100
- ['c', '', '(d)'],
101
- ['c', '(tyty~1234)', '(d~1234)'],
102
- ['2', '', '(3)'],
103
- ['1222', '', '(1223)'],
104
- ['abb', '', '(abc)']
105
- ].each do |ref, from, to|
106
- it do
107
- allow(ref_definition).to(receive(:explicit_version).and_return(ref))
108
- expect(linemodifier.replace("[define,requirement,REFERENCE#{from}]"))
109
- .to(eq("[define,requirement,REFERENCE#{to}]"))
110
- end
111
- end
112
- end
113
-
114
- context 'when definition is new' do
115
- before do
116
- allow(ref_document).to(receive(:ref_to_def).with('REFERENCE').and_return(nil))
117
- end
118
-
119
- it do
120
- expect(linemodifier.replace('[define,requirement,REFERENCE(whatever)]'))
121
- .to(eq('[define,requirement,REFERENCE]'))
122
- end
123
-
124
- it do
125
- expect(linemodifier.replace('[define,requirement,REFERENCE(~1234)]'))
126
- .to(eq('[define,requirement,REFERENCE(~1234)]'))
127
- end
128
- end
129
- end
130
- end
131
- end