metanorma-release 0.2.24 → 0.2.26

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +21 -319
  3. data/README.adoc +319 -92
  4. data/lib/metanorma/release/aggregation_pipeline.rb +128 -45
  5. data/lib/metanorma/release/asset_processor.rb +3 -3
  6. data/lib/metanorma/release/cache_store.rb +1 -0
  7. data/lib/metanorma/release/change_detector.rb +3 -2
  8. data/lib/metanorma/release/cli.rb +28 -4
  9. data/lib/metanorma/release/commands/aggregate.rb +1 -17
  10. data/lib/metanorma/release/commands/package.rb +9 -17
  11. data/lib/metanorma/release/commands/release_command.rb +19 -14
  12. data/lib/metanorma/release/config.rb +16 -7
  13. data/lib/metanorma/release/delta_state.rb +15 -1
  14. data/lib/metanorma/release/dependency_validation.rb +19 -0
  15. data/lib/metanorma/release/document_flattener.rb +173 -0
  16. data/lib/metanorma/release/index.rb +1 -1
  17. data/lib/metanorma/release/interfaces.rb +12 -0
  18. data/lib/metanorma/release/platform/github/manifest_reader.rb +3 -1
  19. data/lib/metanorma/release/platform/github/release_fetcher.rb +10 -14
  20. data/lib/metanorma/release/platform/github/topic_discoverer.rb +1 -1
  21. data/lib/metanorma/release/platform/github.rb +0 -4
  22. data/lib/metanorma/release/platform/local/fetcher.rb +5 -17
  23. data/lib/metanorma/release/platform/null/manifest_reader.rb +15 -0
  24. data/lib/metanorma/release/platform/null/publisher.rb +1 -1
  25. data/lib/metanorma/release/platform/null.rb +2 -0
  26. data/lib/metanorma/release/platform/static_discoverer.rb +19 -0
  27. data/lib/metanorma/release/platform.rb +1 -0
  28. data/lib/metanorma/release/platform_factory.rb +6 -21
  29. data/lib/metanorma/release/publication.rb +23 -161
  30. data/lib/metanorma/release/publication_serializer.rb +59 -0
  31. data/lib/metanorma/release/release_pipeline.rb +7 -15
  32. data/lib/metanorma/release/rxl_extractor.rb +106 -0
  33. data/lib/metanorma/release/site.rb +5 -165
  34. data/lib/metanorma/release/slug_strategy.rb +30 -15
  35. data/lib/metanorma/release/version.rb +1 -1
  36. data/lib/metanorma/release/zip_packager.rb +1 -1
  37. data/lib/metanorma/release.rb +36 -19
  38. metadata +11 -5
@@ -11,6 +11,21 @@ module Metanorma
11
11
  raise NotImplementedError,
12
12
  "#{self.class} must implement #compute_asset_name"
13
13
  end
14
+
15
+ def self.slug_from_identifier(identifier)
16
+ identifier.to_s.strip
17
+ .gsub(/\s+/, "-")
18
+ .gsub(/:+/, "-")
19
+ .downcase
20
+ .gsub(/--+/, "-")
21
+ .gsub(/[-.]+$/, "")
22
+ end
23
+
24
+ def self.publisher_from_identifier(identifier)
25
+ return nil if identifier.nil? || identifier.strip.empty?
26
+
27
+ identifier.strip.split(/[\s-]/).first&.downcase
28
+ end
14
29
  end
15
30
 
16
31
  class EditionSlug
@@ -18,18 +33,12 @@ module Metanorma
18
33
 
19
34
  def compute_tag(publication)
20
35
  tag = "#{publication.slug}/ed#{publication.edition}"
21
- { tag: tag, pre_release: draft?(publication) }
36
+ { tag: tag, pre_release: publication.draft? }
22
37
  end
23
38
 
24
39
  def compute_asset_name(publication)
25
40
  "#{publication.slug}-ed#{publication.edition}.zip"
26
41
  end
27
-
28
- private
29
-
30
- def draft?(publication)
31
- %w[20 30 40 50].include?(publication.stage.to_s)
32
- end
33
42
  end
