defmastership 1.0.17 → 1.0.18

Sign up to get free protection for your applications and to get access to all the features.
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