defmastership 1.0.2 → 1.0.7

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