34
43
 
35
44
  class VersionSlug
@@ -37,18 +46,12 @@ module Metanorma
37
46
 
38
47
  def compute_tag(publication)
39
48
  tag = "#{publication.slug}/v#{publication.edition}"
40
- { tag: tag, pre_release: draft?(publication) }
49
+ { tag: tag, pre_release: publication.draft? }
41
50
  end
42
51
 
43
52
  def compute_asset_name(publication)
44
53
  "#{publication.slug}-v#{publication.edition}.zip"
45
54
  end
46
-
47
- private
48
-
49
- def draft?(publication)
50
- %w[20 30 40 50].include?(publication.stage.to_s)
51
- end
52
55
  end
53
56
 
54
57
  class InternetDraftSlug
@@ -129,6 +132,18 @@ module Metanorma
129
132
  @strategies.fetch(publisher.to_s, @default)
130
133
  end
131
134
 
135
+ def with_default(strategy)
136
+ registry = new
137
+ @strategies.each { |pub, s| registry.register(pub, s) }
138
+ registry.set_default(strategy)
139
+ registry
140
+ end
141
+
142
+ def set_default(strategy)
143
+ @default = strategy
144
+ self
145
+ end
146
+
132
147
  def self.from_config(config)
133
148
  registry = new
134
149
  config.slug_strategies.each do |publisher, strategy_name|
@@ -136,7 +151,7 @@ module Metanorma
136
151
  registry.register(publisher, strategy) if strategy
137
152
  end
138
153
  default = build_strategy(config.slug_default_strategy) || EditionSlug.new
139
- registry.instance_variable_set(:@default, default)
154
+ registry.set_default(default)
140
155
  registry
141
156
  end
142
157
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Metanorma
4
4
  module Release
5
- VERSION = "0.2.24"
5
+ VERSION = "0.2.26"
6
6
  end
7
7
  end
@@ -35,7 +35,7 @@ module Metanorma
35
35
 
36
36
  zip_path = File.join(dir, "#{canonical_base}.zip")
37
37
  FileUtils.rm_f(zip_path)
38
- Zip::File.open(zip_path, Zip::File::CREATE) do |zipfile|
38
+ Zip::File.open(zip_path, create: true) do |zipfile|
39
39
  files.each do |file|
40
40
  ext = File.extname(file)
41
41
  entry_name = "#{canonical_base}#{ext}"
@@ -4,18 +4,32 @@ module Metanorma
4
4
  module Release
5
5
  require_relative "release/version"
6
6
 
7
- # Domain models
8
- autoload :Publication, "metanorma/release/publication"
9
- autoload :PublicationFile, "metanorma/release/publication"
10
- autoload :PublicationSource, "metanorma/release/publication"
11
- autoload :Index, "metanorma/release/index"
12
- autoload :Site, "metanorma/release/site"
13
- autoload :Channel, "metanorma/release/channel"
14
- autoload :Config, "metanorma/release/config"
15
- autoload :DocumentEntry, "metanorma/release/config"
16
- autoload :ChannelResolver, "metanorma/release/config"
17
- autoload :ContentHash, "metanorma/release/content_hash"
7
+ require "logger"
8
+
9
+ class << self
10
+ attr_writer :logger
18
11
 
12
+ def logger
13
+ @logger ||= Logger.new($stderr, level: Logger::WARN)
14
+ end
15
+ end
16
+
17
+ # Domain models
18
+ autoload :Publication, "metanorma/release/publication"
19
+ autoload :PublicationFile, "metanorma/release/publication"
20
+ autoload :PublicationSource, "metanorma/release/publication"
21
+ autoload :PublicationSerializer, "metanorma/release/publication_serializer"
22
+ autoload :RxlExtractor, "metanorma/release/rxl_extractor"
23
+ autoload :Index, "metanorma/release/index"
24
+ autoload :Site, "metanorma/release/site"
25
+ autoload :Channel, "metanorma/release/channel"
26
+ autoload :Config, "metanorma/release/config"
27
+ autoload :ConfigLoader, "metanorma/release/config"
28
+ autoload :DocumentEntry, "metanorma/release/config"
29
+ autoload :ChannelResolver, "metanorma/release/config"
30
+ autoload :ContentHash, "metanorma/release/content_hash"
31
+ autoload :DependencyValidation, "metanorma/release/dependency_validation"
32
+ autoload :DocumentFlattener, "metanorma/release/document_flattener"
19
33
  # Strategies
