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
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require('csv')
5
- require('defmastership')
5
+ require('defmastership/csv_formatter')
6
6
  require('ostruct')
7
7
 
8
8
  RSpec.describe(DefMastership::CSVFormatter) do
@@ -16,15 +16,22 @@ RSpec.describe(DefMastership::CSVFormatter) do
16
16
 
17
17
  describe '#export_to' do
18
18
  let(:header) { instance_double(DefMastership::CSVFormatterHeader, 'header') }
19
- let(:body) { instance_double(DefMastership::CSVFormatterBody, 'body') }
20
- let(:csv) { instance_double(CSV, 'csv') }
19
+ let(:bodies) do
20
+ [
21
+ instance_double(DefMastership::CSVFormatterBody, 'bodies[0]'),
22
+ instance_double(DefMastership::CSVFormatterBody, 'bodies[1]')
23
+ ]
24
+ end
25
+ let(:csv) { instance_double(CSV, 'csv') }
21
26
 
22
27
  before do
23
- allow(CSV).to(receive(:open).and_yield(csv))
28
+ allow(CSV).to(receive(:open).with('whatever', 'w:ISO-8859-1', col_sep: ';').and_yield(csv))
24
29
  allow(csv).to(receive(:<<))
25
30
  allow(DefMastership::CSVFormatterHeader).to(receive(:new).with(document).and_return(header))
26
- allow(DefMastership::CSVFormatterBody).to(receive(:new).with(document).and_return(body))
27
- allow(document).to(receive(:definitions).and_return(%i[def1 def2]))
31
+ bodies.each_with_index do |body, index|
32
+ allow(DefMastership::CSVFormatterBody).to(receive(:new).with(document, :"def#{index}").and_return(body))
33
+ end
34
+ allow(document).to(receive(:definitions).and_return(%i[def0 def1]))
28
35
  allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
29
36
  allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
30
37
  allow(document).to(receive(:labels).with(no_args).and_return([]))
@@ -39,21 +46,26 @@ RSpec.describe(DefMastership::CSVFormatter) do
39
46
  before do
40
47
  methods.each do |method|
41
48
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
42
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
43
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
49
+ bodies.each_with_index do |body, index|
50
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
51
+ end
44
52
  end
45
53
  formatter.export_to('whatever')
46
54
  end
47
55
 
56
+ it { expect(CSV).to(have_received(:open).with('whatever', 'w:ISO-8859-1', col_sep: ';')) }
57
+
48
58
  methods.each do |method|
49
59
  it { expect(header).to(have_received(method).with(no_args)) }
50
- it { expect(body).to(have_received(method).with(:def1)) }
51
- it { expect(body).to(have_received(method).with(:def2)) }
60
+
61
+ 2.times do |index|
62
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
63
+ end
52
64
  end
53
65
 
54
66
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
67
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
55
68
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
56
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
57
69
  end
58
70
 
59
71
  context 'when wrong_explicit_checksum' do
@@ -62,8 +74,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
62
74
  before do
63
75
  methods.each do |method|
64
76
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
65
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
66
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
77
+ bodies.each_with_index do |body, index|
78
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
79
+ end
67
80
  end
68
81
  allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
69
82
  formatter.export_to('whatever')
@@ -71,13 +84,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
71
84
 
72
85
  methods.each do |method|
73
86
  it { expect(header).to(have_received(method).with(no_args)) }
74
- it { expect(body).to(have_received(method).with(:def1)) }
75
- it { expect(body).to(have_received(method).with(:def2)) }
87
+
88
+ 2.times do |index|
89
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
90
+ end
76
91
  end
77
92
 
78
93
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
94
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
79
95
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
80
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
81
96
  end
82
97
 
83
98
  context 'when explicit_version' do
@@ -86,8 +101,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
86
101
  before do
87
102
  methods.each do |method|
88
103
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
89
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
90
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
104
+ bodies.each_with_index do |body, index|
105
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
106
+ end
91
107
  end
92
108
  allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
93
109
  formatter.export_to('whatever')
@@ -95,13 +111,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
95
111
 
96
112
  methods.each do |method|
97
113
  it { expect(header).to(have_received(method).with(no_args)) }
98
- it { expect(body).to(have_received(method).with(:def1)) }
99
- it { expect(body).to(have_received(method).with(:def2)) }
114
+
115
+ 2.times do |index|
116
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
117
+ end
100
118
  end
