defmastership 1.0.4 → 1.0.9

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitlab-ci.yml +0 -1
  4. data/.rubocop.yml +1 -1
  5. data/Rakefile +1 -2
  6. data/bin/defmastership +36 -24
  7. data/cucumber.yml +2 -0
  8. data/defmastership.gemspec +14 -8
  9. data/features/changeref.feature +82 -129
  10. data/features/definition_checksum.feature +298 -0
  11. data/features/definition_version.feature +24 -0
  12. data/features/export.feature +49 -31
  13. data/features/modify.feature +165 -0
  14. data/features/rename_included_files.feature +121 -0
  15. data/lib/defmastership.rb +14 -3
  16. data/lib/defmastership/batch_modifier.rb +35 -0
  17. data/lib/defmastership/{ref_changer.rb → change_ref_line_modifier.rb} +18 -35
  18. data/lib/defmastership/change_ref_modifier.rb +15 -0
  19. data/lib/defmastership/constants.rb +14 -1
  20. data/lib/defmastership/csv_formatter.rb +25 -19
  21. data/lib/defmastership/csv_formatter_body.rb +19 -11
  22. data/lib/defmastership/csv_formatter_header.rb +15 -10
  23. data/lib/defmastership/definition.rb +14 -3
  24. data/lib/defmastership/definition_parser.rb +46 -0
  25. data/lib/defmastership/document.rb +59 -85
  26. data/lib/defmastership/filters.rb +30 -0
  27. data/lib/defmastership/line_modifier_base.rb +29 -0
  28. data/lib/defmastership/modifier_base.rb +29 -0
  29. data/lib/defmastership/rename_included_files_line_modifier.rb +126 -0
  30. data/lib/defmastership/rename_included_files_modifier.rb +15 -0
  31. data/lib/defmastership/update_def_checksum_line_modifier.rb +38 -0
  32. data/lib/defmastership/update_def_checksum_modifier.rb +21 -0
  33. data/lib/defmastership/version.rb +1 -1
  34. data/spec/spec_helper.rb +1 -0
  35. data/spec/unit/defmastership/batch_modifier_spec.rb +123 -0
  36. data/spec/unit/defmastership/{ref_changer_spec.rb → change_ref_line_modifier_spec.rb} +48 -26
  37. data/spec/unit/defmastership/change_ref_modifier_spec.rb +76 -0
  38. data/spec/unit/defmastership/comment_filter_spec.rb +8 -4
  39. data/spec/unit/defmastership/csv_formatter_body_spec.rb +88 -82
  40. data/spec/unit/defmastership/csv_formatter_header_spec.rb +68 -22
  41. data/spec/unit/defmastership/csv_formatter_spec.rb +208 -110
  42. data/spec/unit/defmastership/definition_parser_spec.rb +63 -0
  43. data/spec/unit/defmastership/definition_spec.rb +45 -4
  44. data/spec/unit/defmastership/document_spec.rb +236 -35
  45. data/spec/unit/defmastership/rename_included_files_line_modifier_spec.rb +203 -0
  46. data/spec/unit/defmastership/rename_included_files_modifier_spec.rb +67 -0
  47. data/spec/unit/defmastership/update_def_checksum_line_modifier_spec.rb +78 -0
  48. data/spec/unit/defmastership/update_def_checksum_modifier_spec.rb +75 -0
  49. metadata +47 -16
  50. data/Gemfile.lock +0 -140
  51. data/lib/defmastership/batch_changer.rb +0 -41
  52. data/lib/defmastership/project_ref_changer.rb +0 -28
  53. data/spec/unit/defmastership/batch_changer_spec.rb +0 -109
  54. data/spec/unit/defmastership/project_ref_changer_spec.rb +0 -80
