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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +0 -1
- data/.rubocop.yml +1 -1
- data/Rakefile +1 -2
- data/bin/defmastership +36 -24
- data/cucumber.yml +2 -0
- data/defmastership.gemspec +14 -8
- data/features/changeref.feature +82 -129
- data/features/definition_checksum.feature +298 -0
- data/features/definition_version.feature +24 -0
- data/features/export.feature +49 -31
- data/features/modify.feature +165 -0
- data/features/rename_included_files.feature +121 -0
- data/lib/defmastership.rb +14 -3
- data/lib/defmastership/batch_modifier.rb +35 -0
- data/lib/defmastership/{ref_changer.rb → change_ref_line_modifier.rb} +18 -35
- data/lib/defmastership/change_ref_modifier.rb +15 -0
- data/lib/defmastership/constants.rb +14 -1
- data/lib/defmastership/csv_formatter.rb +25 -19
- data/lib/defmastership/csv_formatter_body.rb +19 -11
- data/lib/defmastership/csv_formatter_header.rb +15 -10
- data/lib/defmastership/definition.rb +14 -3
- data/lib/defmastership/definition_parser.rb +46 -0
- data/lib/defmastership/document.rb +59 -85
- data/lib/defmastership/filters.rb +30 -0
- data/lib/defmastership/line_modifier_base.rb +29 -0
- data/lib/defmastership/modifier_base.rb +29 -0
- data/lib/defmastership/rename_included_files_line_modifier.rb +126 -0
- data/lib/defmastership/rename_included_files_modifier.rb +15 -0
- data/lib/defmastership/update_def_checksum_line_modifier.rb +38 -0
- data/lib/defmastership/update_def_checksum_modifier.rb +21 -0
- data/lib/defmastership/version.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/defmastership/batch_modifier_spec.rb +123 -0
- data/spec/unit/defmastership/{ref_changer_spec.rb → change_ref_line_modifier_spec.rb} +48 -26
- data/spec/unit/defmastership/change_ref_modifier_spec.rb +76 -0
- data/spec/unit/defmastership/comment_filter_spec.rb +8 -4
- data/spec/unit/defmastership/csv_formatter_body_spec.rb +88 -82
- data/spec/unit/defmastership/csv_formatter_header_spec.rb +68 -22
- data/spec/unit/defmastership/csv_formatter_spec.rb +208 -110
- data/spec/unit/defmastership/definition_parser_spec.rb +63 -0
- data/spec/unit/defmastership/definition_spec.rb +45 -4
- data/spec/unit/defmastership/document_spec.rb +236 -35
- data/spec/unit/defmastership/rename_included_files_line_modifier_spec.rb +203 -0
- data/spec/unit/defmastership/rename_included_files_modifier_spec.rb +67 -0
- data/spec/unit/defmastership/update_def_checksum_line_modifier_spec.rb +78 -0
- data/spec/unit/defmastership/update_def_checksum_modifier_spec.rb +75 -0
- metadata +47 -16
- data/Gemfile.lock +0 -140
- data/lib/defmastership/batch_changer.rb +0 -41
- data/lib/defmastership/project_ref_changer.rb +0 -28
- data/spec/unit/defmastership/batch_changer_spec.rb +0 -109
- 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
|