101
119
 
102
120
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
121
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
103
122
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
104
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
105
123
  end
106
124
 
107
125
  context 'when labels' do
@@ -110,8 +128,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
110
128
  before do
111
129
  methods.each do |method|
112
130
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
113
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
114
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
131
+ bodies.each_with_index do |body, index|
132
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
133
+ end
115
134
  end
116
135
  allow(document).to(receive(:labels).with(no_args).and_return([:whatever]))
117
136
  formatter.export_to('whatever')
@@ -119,13 +138,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
119
138
 
120
139
  methods.each do |method|
121
140
  it { expect(header).to(have_received(method).with(no_args)) }
122
- it { expect(body).to(have_received(method).with(:def1)) }
123
- it { expect(body).to(have_received(method).with(:def2)) }
141
+
142
+ 2.times do |index|
143
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
144
+ end
124
145
  end
125
146
 
126
147
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
148
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
127
149
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
128
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
129
150
  end
130
151
 
131
152
  context 'when eref' do
@@ -134,8 +155,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
134
155
  before do
135
156
  methods.each do |method|
136
157
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
137
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
138
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
158
+ bodies.each_with_index do |body, index|
159
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
160
+ end
139
161
  end
140
162
  allow(document).to(receive(:eref).with(no_args).and_return([:whatever]))
141
163
  formatter.export_to('whatever')
@@ -143,13 +165,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
143
165
 
144
166
  methods.each do |method|
145
167
  it { expect(header).to(have_received(method).with(no_args)) }
146
- it { expect(body).to(have_received(method).with(:def1)) }
147
- it { expect(body).to(have_received(method).with(:def2)) }
168
+
169
+ 2.times do |index|
170
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
171
+ end
148
172
  end
149
173
 
150
174
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
175
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
151
176
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
152
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
153
177
  end
154
178
 
155
179
  context 'when iref' do
@@ -158,8 +182,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
158
182
  before do
159
183
  methods.each do |method|
160
184
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
161
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
162
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
185
+ bodies.each_with_index do |body, index|
186
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
187
+ end
163
188
  end
164
189
  allow(document).to(receive(:iref).with(no_args).and_return(true))
165
190
  formatter.export_to('whatever')
@@ -167,13 +192,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
167
192
 
168
193
  methods.each do |method|
169
194
  it { expect(header).to(have_received(method).with(no_args)) }
170
- it { expect(body).to(have_received(method).with(:def1)) }
171
- it { expect(body).to(have_received(method).with(:def2)) }
195
+
196
+ 2.times do |index|
197
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
198
+ end
172
199
  end
173
200
 
174
201
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
202
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
175
203
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
176
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
177
204
  end
178
205
 
179
206
  context 'when attributes' do
@@ -182,8 +209,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
182
209
  before do
183
210
  methods.each do |method|
184
211
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
185
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
186
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
212
+ bodies.each_with_index do |body, index|
213
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
214
+ end
187
215
  end
188
216
  allow(document).to(receive(:attributes).with(no_args).and_return([:whatever]))
189
217
  formatter.export_to('whatever')
@@ -191,13 +219,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
191
219
 
192
220
  methods.each do |method|
193
221
  it { expect(header).to(have_received(method).with(no_args)) }
194
- it { expect(body).to(have_received(method).with(:def1)) }
195
- it { expect(body).to(have_received(method).with(:def2)) }
222
+
223
+ 2.times do |index|
224
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
225
+ end
196
226
  end
197
227
 
198
228
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
229
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
199
230
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
200
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
201
231
  end
202
232
 
203
233
  context 'when every colums' do
@@ -206,8 +236,9 @@ RSpec.describe(DefMastership::CSVFormatter) do
206
236
  before do
207
237
  methods.each do |method|
208
238
  allow(header).to(receive(method).with(no_args).and_return(["#{method} header"]))
209
- allow(body).to(receive(method).with(:def1).and_return(["#{method} def1 body"]))
210
- allow(body).to(receive(method).with(:def2).and_return(["#{method} def2 body"]))
239
+ bodies.each_with_index do |body, index|
240
+ allow(body).to(receive(method).with(no_args).and_return(["#{method} def#{index} body"]))
241
+ end
211
242
  end
212
243
  allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(true))
