defmastership 1.0.19 → 1.1.0
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 +3 -0
- data/.gitlab-ci.yml +27 -0
- data/Gemfile +27 -16
- data/LICENSE +1 -1
- data/README.adoc +24 -0
- data/Rakefile +0 -1
- data/bin/defmastership +5 -5
- data/config/mutant.yml +18 -16
- data/config/rubocop.yml +5 -10
- data/defmastership.gemspec +3 -3
- data/lib/defmastership/batch_modifier.rb +23 -5
- data/lib/defmastership/comment_filter.rb +2 -1
- data/lib/defmastership/definition.rb +24 -4
- data/lib/defmastership/definition_parser.rb +2 -2
- data/lib/defmastership/document.rb +39 -19
- data/lib/defmastership/export/body_formatter.rb +55 -0
- data/lib/defmastership/export/csv/formatter.rb +64 -0
- data/lib/defmastership/export/header_formatter.rb +51 -0
- data/lib/defmastership/filters.rb +15 -12
- data/lib/defmastership/matching_line.rb +3 -2
- data/lib/defmastership/modifier/change_ref.rb +117 -0
- data/lib/defmastership/modifier/factory.rb +17 -0
- data/lib/defmastership/modifier/modifier_common.rb +71 -0
- data/lib/defmastership/modifier/rename_included_files.rb +223 -0
- data/lib/defmastership/modifier/update_def.rb +72 -0
- data/lib/defmastership/modifier/update_def_checksum.rb +17 -0
- data/lib/defmastership/modifier/update_def_version.rb +110 -0
- data/lib/defmastership/set_join_hack.rb +2 -0
- data/lib/defmastership/version.rb +3 -2
- data/lib/defmastership.rb +6 -8
- data/spec/unit/{def_mastership → defmastership}/batch_modifier_spec.rb +13 -13
- data/spec/unit/{def_mastership → defmastership}/definition_parser_spec.rb +1 -1
- data/spec/unit/{def_mastership → defmastership}/definition_spec.rb +1 -1
- data/spec/unit/{def_mastership → defmastership}/document_spec.rb +57 -57
- data/spec/unit/{def_mastership/csv_formatter_body_spec.rb → defmastership/export/body_formatter_spec.rb} +4 -4
- data/spec/unit/{def_mastership/csv_formatter_spec.rb → defmastership/export/csv/formatter_spec.rb} +13 -8
- data/spec/unit/{def_mastership/csv_formatter_header_spec.rb → defmastership/export/header_formatter_spec.rb} +3 -3
- data/spec/unit/{def_mastership → defmastership}/matching_line_spec.rb +1 -1
- data/spec/unit/{def_mastership/change_ref_modifier_spec.rb → defmastership/modifier/change_ref_spec.rb} +19 -44
- data/spec/unit/defmastership/modifier/factory_spec.rb +45 -0
- data/spec/unit/{def_mastership/modifier_spec.rb → defmastership/modifier/modifier_common_spec.rb} +3 -12
- data/spec/unit/{def_mastership/rename_included_files_modifier_spec.rb → defmastership/modifier/rename_included_files_spec.rb} +3 -3
- data/spec/unit/{def_mastership/update_def_checksum_modifier_spec.rb → defmastership/modifier/update_def_checksum_spec.rb} +10 -10
- data/spec/unit/{def_mastership/update_def_modifier_spec.rb → defmastership/modifier/update_def_spec.rb} +22 -20
- data/spec/unit/{def_mastership/update_def_version_modifier_spec.rb → defmastership/modifier/update_def_version_spec.rb} +38 -38
- data/spec/unit/{def_mastership_spec.rb → defmastership_spec.rb} +2 -2
- data/tasks/documentation.rake +19 -0
- data/tasks/package.rake +4 -0
- metadata +63 -43
- data/README.rdoc +0 -6
- data/defmastership.rdoc +0 -5
- data/lib/defmastership/change_ref_modifier.rb +0 -99
- data/lib/defmastership/constants.rb +0 -91
- data/lib/defmastership/csv_formatter.rb +0 -53
- data/lib/defmastership/csv_formatter_body.rb +0 -46
- data/lib/defmastership/csv_formatter_header.rb +0 -41
- data/lib/defmastership/modifier.rb +0 -42
- data/lib/defmastership/modifier_factory.rb +0 -12
- data/lib/defmastership/parsing_state.rb +0 -31
- data/lib/defmastership/rename_included_files_modifier.rb +0 -182
- data/lib/defmastership/update_def_checksum_modifier.rb +0 -16
- data/lib/defmastership/update_def_modifier.rb +0 -49
- data/lib/defmastership/update_def_version_modifier.rb +0 -91
- data/spec/unit/def_mastership/modifier_factory_spec.rb +0 -38
- data/spec/unit/def_mastership/parsing_state_spec.rb +0 -62
- data/tasks/package.task +0 -9
- /data/spec/unit/{def_mastership → defmastership}/string_spec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57c8ecae1a1c2e304a23c513b3a65b6c112da30ccaf75fb7f137f9247e9db36c
|
4
|
+
data.tar.gz: 2730ff7b5ef8838d4a131f182099479935ab347f0505b3a5518e6561bc30eb8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4832d0e97edd679f51fe2223bf8eabe28c8e8e2dc14b9b994c055d24c31e14547b3db9fdb962abd843c86d9c370af1c3d3e662a52833260fc0b40b61f70ba7d
|
7
|
+
data.tar.gz: fdbfa9b7b031f10129cb5a7e12c9d3aee542ee86d1f56f406a3e05bd17297a20e99a8ec1ddf537bd61e2f128a0d6d764bdd47659d48e2c9e8166b603bc1ca6df
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -12,15 +12,29 @@ default:
|
|
12
12
|
bdd:
|
13
13
|
script:
|
14
14
|
- bundle exec rake test:features
|
15
|
+
artifacts:
|
16
|
+
paths:
|
17
|
+
- features_results.html
|
15
18
|
|
16
19
|
unit tests:
|
17
20
|
script:
|
18
21
|
- bundle exec rake test:spec
|
22
|
+
artifacts:
|
23
|
+
paths:
|
24
|
+
- rspec_results.html
|
25
|
+
- coverage/*
|
19
26
|
|
20
27
|
code_quality:
|
21
28
|
script:
|
22
29
|
- bundle exec rake quality:all
|
23
30
|
|
31
|
+
yard documentation:
|
32
|
+
script:
|
33
|
+
- bundle exec rake yard
|
34
|
+
artifacts:
|
35
|
+
paths:
|
36
|
+
- doc
|
37
|
+
|
24
38
|
bdd ruby2.7:
|
25
39
|
image: ruby:2.7
|
26
40
|
before_script:
|
@@ -75,3 +89,16 @@ unit tests ruby3.2:
|
|
75
89
|
script:
|
76
90
|
- bundle exec rake test:spec
|
77
91
|
|
92
|
+
pages:
|
93
|
+
stage: deploy
|
94
|
+
script:
|
95
|
+
- mkdir public
|
96
|
+
- cp -r doc/* public
|
97
|
+
- cp "features_results.html" public
|
98
|
+
- cp "rspec_results.html" public
|
99
|
+
- cp -r "coverage" public
|
100
|
+
artifacts:
|
101
|
+
paths:
|
102
|
+
- public
|
103
|
+
only:
|
104
|
+
- master
|
data/Gemfile
CHANGED
@@ -10,9 +10,9 @@ ruby RUBY_VERSION
|
|
10
10
|
# rubocop:disable Metrics/BlockLength
|
11
11
|
group :development do
|
12
12
|
# cucumber steps for command line tests
|
13
|
-
gem 'aruba', '~> 2
|
13
|
+
gem 'aruba', '~> 2'
|
14
14
|
# bdd
|
15
|
-
gem 'cucumber', '~> 9
|
15
|
+
gem 'cucumber', '~> 9'
|
16
16
|
|
17
17
|
# code duplication
|
18
18
|
gem 'flay', '~> 2'
|
@@ -36,40 +36,51 @@ group :development do
|
|
36
36
|
key = '7oac4dMz95cTUuFPtGDfTDSQep6ZhdGW'
|
37
37
|
source "https://#{plan}:#{key}@gem.mutant.dev" do
|
38
38
|
# license needed
|
39
|
-
gem 'mutant-license', '~> 0
|
39
|
+
gem 'mutant-license', '~> 0'
|
40
40
|
end
|
41
41
|
# mutation testing
|
42
|
-
gem 'mutant-rspec', '~> 0
|
42
|
+
gem 'mutant-rspec', '~> 0'
|
43
43
|
end
|
44
44
|
# to parse and execute Rakefile
|
45
|
-
gem 'rake',
|
45
|
+
gem 'rake', '~> 13'
|
46
|
+
|
47
|
+
if RUBY_VERSION >= '3.0'
|
48
|
+
# needed by yard to render documentation
|
49
|
+
gem 'rdoc', '~> 6'
|
50
|
+
end
|
46
51
|
# tdd
|
47
|
-
gem 'rspec', '~> 3
|
52
|
+
gem 'rspec', '~> 3'
|
48
53
|
# # to test performances
|
49
|
-
# gem 'rspec-benchmark', '~> 0
|
54
|
+
# gem 'rspec-benchmark', '~> 0'
|
50
55
|
# code needs to be clean
|
51
|
-
gem 'rubocop', '
|
56
|
+
gem 'rubocop', '1.68'
|
52
57
|
# code needs to be clean
|
53
|
-
gem 'rubocop-performance', '~> 1
|
58
|
+
gem 'rubocop-performance', '~> 1'
|
54
59
|
# test code needs to be clean
|
55
|
-
gem 'rubocop-rspec', '~> 3
|
60
|
+
gem 'rubocop-rspec', '~> 3'
|
56
61
|
# Rakefiles need to be clean
|
57
|
-
gem 'rubocop-rake', '~> 0
|
62
|
+
gem 'rubocop-rake', '~> 0'
|
63
|
+
|
58
64
|
if RUBY_VERSION >= '3.0'
|
59
65
|
# detect selling code
|
60
|
-
gem 'reek', '~> 6
|
66
|
+
gem 'reek', '~> 6'
|
61
67
|
# my code needs to be critiqued
|
62
68
|
gem 'rubycritic', '~> 4'
|
69
|
+
# Doc need to be clean
|
70
|
+
gem 'rubocop-yard', '~> 0'
|
63
71
|
end
|
64
72
|
|
65
73
|
# What is tdd without code coverage ?
|
66
|
-
gem 'simplecov', '~> 0
|
67
|
-
|
68
|
-
|
74
|
+
gem 'simplecov', '~> 0'
|
75
|
+
|
76
|
+
if RUBY_VERSION >= '3.0'
|
77
|
+
# to document code
|
78
|
+
gem 'yard', '~> 0'
|
79
|
+
end
|
69
80
|
end
|
70
81
|
# rubocop:enable Metrics/BlockLength
|
71
82
|
|
72
83
|
group :debugging do
|
73
84
|
# Sometimes, we need to debug
|
74
|
-
gem 'pry', '~> 0
|
85
|
+
gem 'pry', '~> 0'
|
75
86
|
end
|
data/LICENSE
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
MIT License
|
2
2
|
|
3
3
|
Copyright (c) 2020 Jérôme Arbez-Gindre, and the individual contributors
|
4
|
-
to
|
4
|
+
to Defmastership.
|
5
5
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
7
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.adoc
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
= defmastership
|
2
|
+
|
3
|
+
== Features
|
4
|
+
|
5
|
+
* CSV export of https://gitlab.com/defmastership/asciidoctor-defmastership[asciidoctor-defmastership] statements.
|
6
|
+
* Automatic modifications of asciidoc files for : (See https://defmastership.gitlab.io/defmastership-example/defmastership-example.pdf/#_automatic_modifications[list of modifications].)
|
7
|
+
** Computation of definitions reference ids
|
8
|
+
** Explicit checksums updates
|
9
|
+
** Explicit version updates (note: defmastership-examples not updated with last feature modification)
|
10
|
+
|
11
|
+
NOTE: depend on https://gitlab.com/defmastership/defmastership-core[defmastership-core]
|
12
|
+
|
13
|
+
== Development method
|
14
|
+
|
15
|
+
* BDD:
|
16
|
+
** https://gitlab.com/defmastership/defmastership/-/tree/master/features[features].
|
17
|
+
** https://defmastership.gitlab.io/defmastership/features_results.html[features_results.html]
|
18
|
+
|
19
|
+
* TDD:
|
20
|
+
** https://gitlab.com/defmastership/defmastership/-/tree/master/spec/unit/defmastership?ref_type=heads[unit tests (rspec)]
|
21
|
+
** https://defmastership.gitlab.io/defmastership/rspec_results.html[rspec_results.html]
|
22
|
+
** https://defmastership.gitlab.io/defmastership/coverage[Unit tests coverage]
|
23
|
+
|
24
|
+
|
data/Rakefile
CHANGED
data/bin/defmastership
CHANGED
@@ -6,14 +6,14 @@ require('csv')
|
|
6
6
|
require('defmastership')
|
7
7
|
require('gli')
|
8
8
|
|
9
|
-
module
|
9
|
+
module Defmastership
|
10
10
|
# The start of everything !
|
11
11
|
class App
|
12
12
|
extend GLI::App
|
13
13
|
|
14
14
|
program_desc 'Tool to handle Asciidoctor definition extension'
|
15
15
|
|
16
|
-
version
|
16
|
+
version Defmastership::VERSION
|
17
17
|
|
18
18
|
subcommand_option_handling :normal
|
19
19
|
arguments :strict
|
@@ -54,12 +54,12 @@ module DefMastership
|
|
54
54
|
c.switch(%i[no-fail], desc: 'Exit succes even in case of wrong explicit checksum')
|
55
55
|
|
56
56
|
c.action do |_global_options, options, args|
|
57
|
-
my_doc =
|
57
|
+
my_doc = Defmastership::Document.new
|
58
58
|
my_doc.parse_file_with_preprocessor(args.first)
|
59
59
|
|
60
60
|
output_file = args.first.sub(/\.adoc$/, '.csv')
|
61
61
|
|
62
|
-
|
62
|
+
Defmastership::Export::CSV::Formatter.new(my_doc, options['separator']).export_to(output_file)
|
63
63
|
|
64
64
|
if my_doc.wrong_explicit_checksum?
|
65
65
|
my_doc.definitions.each do |definition|
|
@@ -112,4 +112,4 @@ module DefMastership
|
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
exit(
|
115
|
+
exit(Defmastership::App.run(ARGV))
|
data/config/mutant.yml
CHANGED
@@ -11,20 +11,22 @@ requires:
|
|
11
11
|
- defmastership
|
12
12
|
matcher:
|
13
13
|
subjects:
|
14
|
-
-
|
15
|
-
|
16
|
-
|
17
|
-
# -
|
18
|
-
# -
|
19
|
-
# -
|
20
|
-
# -
|
21
|
-
# -
|
22
|
-
# -
|
23
|
-
# -
|
24
|
-
# -
|
25
|
-
# -
|
26
|
-
# -
|
27
|
-
# -
|
28
|
-
# -
|
29
|
-
# -
|
14
|
+
- Defmastership*
|
15
|
+
ignore:
|
16
|
+
- Defmastership::Core*
|
17
|
+
# - Defmastership::BatchModifier*
|
18
|
+
# - Defmastership::Export::CSV::Formatter*
|
19
|
+
# - Defmastership::Export::CSV::BodyFormatter*
|
20
|
+
# - Defmastership::Export::CSV::HeaderFormatter*
|
21
|
+
# - Defmastership::Modifier::ChangeRef*
|
22
|
+
# - Defmastership::Definition*
|
23
|
+
# - Defmastership::DefinitionParser*
|
24
|
+
# - Defmastership::Document*
|
25
|
+
# - Defmastership::Factory*
|
26
|
+
# - Defmastership::Modifier::ModifierCommon*
|
27
|
+
# - Defmastership::Modifier::Factory*
|
28
|
+
# - Defmastership::Modifier::RenameIncludedFiles*
|
29
|
+
# - Defmastership::Modifier::UpdateDefChecksum*
|
30
|
+
# - Defmastership::Modifier::UpdateDef*
|
31
|
+
# - Defmastership::Modifier::UpdateDefVersion*
|
30
32
|
# fail_fast: true
|
data/config/rubocop.yml
CHANGED
@@ -13,6 +13,7 @@ require:
|
|
13
13
|
- rubocop-performance
|
14
14
|
- rubocop-rspec
|
15
15
|
- rubocop-rake
|
16
|
+
- rubocop-yard
|
16
17
|
|
17
18
|
AllCops:
|
18
19
|
TargetRubyVersion: 2.7
|
@@ -34,10 +35,10 @@ Style/StringHashKeys :
|
|
34
35
|
Enabled: true
|
35
36
|
Exclude:
|
36
37
|
- '*.gemspec'
|
37
|
-
- 'spec/unit/
|
38
|
-
- 'spec/unit/
|
39
|
-
- 'spec/unit/
|
40
|
-
- 'spec/unit/
|
38
|
+
- 'spec/unit/defmastership/batch_modifier_spec.rb'
|
39
|
+
- 'spec/unit/defmastership/modifier/update_def_checksum_spec.rb'
|
40
|
+
- 'spec/unit/defmastership/modifier/update_def_spec.rb'
|
41
|
+
- 'spec/unit/defmastership/modifier/update_def_version_spec.rb'
|
41
42
|
|
42
43
|
Style/MissingElse:
|
43
44
|
EnforcedStyle: case
|
@@ -55,12 +56,6 @@ Security/Eval :
|
|
55
56
|
Exclude:
|
56
57
|
- 'Rakefile'
|
57
58
|
|
58
|
-
Style/ConstantVisibility :
|
59
|
-
Exclude:
|
60
|
-
# there is one unique explicit constant visibility for all
|
61
|
-
# constants
|
62
|
-
- 'lib/defmastership/constants.rb'
|
63
|
-
|
64
59
|
# rubocop-rspec options
|
65
60
|
RSpec/MessageExpectation :
|
66
61
|
Enabled: true
|
data/defmastership.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
}
|
21
21
|
spec.required_ruby_version = '>= 2.7'
|
22
22
|
spec.name = 'defmastership'
|
23
|
-
spec.version =
|
23
|
+
spec.version = Defmastership::VERSION
|
24
24
|
spec.author = 'Jérôme Arbez-Gindre'
|
25
25
|
spec.email = 'jeromearbezgindre@gmail.com'
|
26
26
|
spec.licenses = ['MIT']
|
@@ -29,13 +29,13 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.summary = 'Handling of references and definitions with asciidoctor'
|
30
30
|
spec.files = `git ls-files`.split("\n")
|
31
31
|
spec.require_paths << 'lib'
|
32
|
-
spec.extra_rdoc_files = ['README.rdoc', 'defmastership.rdoc']
|
33
|
-
spec.rdoc_options << '--title defmastership' << '--main README.rdoc' << '-ri'
|
34
32
|
spec.bindir = 'bin'
|
35
33
|
spec.executables << 'defmastership'
|
36
34
|
spec.add_dependency('aasm', '~> 5')
|
37
35
|
spec.add_dependency('asciidoctor', '~> 2')
|
38
36
|
spec.add_dependency('csv', '~> 3')
|
37
|
+
spec.add_dependency('defmastership-core', '>= 1.1.0')
|
39
38
|
spec.add_dependency('git', '~> 1')
|
40
39
|
spec.add_dependency('gli', '~> 2')
|
40
|
+
spec.add_dependency('ostruct', '~> 0')
|
41
41
|
end
|
@@ -1,17 +1,35 @@
|
|
1
1
|
# Copyright (c) 2020 Jerome Arbez-Gindre
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
module
|
5
|
-
#
|
4
|
+
module Defmastership
|
5
|
+
# Apply modications on a list of related asciidoc sources
|
6
6
|
class BatchModifier
|
7
|
-
|
8
|
-
|
7
|
+
# Stores the overall invocation configuration
|
8
|
+
# @return [YAML] configuration as eventualy modified by modifiers
|
9
|
+
attr_reader :config
|
10
|
+
# Stores the list of asciidoc files to modify and to save
|
11
|
+
# @return [Hash{String => String}] asciidoc sources as modified by modifiers
|
12
|
+
# * :key filename
|
13
|
+
# * :value file content
|
14
|
+
attr_reader :adoc_sources
|
15
|
+
# Provides the list of performed modifications
|
16
|
+
# @return [Array<Array<String>>] List of performed modifications
|
17
|
+
# (each line: [Modifier, Was, Becomes])
|
18
|
+
attr_reader :changes
|
19
|
+
|
20
|
+
# @param config [YAML] the overall modifications configurations
|
21
|
+
# @param adoc_sources [Hash{String => String}] asciidoctor files to be modified
|
22
|
+
# * Key: filename
|
23
|
+
# * Value: file content
|
9
24
|
def initialize(config, adoc_sources)
|
10
25
|
@config = config
|
11
26
|
@adoc_sources = adoc_sources
|
12
27
|
@changes = []
|
13
28
|
end
|
14
29
|
|
30
|
+
# Apply modications on asciidoc sources of @adoc_sources
|
31
|
+
#
|
32
|
+
# @param modifs [Array<String>] The modifications to apply
|
15
33
|
def apply(modifs)
|
16
34
|
modifs.each do |modif|
|
17
35
|
modifier = modifier_from(modif)
|
@@ -28,7 +46,7 @@ module DefMastership
|
|
28
46
|
config_modif_sym = config[modif]
|
29
47
|
raise(ArgumentError, "#{modif} is not a known modification") unless config_modif_sym
|
30
48
|
|
31
|
-
|
49
|
+
Modifier::Factory.from_config(config_modif_sym)
|
32
50
|
end
|
33
51
|
|
34
52
|
def collect_changes(modifier, modif)
|
@@ -4,7 +4,8 @@
|
|
4
4
|
# adding a method to string to figure out if a string is commented or
|
5
5
|
# not.
|
6
6
|
class String
|
7
|
+
# @return [Boolean] true if the line is commented
|
7
8
|
def commented?
|
8
|
-
!!match(
|
9
|
+
!!match(Defmastership::Core::DMRegexp::SINGLE_LINE_COMMENT)
|
9
10
|
end
|
10
11
|
end
|
@@ -3,8 +3,8 @@
|
|
3
3
|
|
4
4
|
require 'digest'
|
5
5
|
|
6
|
-
# Contains the content of a
|
7
|
-
module
|
6
|
+
# Contains the content of a Defmastership definition
|
7
|
+
module Defmastership
|
8
8
|
BUILD_FROM_MATCH = {
|
9
9
|
type: ->(match) { match[:type] },
|
10
10
|
reference: ->(match) { match[:reference] },
|
@@ -38,7 +38,7 @@ module DefMastership
|
|
38
38
|
|
39
39
|
private_constant :DefinitionData
|
40
40
|
|
41
|
-
#
|
41
|
+
# Defmastership definition: contains all data of a definition
|
42
42
|
class Definition
|
43
43
|
extend Forwardable
|
44
44
|
def_delegators :@data,
|
@@ -52,6 +52,7 @@ module DefMastership
|
|
52
52
|
:explicit_checksum,
|
53
53
|
:explicit_version
|
54
54
|
|
55
|
+
# @param match [MatchData] the definition data from regepx match
|
55
56
|
def initialize(match)
|
56
57
|
@data = DefinitionData.new(
|
57
58
|
*BUILD_FROM_MATCH.transform_values { |lamb| lamb.call(match) }
|
@@ -59,34 +60,53 @@ module DefMastership
|
|
59
60
|
)
|
60
61
|
end
|
61
62
|
|
63
|
+
# Add a line to the definition's value
|
64
|
+
#
|
65
|
+
# @param new_line [String] the new line
|
66
|
+
# @return [Definition] the definition itself
|
62
67
|
def <<(new_line)
|
63
68
|
lines << new_line
|
64
69
|
self
|
65
70
|
end
|
66
71
|
|
72
|
+
# Add a line to the definition's value
|
73
|
+
#
|
74
|
+
# @return [String] the complete value of the definition
|
67
75
|
def value
|
68
76
|
lines.join("\n")
|
69
77
|
end
|
70
78
|
|
79
|
+
# @return [String] short representation (8 last characters) of the sha256 of the definition's value
|
71
80
|
def sha256_short
|
72
81
|
"~#{Digest::SHA2.hexdigest(value).chars.last(8).join}"
|
73
82
|
end
|
74
83
|
|
84
|
+
# @return [String] the explicit checsum if wrong or nil
|
75
85
|
def wrong_explicit_checksum
|
76
86
|
explicit_checksum unless explicit_checksum.eql?(sha256_short)
|
77
87
|
end
|
78
88
|
|
89
|
+
# Set an external ref list for a given reference type
|
90
|
+
#
|
91
|
+
# @param ref [String] the type of cross reference
|
92
|
+
# @param extrefs [String] the comma separated external references
|
79
93
|
def add_eref(ref, extrefs)
|
80
94
|
eref[ref] = extrefs.strip.split(/\s*,\s*/)
|
81
95
|
end
|
82
96
|
|
97
|
+
# Set an internal ref
|
98
|
+
#
|
99
|
+
# @param ref [String] the internal reference
|
83
100
|
def add_iref(ref)
|
84
101
|
iref << ref
|
85
102
|
end
|
86
103
|
|
104
|
+
# Set an attribute for a given key
|
105
|
+
#
|
106
|
+
# @param key [String] the attribute's key
|
107
|
+
# @param value [String] the attribute's value
|
87
108
|
def set_attribute(key, value)
|
88
109
|
attributes[key] = value
|
89
110
|
end
|
90
111
|
end
|
91
|
-
public_constant :Definition
|
92
112
|
end
|
@@ -2,10 +2,12 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require('asciidoctor')
|
5
|
+
require('defmastership/core/constants')
|
6
|
+
require('defmastership/core/parsing_state')
|
5
7
|
require('defmastership/matching_line')
|
6
8
|
|
7
|
-
# Contains the content of a
|
8
|
-
module
|
9
|
+
# Contains the content of a Defmastership document: mainly definitions
|
10
|
+
module Defmastership
|
9
11
|
# Class to host data of Document class
|
10
12
|
DocumentData = Struct.new(
|
11
13
|
:definitions,
|
@@ -37,9 +39,9 @@ module DefMastership
|
|
37
39
|
definitions.last.add_eref(matching_line[:reference].to_sym, matching_line[:extrefs])
|
38
40
|
},
|
39
41
|
new_iref_def: lambda { |matching_line|
|
40
|
-
self.
|
42
|
+
self.has_iref = true
|
41
43
|
line = matching_line.line
|
42
|
-
line.scan(DMRegexp::IREF_DEF) do |_|
|
44
|
+
line.scan(Core::DMRegexp::IREF_DEF) do |_|
|
43
45
|
definitions.last.add_iref(Regexp.last_match[:intref])
|
44
46
|
end
|
45
47
|
},
|
@@ -54,7 +56,7 @@ module DefMastership
|
|
54
56
|
},
|
55
57
|
new_variable_use: lambda { |matching_line|
|
56
58
|
line = matching_line.line
|
57
|
-
line.scan(DMRegexp::VARIABLE_USE) do |_|
|
59
|
+
line.scan(Core::DMRegexp::VARIABLE_USE) do |_|
|
58
60
|
varname = Regexp.last_match[:varname]
|
59
61
|
value = variables[varname.to_sym]
|
60
62
|
|
@@ -75,36 +77,35 @@ module DefMastership
|
|
75
77
|
|
76
78
|
def initialize
|
77
79
|
@data = DocumentData.new([], Set.new, {}, false, {}, {})
|
78
|
-
@parsing_state = ParsingState.new
|
80
|
+
@parsing_state = Core::ParsingState.new
|
79
81
|
@definition_parser = DefinitionParser.new(self)
|
80
82
|
end
|
81
83
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
apply_filters(line)
|
86
|
-
else
|
87
|
-
generate_event(:new_line, MatchingLine.new(nil, line))
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
84
|
+
# Parse asciidoc file after [Asciidoctor] preprocessing
|
85
|
+
#
|
86
|
+
# @param adoc_file [String] the file to parse
|
92
87
|
def parse_file_with_preprocessor(adoc_file)
|
93
|
-
|
88
|
+
do_parse(Asciidoctor.load_file(adoc_file, safe: :unsafe, parse: false).reader.read_lines)
|
94
89
|
end
|
95
90
|
|
91
|
+
# @return [Boolean] true if the document has definitions with wrong explicit checksum
|
96
92
|
def wrong_explicit_checksum?
|
97
93
|
definitions.reduce(false) do |res, definition|
|
98
94
|
res || !!definition.wrong_explicit_checksum
|
99
95
|
end
|
100
96
|
end
|
101
97
|
|
98
|
+
# @return [Boolean] true if the document has definitions with explicit versions
|
102
99
|
def explicit_version?
|
103
100
|
definitions.reduce(false) do |res, definition|
|
104
101
|
res || !!definition.explicit_version
|
105
102
|
end
|
106
103
|
end
|
107
104
|
|
105
|
+
# Allow to add methods from parser actions
|
106
|
+
#
|
107
|
+
# @param method_name [Symbol] the name of the method
|
108
|
+
# @param args[Array<Object>] the arguments of the method
|
108
109
|
def method_missing(method_name, *args)
|
109
110
|
action = PARSER_ACTIONS[method_name]
|
110
111
|
return instance_exec(*args, &action) if action
|
@@ -112,20 +113,36 @@ module DefMastership
|
|
112
113
|
super
|
113
114
|
end
|
114
115
|
|
116
|
+
# Allow to check if a parser action is available
|
117
|
+
#
|
118
|
+
# @param method_name [Symbol] the name of the method
|
119
|
+
# @param _args[Array<Object>] the arguments of the method
|
115
120
|
# This method smells of :reek:UtilityFunction
|
116
121
|
def respond_to_missing?(method_name, *_args)
|
117
122
|
PARSER_ACTIONS.key?(method_name)
|
118
123
|
end
|
119
124
|
|
125
|
+
# @param reference [String] the defintion from the reference
|
126
|
+
# @return [Definition] the defintion from the reference
|
120
127
|
def ref_to_def(reference)
|
121
128
|
definitions.find { |definition| definition.reference == reference }
|
122
129
|
end
|
123
130
|
|
124
|
-
|
131
|
+
private
|
132
|
+
|
133
|
+
def has_iref=(value)
|
125
134
|
@data.iref = value
|
126
135
|
end
|
127
136
|
|
128
|
-
|
137
|
+
def do_parse(lines)
|
138
|
+
lines.each do |line|
|
139
|
+
if @parsing_state.enabled?(line)
|
140
|
+
apply_filters(line)
|
141
|
+
else
|
142
|
+
generate_event(:new_line, MatchingLine.new(nil, line))
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
129
146
|
|
130
147
|
def apply_filters(line)
|
131
148
|
Helper.reduce_filters_until_consumed(line) do |event, match, updated_line|
|
@@ -143,6 +160,9 @@ module DefMastership
|
|
143
160
|
|
144
161
|
# Helper functions
|
145
162
|
module Helper
|
163
|
+
# Helper function: apply all filters
|
164
|
+
#
|
165
|
+
# @param line [String] the line
|
146
166
|
def self.reduce_filters_until_consumed(line)
|
147
167
|
FILTERS.reduce(line) do |res, filter|
|
148
168
|
next res unless line.match(filter.regexp)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Copyright (c) 2020 Jerome Arbez-Gindre
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require('defmastership/set_join_hack')
|
5
|
+
|
6
|
+
module Defmastership
|
7
|
+
module Export
|
8
|
+
# format CSV lines per definition
|
9
|
+
class BodyFormatter
|
10
|
+
# @param doc [Document] the document to export
|
11
|
+
# @param definition [String] the definition to export
|
12
|
+
def initialize(doc, definition)
|
13
|
+
@doc = doc
|
14
|
+
@definition = definition
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [Array<String>] list of always available columns values
|
18
|
+
def fixed
|
19
|
+
[@definition.type, @definition.reference, @definition.value, @definition.sha256_short]
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Array<String>] Optional wrong_explicit_checksum column value
|
23
|
+
def wrong_explicit_checksum
|
24
|
+
wrong_explicit_checksum = @definition.wrong_explicit_checksum
|
25
|
+
wrong_explicit_checksum ? [wrong_explicit_checksum] : ['']
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Array<String>] Optional version column value
|
29
|
+
def explicit_version
|
30
|
+
explicit_version = @definition.explicit_version
|
31
|
+
explicit_version ? [explicit_version] : ['']
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Array<String>] Optional labels columns values
|
35
|
+
def labels
|
36
|
+
[@definition.labels.join("\n")]
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Array<String>] Optional external refs columns values
|
40
|
+
def eref
|
41
|
+
@doc.eref.map { |key,| @definition.eref.fetch(key, []).join("\n") }
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Array<String>] Optional internal refs column value
|
45
|
+
def iref
|
46
|
+
[@definition.iref.join("\n")]
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [Array<String>] Optional attributes columns values
|
50
|
+
def attributes
|
51
|
+
@doc.attributes.map { |key,| @definition.attributes.fetch(key, '') }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|