@@ -1,41 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- module DefMastership
5
- # Change references from temporary to definitive with multiple RefChangers
6
- class BatchChanger
7
- attr_reader :refchangers
8
-
9
- def initialize
10
- @refchangers = {}
11
- end
12
-
13
- def self.from_h(hash)
14
- new.from_h(hash)
15
- end
16
-
17
- def from_h(hash)
18
- @refchangers =
19
- hash.transform_values do |value|
20
- DefMastership::RefChanger.from_h(value)
21
- end
22
- self
23
- end
24
-
25
- def to_h
26
- @refchangers.transform_values(&:to_h)
27
- end
28
-
29
- def replace(symb, line)
30
- @refchangers.reduce(line) do |res_line, (_, refchanger)|
31
- refchanger.public_send("replace_#{symb}".to_sym, res_line)
32
- end
33
- end
34
-
35
- def changes
36
- @refchangers.reduce([]) do |all_changes, (_, refchanger)|
37
- all_changes + refchanger.changes
38
- end
39
- end
40
- end
41
- end
@@ -1,28 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- module DefMastership
5
- # Change all refs of a given project
6
- class ProjectRefChanger
7
- attr_reader :yaml_config, :adoc_texts, :changes
8
-
9
- def initialize(yaml_config, adoc_texts)
10
- @yaml_config = yaml_config
11
- @adoc_texts = adoc_texts
12
- end
13
-
14
- def replace_all
15
- batch = BatchChanger.from_h(@yaml_config)
16
-
17
- @adoc_texts =
18
- %i[refdef irefs].reduce(@adoc_texts) do |texts, method|
19
- texts.transform_values do |text|
20
- text.lines.map { |line| batch.replace(method, line) }.join
21
- end
22
- end
23
-
24
- @yaml_config = batch.to_h.to_yaml
25
- @changes = batch.changes
26
- end
27
- end
28
- end
@@ -1,109 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
-
6
- RSpec.describe(DefMastership::BatchChanger) do
7
- subject(:batchchanger) { described_class.new }
8
-
9
- describe '.new' do
10
- it { is_expected.not_to(be(nil)) }
11
- it { is_expected.to(have_attributes(refchangers: {})) }
12
- end
13
-
14
- describe '.from_h' do
15
- before do
16
- allow(DefMastership::RefChanger).to(receive(:from_h).once
17
- .with(:whatever_a).and_return(:toto_a))
18
- end
19
-
20
- it { expect(described_class.from_h(a: :whatever_a)).not_to(be(nil)) }
21
-
22
- it {
23
- batchchanger = described_class.from_h(a: :whatever_a)
24
- expect(batchchanger).to(have_attributes(refchangers: { a: :toto_a }))
25
- }
26
- end
27
-
28
- describe '#from_h' do
29
- before do
30
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:whatever_a).and_return(:one))
31
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:whatever_b).and_return(:two))
32
- batchchanger.from_h(a: :whatever_a, b: :whatever_b)
33
- end
34
-
35
- it { expect(DefMastership::RefChanger).to(have_received(:from_h).with(:whatever_a)) }
36
-
37
- it { expect(DefMastership::RefChanger).to(have_received(:from_h).with(:whatever_b)) }
38
-
39
- it { expect(batchchanger).to(have_attributes(refchangers: { a: :one, b: :two })) }
40
- end
41
-
42
- describe '#to_h' do
43
- subject(:batchchanger) { described_class.from_h(a: :a, b: :b) }
44
-
45
- let(:refchanger_a) { instance_double(DefMastership::RefChanger, 'refchanger_a') }
46
- let(:refchanger_b) { instance_double(DefMastership::RefChanger, 'refchanger_b') }
47
-
48
- before do
49
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:a).and_return(refchanger_a))
50
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:b).and_return(refchanger_b))
51
- allow(refchanger_a).to(receive(:to_h).and_return(a_a: :a_a))
52
- allow(refchanger_b).to(receive(:to_h).and_return(b_b: :b_b))
53
- batchchanger.to_h
54
- end
55
-
56
- it { expect(refchanger_a).to(have_received(:to_h)) }
57
-
58
- it { expect(refchanger_b).to(have_received(:to_h)) }
59
-
60
- it do
61
- expect(batchchanger.to_h).to(eq(
62
- a: { a_a: :a_a },
63
- b: { b_b: :b_b }
64
- ))
65
- end
66
- end
67
-
68
- describe 'replace' do
69
- subject(:batchchanger) { described_class.from_h(a: :a, b: :b) }
70
-
71
- let(:refchanger_a) { instance_double(DefMastership::RefChanger, 'refchanger_a') }
72
- let(:refchanger_b) { instance_double(DefMastership::RefChanger, 'refchanger_b') }
73
-
74
- before do
75
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:a).and_return(refchanger_a))
76
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:b).and_return(refchanger_b))
77
- allow(refchanger_a).to(receive(:public_send).with(:replace_toto, 'a line').and_return('b line'))
78
- allow(refchanger_b).to(receive(:public_send).with(:replace_toto, 'b line').and_return('c line'))
79
- batchchanger.replace(:toto, 'a line')
80
- end
81
-
82
- it { expect(refchanger_a).to(have_received(:public_send).with(:replace_toto, 'a line')) }
83
-
84
- it { expect(refchanger_b).to(have_received(:public_send).with(:replace_toto, 'b line')) }
85
-
86
- it { expect(batchchanger.replace(:toto, 'a line')).to(eq('c line')) }
87
- end
88
-
89
- describe 'changes' do
90
- subject(:batchchanger) { described_class.from_h(a: :a, b: :b) }
91
-
92
- let(:refchanger_a) { instance_double(DefMastership::RefChanger, 'refchanger_a') }
93
- let(:refchanger_b) { instance_double(DefMastership::RefChanger, 'refchanger_b') }
94
-
95
- before do
96
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:a).and_return(refchanger_a))
97
- allow(DefMastership::RefChanger).to(receive(:from_h).with(:b).and_return(refchanger_b))
98
- allow(refchanger_a).to(receive(:changes).and_return([%w[a1 a2]]))
99
- allow(refchanger_b).to(receive(:changes).and_return([%w[b1 b2]]))
100
- end
101
-
102
- it do
103
- expect(batchchanger.changes).to(eq([
104
- %w[a1 a2],
105
- %w[b1 b2]
106
- ]))
107
- end
108
- end
109
- end
@@ -1,80 +0,0 @@
1
- # Copyright (c) 2020 Jerome Arbez-Gindre
2
- # frozen_string_literal: true
3
-
4
- require('defmastership')
5
- require('yaml')
6
-
7
- RSpec.describe(DefMastership::ProjectRefChanger) do
8
- subject(:projectrefchanger) do
9
- described_class.new(
10
- 'fake yaml config',
11
- {
12
- 'file1.adoc' => "file1 line1\nfile1 line2",
13
- 'file2.adoc' => "file2 line1\nfile2 line2"
14
- }
15
- )
16
- end
17
-
18
- describe '.new' do
19
- it { is_expected.not_to(be(nil)) }
20
- it { is_expected.to(have_attributes(yaml_config: 'fake yaml config')) }
21
-
22
- it do
23
- expect(projectrefchanger).to(have_attributes(adoc_texts:
24
- {
25
- 'file1.adoc' => "file1 line1\nfile1 line2",
26
- 'file2.adoc' => "file2 line1\nfile2 line2"
27
- }))
28
- end
29
-
30
- it { is_expected.to(have_attributes(changes: nil)) }
31
- end
32
-
33
- describe '#replace_all' do
34
- let(:batch_changer) { instance_double(DefMastership::BatchChanger, 'batch_changer') }
35
- let(:config_hash) { instance_double(Hash, 'config_hash') }
36
-
37
- before do
38
- allow(DefMastership::BatchChanger).to(receive(:from_h).with('fake yaml config').and_return(batch_changer))
39
- allow(batch_changer).to(receive(:replace).with(:refdef, "file1 line1\n").and_return("new file1 line1\n"))
40
- allow(batch_changer).to(receive(:replace).with(:refdef, 'file1 line2').and_return('new file1 line2'))
41
- allow(batch_changer).to(receive(:replace).with(:refdef, "file2 line1\n").and_return("new file2 line1\n"))
42
- allow(batch_changer).to(receive(:replace).with(:refdef, 'file2 line2').and_return('new file2 line2'))
43
- allow(batch_changer).to(receive(:replace).with(:irefs, "new file1 line1\n").and_return("new2 file1 line1\n"))
44
- allow(batch_changer).to(receive(:replace).with(:irefs, 'new file1 line2').and_return('new2 file1 line2'))
45
- allow(batch_changer).to(receive(:replace).with(:irefs, "new file2 line1\n").and_return("new2 file2 line1\n"))
46
- allow(batch_changer).to(receive(:replace).with(:irefs, 'new file2 line2').and_return('new2 file2 line2'))
47
- allow(batch_changer).to(receive(:to_h).and_return(config_hash))
48
- allow(batch_changer).to(receive(:changes).and_return('pouet'))
49
- allow(config_hash).to(receive(:to_yaml).with(no_args).and_return('new fake yaml config'))
50
- projectrefchanger.replace_all
51
- end
52
-
53
- it { expect(DefMastership::BatchChanger).to(have_received(:from_h).with('fake yaml config')) }
54
-
55
- it { expect(batch_changer).to(have_received(:replace).with(:refdef, "file1 line1\n")) }
56
- it { expect(batch_changer).to(have_received(:replace).with(:refdef, 'file1 line2')) }
57
- it { expect(batch_changer).to(have_received(:replace).with(:refdef, "file2 line1\n")) }
58
- it { expect(batch_changer).to(have_received(:replace).with(:refdef, 'file2 line2')) }
59
- it { expect(batch_changer).to(have_received(:replace).with(:irefs, "new file1 line1\n")) }
60
- it { expect(batch_changer).to(have_received(:replace).with(:irefs, 'new file1 line2')) }
61
- it { expect(batch_changer).to(have_received(:replace).with(:irefs, "new file2 line1\n")) }
62
- it { expect(batch_changer).to(have_received(:replace).with(:irefs, 'new file2 line2')) }
63
-
64
- it { expect(batch_changer).to(have_received(:to_h)) }
65
-
66
- it { expect(config_hash).to(have_received(:to_yaml).with(no_args)) }
67
-
68
- it { expect(projectrefchanger).to(have_attributes(yaml_config: 'new fake yaml config')) }
69
-
70
- it do
71
- expect(projectrefchanger).to(have_attributes(adoc_texts: {
72
- 'file1.adoc' => "new2 file1 line1\nnew2 file1 line2",
73
- 'file2.adoc' => "new2 file2 line1\nnew2 file2 line2"
74
- }))
75
- end
76
-
77
- it { expect(batch_changer).to(have_received(:changes)) }
78
- it { expect(projectrefchanger).to(have_attributes(changes: 'pouet')) }
79
- end
80
- end