213
244
  allow(document).to(receive(:explicit_version?).with(no_args).and_return(true))
@@ -220,54 +251,15 @@ RSpec.describe(DefMastership::CSVFormatter) do
220
251
 
221
252
  methods.each do |method|
222
253
  it { expect(header).to(have_received(method).with(no_args)) }
223
- it { expect(body).to(have_received(method).with(:def1)) }
224
- it { expect(body).to(have_received(method).with(:def2)) }
254
+
255
+ 2.times do |index|
256
+ it { expect(bodies[index]).to(have_received(method).with(no_args)) }
257
+ end
225
258
  end
226
259
 
227
260
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} header" })) }
261
+ it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def0 body" })) }
228
262
  it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def1 body" })) }
229
- it { expect(csv).to(have_received(:<<).with(methods.map { |method| "#{method} def2 body" })) }
230
- end
231
- end
232
-
233
- context 'when #export_to csv file' do
234
- let(:target_file) { 'export.csv' }
235
- let(:definitions) { [double, double] }
236
-
237
- before do
238
- setup_aruba
239
- allow(document).to(receive(:labels).with(no_args).and_return([]))
240
- allow(document).to(receive(:eref).with(no_args).and_return({}))
241
- allow(document).to(receive(:iref).with(no_args).and_return(false))
242
- allow(document).to(receive(:attributes).with(no_args).and_return({}))
243
- allow(document).to(receive(:definitions).with(no_args).and_return(definitions))
244
- allow(definitions[0]).to(receive(:type).and_return('a'))
245
- allow(definitions[0]).to(receive(:reference).and_return('b'))
246
- allow(definitions[0]).to(receive(:value).and_return('c'))
247
- allow(definitions[0]).to(receive(:sha256).and_return('d'))
248
- allow(definitions[1]).to(receive(:type).and_return('d'))
249
- allow(definitions[1]).to(receive(:reference).and_return('e'))
250
- allow(definitions[1]).to(receive(:value).and_return('f'))
251
- allow(definitions[1]).to(receive(:sha256).and_return('g'))
252
- allow(document).to(receive(:wrong_explicit_checksum?).with(no_args).and_return(false))
253
- allow(document).to(receive(:explicit_version?).with(no_args).and_return(false))
254
- formatter.export_to("#{aruba.current_directory}/#{target_file}")
255
- end
256
-
257
- it { expect(document).to(have_received(:labels).with(no_args)) }
258
- it { expect(document).to(have_received(:eref).with(no_args)) }
259
- it { expect(document).to(have_received(:iref).with(no_args)) }
260
- it { expect(document).to(have_received(:attributes).with(no_args)) }
261
- it { expect(document).to(have_received(:definitions).with(no_args)) }
262
- it { expect(document).to(have_received(:wrong_explicit_checksum?).with(no_args)) }
263
- it { expect(document).to(have_received(:explicit_version?).with(no_args)) }
264
-
265
- it do
266
- expect(target_file).to(have_file_content(<<~CSV_FILE))
267
- Type;Reference;Value;Checksum
268
- a;b;c;d
269
- d;e;f;g
270
- CSV_FILE
271
263
  end
272
264
  end
273
265
  end
@@ -1,7 +1,7 @@
1
1
  # Copyright (c) 2020 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
- require('defmastership')
4
+ require('defmastership/definition_parser')
5
5
 
6
6
  RSpec.describe(DefMastership::DefinitionParser) do
7
7
  subject(:parser) { described_class.new(callback_object) }
@@ -1,7 +1,7 @@
1
1
  # Copyright (c) 2020 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
- require('defmastership')
4
+ require('defmastership/definition')
5
5
 
6
6
  RSpec.describe(DefMastership::Definition) do
7
7
  describe '.new' do
@@ -101,9 +101,14 @@ RSpec.describe(DefMastership::Definition) do
101
101
  expect(definition.lines).to(eq(['first line', 'second line']))
102
102
  end
103
103
 
104
- it 'calculates sha256 of value' do
104
+ it 'calculates sha256_short of value' do
105
105
  definition << 'first line' << 'second line'
106
- expect(definition.sha256).to(eq('~beb0535a'))
106
+ expect(definition.sha256_short).to(eq('~beb0535a'))
107
+ end
108
+
109
+ it 'returns the definition and not the "line"' do
110
+ expect { (definition << 'first line').sha256_short }
111
+ .not_to(raise_error)
107
112
  end