20
34
  autoload :SlugStrategy, "metanorma/release/slug_strategy"
21
35
  autoload :EditionSlug, "metanorma/release/slug_strategy"
@@ -25,14 +39,17 @@ module Metanorma
25
39
  autoload :DraftSuffixSlug, "metanorma/release/slug_strategy"
26
40
  autoload :SlugRegistry, "metanorma/release/slug_strategy"
27
41
 
28
- # Interfaces
29
- autoload :Filter, "metanorma/release/interfaces"
30
- autoload :ChangeDetector, "metanorma/release/interfaces"
31
- autoload :Packager, "metanorma/release/interfaces"
32
- autoload :Publisher, "metanorma/release/interfaces"
33
- autoload :RepoDiscoverer, "metanorma/release/interfaces"
34
- autoload :ReleaseFetcher, "metanorma/release/interfaces"
35
- autoload :ManifestReader, "metanorma/release/interfaces"
42
+ # Interfaces & shared types
43
+ autoload :Extractor, "metanorma/release/interfaces"
44
+ autoload :Release, "metanorma/release/interfaces"
45
+ autoload :Asset, "metanorma/release/interfaces"
46
+ autoload :Filter, "metanorma/release/interfaces"
47
+ autoload :ChangeDetector, "metanorma/release/interfaces"
48
+ autoload :Packager, "metanorma/release/interfaces"
49
+ autoload :Publisher, "metanorma/release/interfaces"
50
+ autoload :RepoDiscoverer, "metanorma/release/interfaces"
51
+ autoload :ReleaseFetcher, "metanorma/release/interfaces"
52
+ autoload :ManifestReader, "metanorma/release/interfaces"
36
53
 
37
54
  # Pipeline components
38
55
  autoload :RepoRef, "metanorma/release/repo_ref"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-release
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.24
4
+ version: 0.2.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-23 00:00:00.000000000 Z
11
+ date: 2026-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: relaton-bib
14
+ name: relaton
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: 3.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.1'
26
+ version: 3.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +104,8 @@ files:
104
104
  - lib/metanorma/release/config.rb
105
105
  - lib/metanorma/release/content_hash.rb
106
106
  - lib/metanorma/release/delta_state.rb
107
+ - lib/metanorma/release/dependency_validation.rb
108
+ - lib/metanorma/release/document_flattener.rb
107
109
  - lib/metanorma/release/file_routing.rb
108
110
  - lib/metanorma/release/index.rb
109
111
  - lib/metanorma/release/interfaces.rb
@@ -118,11 +120,15 @@ files:
118
120
  - lib/metanorma/release/platform/local/fetcher.rb
119
121
  - lib/metanorma/release/platform/local/publisher.rb
120
122
  - lib/metanorma/release/platform/null.rb
123
+ - lib/metanorma/release/platform/null/manifest_reader.rb
121
124
  - lib/metanorma/release/platform/null/publisher.rb
125
+ - lib/metanorma/release/platform/static_discoverer.rb
122
126
  - lib/metanorma/release/platform_factory.rb
123
127
  - lib/metanorma/release/publication.rb
128
+ - lib/metanorma/release/publication_serializer.rb
124
129
  - lib/metanorma/release/release_pipeline.rb
125
130
  - lib/metanorma/release/repo_ref.rb
131
+ - lib/metanorma/release/rxl_extractor.rb
126
132
  - lib/metanorma/release/site.rb
127
133
  - lib/metanorma/release/slug_strategy.rb
128
134
  - lib/metanorma/release/version.rb