108
113
  end
109
114
 
@@ -115,9 +120,14 @@ RSpec.describe(DefMastership::Definition) do
115
120
  )
116
121
  end
117
122
 
118
- it 'shall accept to add one eref' do
119
- definition.add_eref(:foo, ' tutu, titi , pouet')
120
- expect(definition.eref[:foo]).to(eq(%w[tutu titi pouet]))
123
+ [
124
+ 'tutu,titi,pouet',
125
+ ' tutu , titi , pouet '
126
+ ].each do |erefs_cs|
127
+ it 'shall accept to add comma separated erefs' do
128
+ definition.add_eref(:foo, erefs_cs)
129
+ expect(definition.eref[:foo]).to(eq(%w[tutu titi pouet]))
130
+ end
121
131
  end
122
132
  end
123
133
 
@@ -1,7 +1,7 @@
1
1
  # Copyright (c) 2020 Jerome Arbez-Gindre
2
2
  # frozen_string_literal: true
3
3
 
4
- require('defmastership')
4
+ require('defmastership/document')
5
5
 
6
6
  RSpec.describe(DefMastership::Document) do
7
7
  subject(:document) { described_class.new }
@@ -15,16 +15,32 @@ RSpec.describe(DefMastership::Document) do
15
15
  it { is_expected.to(have_attributes(variables: {})) }
16
16
  end
17
17
 
18
+ describe '.method_missing' do
19
+ it do
20
+ expect { document.not_implemented_random_method }
21
+ .to(raise_error(NoMethodError))
22
+ end
23
+ end
24
+
25
+ describe '.respond_to_missing?' do
26
+ it { expect(document.respond_to?(:add_new_definition)).to(be(true)) }
27
+ it { expect(document.respond_to?(:not_implemented_random_method)).to(be(false)) }
28
+ end
29
+
18
30
  describe '#parse' do
19
31
  context 'with valid definitions' do
20
32
  let(:definition) { instance_double(DefMastership::Definition, 'definition') }
21
33
 
22
34
  before do
23
35
  allow(DefMastership::Definition).to(receive(:new).and_return(definition))
24
- allow(definition).to(receive(:labels).and_return(Set.new))
25
- allow(definition).to(receive(:<<).and_return(definition))
26
- allow(definition).to(receive(:add_eref).and_return(definition))
27
- allow(definition).to(receive(:add_iref).and_return(definition))
36
+ allow(definition).to(
37
+ receive_messages(
38
+ labels: Set.new,
39
+ '<<': definition,
40
+ add_eref: definition,
41
+ add_iref: definition
42
+ )
43
+ )
28
44
  end
29
45
 
30
46
  context 'when simple definition line' do
@@ -401,8 +417,12 @@ RSpec.describe(DefMastership::Document) do
401
417
 
402
418
  before do
403
419
  allow(DefMastership::Definition).to(receive(:new).and_return(definition))
404
- allow(definition).to(receive(:labels).and_return(Set.new))
405
- allow(definition).to(receive(:<<).and_return(definition))
420
+ allow(definition).to(
421
+ receive_messages(
422
+ labels: Set.new,
423
+ '<<': definition
424
+ )
425
+ )
406
426
  document.parse(input_lines)
407
427
  end
408
428
 
@@ -431,6 +451,18 @@ RSpec.describe(DefMastership::Document) do
431
451
  it { expect(definition).to(have_received(:<<).with('bef {variable} aft')) }
432
452
  end
433
453
 
454
+ context 'when badly defined variable' do
455
+ let(:input_lines) do
456
+ [
457
+ ':variable:one value',
458
+ '[define, requirement, TOTO-0001]',
459
+ 'bef {variable} aft'
460
+ ]
461
+ end
462
+
463
+ it { expect(definition).to(have_received(:<<).with('bef {variable} aft')) }
464
+ end
465
+
434
466
  context 'when multiple defined variables' do
435
467
  let(:input_lines) do
436
468
  [
@@ -503,8 +535,12 @@ RSpec.describe(DefMastership::Document) do
503
535
  allow(adoc_doc).to(receive(:reader).and_return(adoc_reader))
504
536
  allow(adoc_reader).to(receive(:read_lines).and_return(input_lines))
505
537
  allow(DefMastership::Definition).to(receive(:new).and_return(definition))
506
- allow(definition).to(receive(:<<).and_return(definition))
507
- allow(definition).to(receive(:labels).and_return(Set.new))
538
+ allow(definition).to(
539
+ receive_messages(
540
+ '<<': definition,
541
+ labels: Set.new
542
+ )
543
+ )
508
544
  document.parse_file_with_preprocessor('the_file.adoc')
509
545
  end
510
546
 
@@ -539,30 +575,29 @@ RSpec.describe(DefMastership::Document) do
539
575
  end
540
576
 
541
577
  before do
542
- allow(DefMastership::Definition).to(receive(:new).twice.and_return(defs[0], defs[1]))
543
- allow(defs[0]).to(receive(:labels)).and_return([])
544
- allow(defs[1]).to(receive(:labels)).and_return([])
545
- allow(defs[0]).to(receive(:<<).and_return(defs[0]))
546
- allow(defs[1]).to(receive(:<<).and_return(defs[1]))
578
+ allow(DefMastership::Definition).to(receive(:new).twice.and_return(defs.first, defs[1]))
579
+ defs.each do |definition|
580
+ allow(definition).to(receive(:labels)).and_return([])
581
+ allow(definition).to(receive(:<<)).and_return(definition)
582
+ end
547
583
  end
548
584
 
549
585
  context 'when no wrong explicit checksum' do
550
586
  before do
551
- allow(defs[0]).to(receive(:wrong_explicit_checksum)).and_return(nil)
552
- allow(defs[1]).to(receive(:wrong_explicit_checksum)).and_return(nil)
587
+ defs.each { |definition| allow(definition).to(receive(:wrong_explicit_checksum)).and_return(nil) }
553
588
  document.parse(input_lines)
554
589
  document.wrong_explicit_checksum?
555
590
  end
556
591
 
557
- it { expect(defs[0]).to(have_received(:wrong_explicit_checksum)) }
592
+ it { expect(defs.first).to(have_received(:wrong_explicit_checksum)) }
558
593
  it { expect(defs[1]).to(have_received(:wrong_explicit_checksum)) }
559
594
  it { expect(document.wrong_explicit_checksum?).to(be(false)) }
560
595
  end
561
596
 
562
597
  context 'when one req has wrong explicit checksum' do
563
598
  before do
564
- allow(defs[0]).to(receive(:wrong_explicit_checksum)).and_return(nil)
565
- allow(defs[1]).to(receive(:wrong_explicit_checksum)).and_return('toto')
599
+ allow(defs.first).to(receive(:wrong_explicit_checksum)).and_return('toto')
600
+ allow(defs[1]).to(receive(:wrong_explicit_checksum)).and_return(nil)
566
601
  document.parse(input_lines)
567
602
  document.wrong_explicit_checksum?
568
603
  end
@@ -589,30 +624,30 @@ RSpec.describe(DefMastership::Document) do
589
624
  end
590
625
 
591
626
  before do
592
- allow(DefMastership::Definition).to(receive(:new).twice.and_return(defs[0], defs[1]))
593
- allow(defs[0]).to(receive(:labels)).and_return([])
627
+ allow(DefMastership::Definition).to(receive(:new).twice.and_return(defs.first, defs[1]))
628
+ allow(defs.first).to(receive(:labels)).and_return([])
594
629
  allow(defs[1]).to(receive(:labels)).and_return([])
595
- allow(defs[0]).to(receive(:<<).and_return(defs[0]))
630
+ allow(defs.first).to(receive(:<<).and_return(defs.first))
596
631
  allow(defs[1]).to(receive(:<<).and_return(defs[1]))
597
632
  end
598
633
 
599
634
  context 'when no explicit version' do
600
635
  before do
601
- allow(defs[0]).to(receive(:explicit_version)).and_return(nil)
636
+ allow(defs.first).to(receive(:explicit_version)).and_return(nil)
602
637
  allow(defs[1]).to(receive(:explicit_version)).and_return(nil)
603
638
  document.parse(input_lines)
604
639
  document.explicit_version?
605
640
  end
606
641
 
607
- it { expect(defs[0]).to(have_received(:explicit_version)) }
642
+ it { expect(defs.first).to(have_received(:explicit_version)) }
608
643
  it { expect(defs[1]).to(have_received(:explicit_version)) }
609
644
  it { expect(document.explicit_version?).to(be(false)) }
610
645
  end
611
646
 
612
647
  context 'when one req has explicit version' do
613
648
  before do
614
- allow(defs[0]).to(receive(:explicit_version)).and_return(nil)
615
- allow(defs[1]).to(receive(:explicit_version)).and_return('toto')
649
+ allow(defs.first).to(receive(:explicit_version)).and_return('toto')
650
+ allow(defs[1]).to(receive(:explicit_version)).and_return(nil)
616
651
  document.parse(input_lines)
617
652
  document.explicit_version?
618
653
  end
@@ -622,10 +657,10 @@ RSpec.describe(DefMastership::Document) do
622
657
  end
623
658
 
624
659
  describe '#ref_to_def?' do
625
- let(:defs) do
660
+ let(:definitions) do
626
661
  [
627
- instance_double(DefMastership::Definition, 'definition'),
628
- instance_double(DefMastership::Definition, 'definition')
662
+ instance_double(DefMastership::Definition, 'def1'),
663
+ instance_double(DefMastership::Definition, 'def2')
629
664
  ]
630
665
  end
631
666
  let(:input_lines) do
@@ -639,17 +674,25 @@ RSpec.describe(DefMastership::Document) do
639
674
  end
640
675
 
641
676
  before do
642
- allow(DefMastership::Definition).to(receive(:new).twice.and_return(defs[0], defs[1]))
643
- allow(defs[0]).to(receive(:labels)).and_return([])
644
- allow(defs[1]).to(receive(:labels)).and_return([])
645
- allow(defs[0]).to(receive(:<<).and_return(defs[0]))
646
- allow(defs[1]).to(receive(:<<).and_return(defs[1]))
647
- allow(defs[0]).to(receive(:reference).and_return('TOTO-0001'))
648
- allow(defs[1]).to(receive(:reference).and_return('TOTO-0002'))
677
+ allow(DefMastership::Definition).to(receive(:new).twice.and_return(definitions.first, definitions[1]))
678
+ allow(definitions.first).to(
679
+ receive_messages(
680
+ labels: [],
681
+ '<<': definitions.first,
682
+ reference: 'TOTO-0001'
683
+ )
684
+ )
685
+ allow(definitions[1]).to(
686
+ receive_messages(
687
+ labels: [],
688
+ '<<': definitions[1],
689
+ reference: 'TOTO-0002'
690
+ )
691
+ )
649
692
  document.parse(input_lines)
650
693
  end
651
694
 
652
- it { expect(document.ref_to_def('TOTO-0001')).to(eq(defs[0])) }
653
- it { expect(document.ref_to_def('TOTO-0002')).to(eq(defs[1])) }
695
+ it { expect(document.ref_to_def('TOTO-0001')).to(eq(definitions.first)) }
696
+ it { expect(document.ref_to_def('TOTO-0002')).to(eq(definitions[1])) }
654
697
  end
655
698
  end
@@ -0,0 +1,37 @@
1
+ # Copyright (c) 2024 Jerome Arbez-Gindre
2
+ # frozen_string_literal: true
3
+
4
+ require('defmastership/matching_line')
5
+
6
+ RSpec.describe(DefMastership::MatchingLine) do
7
+ describe '.new' do
8
+ subject(:matching_line) do
9
+ described_class.new(:a_match, :a_line)
10
+ end
11
+
12
+ it { is_expected.not_to(be_nil) }
13
+ it { is_expected.to(have_attributes(match: :a_match)) }
14
+ it { is_expected.to(have_attributes(line: :a_line)) }
15
+ end
16
+
17
+ describe '#[]' do
18
+ subject(:matching_line) do
19
+ described_class.new(match, :a_line)
20
+ end
21
+
22
+ let(:match) { instance_double(Hash, 'match') }
23
+
24
+ before do
25
+ allow(match).to(receive(:[]).with(:whatever).and_return('Whatever'))
26
+ allow(match).to(receive(:[]).with(:line).and_return(nil))
27
+ end
28
+
29
+ it do
30
+ matching_line[:whatever]
31
+ expect(match).to(have_received(:[]).with(:whatever))
32
+ end
33
+
34
+ it { expect(matching_line[:whatever]).to(eq('Whatever')) }
35
+ it { expect(matching_line[:line]).to(eq(:a_line)) }
36
+ end
37
+ end