metanorma-cli 1.12.1 → 1.12.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87232f90b1180fb05c76e0dac99cd341fc2c8cd69b94f9b38c439c44a6fb10bc
4
- data.tar.gz: b847705bc7050d05d9c6807ed9633582c856a250143cd818d6515891c6cd5b05
3
+ metadata.gz: 83127d9943ff11c57968eba5da57a1506bab8cdbe1e035e055c382b5a70ba8d9
4
+ data.tar.gz: 76a08db2cd6f26d9f82a795fd2075eabe1f4ec7b1789bb56d6fccd49deaf188d
5
5
  SHA512:
6
- metadata.gz: de0c04dc41203bed1bda8b1b896ce07645a1bbd1f982c0c396f3a14909901d868d564498db27e592c4c24bbde0e963819d3a95d5490ac72c0da649ecf750af0b
7
- data.tar.gz: 46cb9e77c5e29a3e64c3878290e4f63c246e5d04f57c4ae86d36544360c0691c2a514b4700204c5eee83ff42174c4a47f19629b6cccdc5e8a0b104ff7df24db5
6
+ metadata.gz: 3e43bd5b2d5a3cb5bea64d82109963de633ab0c3e139ae36283cf4cbc0756a54e7952157c37e20c2bf0ee1c6edb09245671b77a5b1054a5073d13794063557e0
7
+ data.tar.gz: ac22976c0ee80b29e48ba6559230c742f97d86bbc2243cd51a4657833dc54ffb6b60b5a9919c8bbfc6be7404e9d6c4593fe8e5028ceb8cd45213d64b6b6f6ed9
data/Gemfile CHANGED
@@ -10,4 +10,25 @@ end
10
10
 
11
11
  gemspec
12
12
 
13
- eval_gemfile("Gemfile.devel") rescue nil
13
+ group :development do
14
+ gem "debug"
15
+ gem "pry"
16
+ gem "rake", "~> 13.0"
17
+ gem "rspec", "~> 3.0"
18
+ gem "rspec-command", "~> 1.0.3"
19
+ gem "rspec-core", "~> 3.4"
20
+ gem "rubocop", "~> 1"
21
+ gem "rubocop-performance"
22
+ # need for dev because locally compiled metanorma-iso does not have css
23
+ gem "sassc-embedded"
24
+ gem "simplecov", "~> 0.15"
25
+ gem "vcr", "~> 6.1.0"
26
+ gem "webmock"
27
+ gem "xml-c14n"
28
+ end
29
+
30
+ begin
31
+ eval_gemfile("Gemfile.devel")
32
+ rescue StandardError
33
+ nil
34
+ end
data/bin/font-test CHANGED
@@ -1,56 +1,58 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
+
3
4
  require "fontist"
4
5
  require "rubygems"
5
6
  require "yaml"
6
7
 
7
8
  flavors = ARGV
8
9
 
10
+ def die(message)
11
+ warn message
12
+ warn "Aborting..."
13
+ exit(1)
14
+ end
15
+
9
16
  Fontist::Formula.update_formulas_repo
10
17
 
11
18
  flavors.each do |flavor|
12
- begin
13
- gem_name = "metanorma-#{flavor}"
14
- require gem_name
15
-
16
- submodule = case flavor
17
- when "jcgm"
18
- "Bipm"
19
- else
20
- flavor.capitalize
21
- end
22
- processor_class = "Metanorma::#{submodule}::Processor"
23
-
24
- processor = Object
25
- .const_get(processor_class)
26
- .new
27
-
28
- unless processor.respond_to?(:fonts_manifest)
29
- puts "#{flavor} don't require any fonts"
30
- exit(0)
31
- end
32
-
33
- manifest = processor.fonts_manifest
34
-
35
- Fontist::Manifest::Install.from_hash(
36
- manifest,
37
- confirmation: "yes",
38
- )
39
-
40
- puts "#{flavor}-related fonts:"
41
- puts Fontist::Manifest::Locations.from_hash(manifest).to_yaml
42
- rescue LoadError => e
43
- STDERR.puts "Could not load gem '#{gem_name}': #{e.message}"
44
- exit(1)
45
- rescue NameError => e
46
- STDERR.puts "Could not find class '#{processor_class}': #{e.message}"
47
- exit(1)
48
- rescue => e
49
- if e.class.to_s.start_with?("Fontist::Errors::")
50
- STDERR.puts "Fontist failed with: #{e.message}"
51
- else
52
- STDERR.puts "Unknown error: #{e.message}"
53
- end
54
- exit(1)
19
+ gem_name = "metanorma-#{flavor}"
20
+ require gem_name
21
+
22
+ submodule = case flavor
23
+ when "jcgm"
24
+ "Bipm"
25
+ else
26
+ flavor.capitalize
27
+ end
28
+ processor_class = "Metanorma::#{submodule}::Processor"
29
+
30
+ processor = Object
31
+ .const_get(processor_class)
32
+ .new
33
+
34
+ unless processor.respond_to?(:fonts_manifest)
35
+ puts "#{flavor} does not require any fonts. Skipping."
36
+ exit(0)
37
+ end
38
+
39
+ manifest = processor.fonts_manifest
40
+
41
+ Fontist::Manifest::Install.from_hash(
42
+ manifest,
43
+ confirmation: "yes",
44
+ )
45
+
46
+ puts "#{flavor}-related fonts:"
47
+ puts Fontist::Manifest::Locations.from_hash(manifest).to_yaml
48
+ rescue LoadError => e
49
+ die "Could not load gem '#{gem_name}': #{e.message}"
50
+ rescue NameError => e
51
+ die "Could not find class '#{processor_class}': #{e.message}"
52
+ rescue StandardError => e
53
+ if e.class.to_s.start_with?("Fontist::Errors::")
54
+ die "Fontist failed with: #{e.message}"
55
+ else
56
+ die "Unknown error: #{e.message}"
55
57
  end
56
58
  end
data/bin/rspec CHANGED
@@ -10,12 +10,12 @@
10
10
 
11
11
  require "pathname"
12
12
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
- Pathname.new(__FILE__).realpath)
13
+ Pathname.new(__FILE__).realpath)
14
14
 
15
- bundle_binstub = File.expand_path("../bundle", __FILE__)
15
+ bundle_binstub = File.expand_path("bundle", __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 300))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
@@ -92,7 +92,8 @@ opt_parser = OptionParser.new do |opts|
92
92
  opts.on(
93
93
  "-R dir",
94
94
  "--relaton",
95
- "Insert links to relaton XML, generated by relaton-server-csd, with root directory dir (/id/xxxx is supplied)",
95
+ "Insert links to relaton XML, generated by relaton-server-csd," \
96
+ " with root directory dir (/id/xxxx is supplied)",
96
97
  ) { |v| options[:relaton] = v }
97
98
 
98
99
  opts.on_tail("-h", "--help", "Show this message") do
@@ -103,10 +104,8 @@ end
103
104
  opt_parser.parse!(ARGV)
104
105
  options[:filename] = ARGV.pop
105
106
 
106
- if options[:require]
107
- options[:require].each do |r|
108
- require r
109
- end
107
+ options[:require]&.each do |r|
108
+ require r
110
109
  end
111
110
 
112
111
  manifest = YAML.load_file(options[:filename])
@@ -115,16 +114,16 @@ documents = extract_documents(manifest)
115
114
 
116
115
  # TODO real lookup of namespaces and root elements
117
116
 
118
- out = <<~END
117
+ out = <<~EOXML
119
118
  <#{options[:type]}-standard xmlns="http://riboseinc.com/isoxml">
120
119
  <bibdata type="standard">
121
120
  <title>#{manifest['title']}</title>
122
- END
121
+ EOXML
123
122
 
124
123
  # TODO leave in anchor references?
125
124
  #
126
125
  documents.each do |d|
127
- out += <<~END
126
+ out += <<~EOXML
128
127
  <relation type="partOf">
129
128
  <bibdata type="standard">
130
129
  <title>#{d['title']}</title>
@@ -132,20 +131,20 @@ documents.each do |d|
132
131
  <abstract>#{d['description']}</abstract>
133
132
  </bibdata>
134
133
  </relation>
135
- END
134
+ EOXML
136
135
  end
137
136
 
138
- out += <<~END
137
+ out += <<~EOXML
139
138
  </bibdata>
140
139
  <sections>
141
- END
140
+ EOXML
142
141
 
143
142
  out += iterate(manifest["sections"], options)
144
143
 
145
- out += <<~END
144
+ out += <<~EOXML
146
145
  </sections>
147
146
  <#{options[:type]}-standard>
148
- END
147
+ EOXML
149
148
  outfilename = options[:filename].sub(/\.[^.]+$/, ".xml")
150
149
  File.open(outfilename, "w") { |f| f.write out }
151
150
 
@@ -37,6 +37,7 @@ module Metanorma
37
37
  output_folder: build_output_folder,
38
38
  coverpage: @options.fetch(:coverpage, nil),
39
39
  format: collection_output_formats(@options.fetch(:format, "")),
40
+ site_generate: @options["site_generate"],
40
41
  }
41
42
  end
42
43
 
@@ -73,7 +74,7 @@ module Metanorma
73
74
  end
74
75
 
75
76
  def xml_extract_options_from_file
76
- xml = Nokogiri::XML File.read(@file.to_s, encoding: "UTF-8") { |c| c.huge }
77
+ xml = Nokogiri::XML File.read(@file.to_s, encoding: "UTF-8", &:huge)
77
78
  { "coverpage" => xml.at("//coverpage"),
78
79
  "format" => xml.at("//format"),
79
80
  "output_folder" => xml.at("//output_folder") }.compact
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "metanorma/cli/compiler"
2
4
  require "metanorma/cli/generator"
3
5
  require "metanorma/cli/collection"
@@ -12,7 +14,8 @@ module Metanorma
12
14
  module Cli
13
15
  class Command < ThorWithConfig
14
16
  class_option :progress, aliases: "-s", type: :boolean, default: false,
15
- desc: "Show progress for long running tasks (like download)"
17
+ desc: "Show progress for long running tasks" \
18
+ " (like download)"
16
19
 
17
20
  desc "new NAME", "Create new Metanorma document"
18
21
  option :type, aliases: "-t", required: true, desc: "Document type"
@@ -36,26 +39,34 @@ module Metanorma
36
39
  option :wrapper, aliases: "-w", type: :boolean,
37
40
  desc: "Create wrapper folder for HTML output"
38
41
  option :asciimath, aliases: "-a", type: :boolean,
39
- desc: "Keep Asciimath in XML output instead of converting it to MathM"
42
+ desc: "Keep Asciimath in XML output instead of" \
43
+ " converting it to MathM"
40
44
  option :datauriimage, aliases: "-d", type: :boolean,
41
45
  desc: "Encode HTML output images as data URIs"
42
46
  option :relaton, aliases: "-R",
43
- desc: "Export Relaton XML for document to nominated filename"
47
+ desc: "Export Relaton XML for document to nominated" \
48
+ " filename"
44
49
  option :extract, aliases: "-e",
45
- desc: "Export sourcecode fragments from this document to nominated directory"
50
+ desc: "Export sourcecode fragments from this document" \
51
+ " to nominated directory"
46
52
  option :version, aliases: "-v",
47
53
  desc: "Print version of code (accompanied with -t)"
48
54
  option :output_dir, aliases: "-o",
49
55
  desc: "Directory to save compiled files"
50
56
  option :strict, aliases: "-S", type: :boolean,
51
57
  desc: "Strict compilation: abort if there are any errors"
52
- option :agree_to_terms, type: :boolean, desc: "Agree / Disagree with all third-party licensing terms "\
53
- "presented (WARNING: do know what you are agreeing with!)"
58
+ option :agree_to_terms,
59
+ type: :boolean,
60
+ desc: "Agree / Disagree with all third-party licensing terms "\
61
+ "presented (WARNING: do know what you are agreeing with!)"
54
62
  option :install_fonts, type: :boolean, default: true,
55
63
  desc: "Install required fonts"
56
- option :continue_without_fonts, type: :boolean,
57
- desc: "Continue processing even when fonts are missing"
64
+ option :continue_without_fonts,
65
+ type: :boolean,
66
+ desc: "Continue processing even when fonts are missing"
58
67
 
68
+ # rubocop:disable Metrics/PerceivedComplexity
69
+ # rubocop:disable Metrics/AbcSize
59
70
  def compile(file_name = nil)
60
71
  if file_name && !options[:version]
61
72
  documents = select_wildcard_documents(file_name) || [file_name]
@@ -71,18 +82,23 @@ module Metanorma
71
82
  invoke :help
72
83
  end
73
84
  end
85
+ # rubocop:enable Metrics/AbcSize
86
+ # rubocop:enable Metrics/PerceivedComplexity
74
87
 
75
88
  desc "collection FILENAME", "Render HTML pages from XML/YAML colection"
76
89
  option :format, aliases: "-x", type: :string, desc: "Formats to generate"
77
90
  option :output_folder, aliases: "-w",
78
91
  desc: "Directory to save compiled files"
79
92
  option :coverpage, aliases: "-c", desc: "Liquid template"
80
- option :agree_to_terms, type: :boolean, desc: "Agree / Disagree with all third-party licensing terms "\
81
- "presented (WARNING: do know what you are agreeing with!)"
93
+ option :agree_to_terms,
94
+ type: :boolean,
95
+ desc: "Agree / Disagree with all third-party licensing terms "\
96
+ "presented (WARNING: do know what you are agreeing with!)"
82
97
  option :install_fonts, type: :boolean, default: true,
83
98
  desc: "Install required fonts"
84
- option :continue_without_fonts, type: :boolean,
85
- desc: "Continue processing even when fonts are missing"
99
+ option :continue_without_fonts,
100
+ type: :boolean,
101
+ desc: "Continue processing even when fonts are missing"
86
102
  option :strict, aliases: "-S", type: :boolean, \
87
103
  desc: "Strict compilation: abort if there are any errors"
88
104
 
@@ -1,20 +1,22 @@
1
1
  require "pathname"
2
2
  require "metanorma-utils"
3
3
 
4
- #require "metanorma/cli/stringify_all_keys"
4
+ # require "metanorma/cli/stringify_all_keys"
5
5
 
6
6
  module Metanorma
7
7
  module Cli
8
8
  module Commands
9
9
  class Config < Thor
10
- Hash.include Metanorma::Utils::Hash
11
- Array.include Metanorma::Utils::Array
10
+ Hash.include Metanorma::Utils::Hash
11
+ Array.include Metanorma::Utils::Array
12
12
 
13
- class_option :global, aliases: "-g", type: :boolean, default: false, desc: "Use global config"
13
+ class_option :global, aliases: "-g", type: :boolean, default: false,
14
+ desc: "Use global config"
14
15
 
15
16
  desc "get NAME", "Get config value"
16
17
  def get(name = nil)
17
- config, config_path = load_config(options[:global], create_default_config: false)
18
+ config, config_path = load_config(options[:global],
19
+ create_default_config: false)
18
20
 
19
21
  if name.nil? && File.exist?(config_path)
20
22
  UI.say File.read(config_path, encoding: "utf-8")
@@ -47,16 +49,25 @@ module Metanorma
47
49
  def self.exit_on_failure?() true end
48
50
 
49
51
  # priority:
50
- # IDEAL: thor defaults -> global conf -> local conf -> env vars -> passed arguments
51
- # ACTUAL: all arguments -> global conf -> local conf
52
- # - thor doesn't provide to differentiate default values against passed args
52
+ # IDEAL:
53
+ # thor defaults -> global conf -> local conf
54
+ # -> env vars -> passed arguments
55
+ #
56
+ # ACTUAL:
57
+ # all arguments -> global conf -> local conf
58
+ #
59
+ # - thor doesn't provide to differentiate default values against passed
60
+ # args
53
61
  # - thor doesn't allow to get all args available for current command
54
- def self.load_configs(options, configs = [Metanorma::Cli.global_config_path, Metanorma::Cli.local_config_path])
62
+ def self.load_configs(options, configs = [
63
+ Metanorma::Cli.global_config_path, Metanorma::Cli.local_config_path
64
+ ])
55
65
  result = options.dup
56
66
  configs.each do |config_path|
57
67
  next unless File.exist?(config_path)
58
68
 
59
- config_values = ::YAML::load_file(config_path).symbolize_all_keys[:cli] || {}
69
+ config_values = ::YAML::load_file(config_path)
70
+ .symbolize_all_keys[:cli] || {}
60
71
  result.merge!(config_values)
61
72
  end
62
73
 
@@ -80,15 +91,16 @@ module Metanorma
80
91
  end
81
92
 
82
93
  def load_config(global_config, create_default_config: true)
83
- config_path = Metanorma::Cli.config_path(global_config)
94
+ config_path = Metanorma::Cli.config_path(global: global_config)
84
95
 
85
96
  unless File.exist?(config_path) || create_default_config
86
- config_path = Metanorma::Cli.config_path(true)
97
+ config_path = Metanorma::Cli.config_path(global: true)
87
98
  end
88
99
 
89
100
  save_default_config(config_path)
90
101
 
91
- [::YAML::load_file(config_path).symbolize_all_keys || {}, config_path]
102
+ [::YAML::load_file(config_path).symbolize_all_keys || {},
103
+ config_path]
92
104
  end
93
105
 
94
106
  def dig_path(str)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pathname"
2
4
  require "metanorma/cli/site_generator"
3
5
  require "metanorma/cli/thor_with_config"
@@ -6,31 +8,52 @@ module Metanorma
6
8
  module Cli
7
9
  module Commands
8
10
  class Site < ThorWithConfig
9
- SITE_OUTPUT_DIRNAME = "_site".freeze
11
+ SITE_OUTPUT_DIRNAME = "_site"
10
12
 
11
13
  desc "generate [SOURCE_PATH]", "Generate site from collection"
12
- option :config, aliases: "-c", desc: "Metanorma configuration file"
13
- option(
14
- :output_dir,
15
- aliases: "-o",
16
- default: Pathname.new(Dir.pwd).join(SITE_OUTPUT_DIRNAME).to_s,
17
- desc: "Output directory for generated site",
18
- )
19
- option :agree_to_terms, type: :boolean, desc: "Agree / Disagree with all third-party licensing terms "\
20
- "presented (WARNING: do know what you are agreeing with!)"
21
- option :install_fonts, type: :boolean, default: true, desc: "Install required fonts"
22
- option :continue_without_fonts, type: :boolean, desc: "Continue processing even when fonts are missing"
23
- option :stylesheet, aliases: "-s", desc: "Stylesheet file path for rendering HTML page"
24
- option :template_dir, aliases: "-t", desc: "Liquid template directory to render site design"
25
- option(
26
- :strict,
27
- aliases: "-S",
28
- type: :boolean,
29
- desc: "Strict compilation: abort if there are any errors",
30
- )
14
+ option :config,
15
+ aliases: "-c",
16
+ desc: "Metanorma configuration file"
17
+
18
+ option :output_dir,
19
+ aliases: "-o",
20
+ default: Pathname.new(Dir.pwd).join(SITE_OUTPUT_DIRNAME).to_s,
21
+ desc: "Output directory for generated site"
22
+
23
+ option :output_filename_template,
24
+ default: nil,
25
+ desc: "Liquid template to generate output filenames" \
26
+ " (using Relaton model)"
27
+
28
+ option :agree_to_terms,
29
+ type: :boolean,
30
+ desc: "Agree / Disagree with all third-party licensing" \
31
+ " terms presented (WARNING: do know what you are" \
32
+ " agreeing with!)"
33
+ option :install_fonts,
34
+ type: :boolean,
35
+ default: true,
36
+ desc: "Install required fonts"
37
+
38
+ option :continue_without_fonts,
39
+ type: :boolean,
40
+ desc: "Continue processing even when fonts are missing"
41
+
42
+ option :stylesheet,
43
+ aliases: "-s",
44
+ desc: "Stylesheet file path for rendering HTML page"
45
+
46
+ option :template_dir,
47
+ aliases: "-t",
48
+ desc: "Liquid template directory to render site design"
49
+
50
+ option :strict,
51
+ aliases: "-S",
52
+ type: :boolean,
53
+ desc: "Strict compilation: abort if there are any errors"
31
54
 
32
55
  def generate(source_path = Dir.pwd)
33
- Cli::SiteGenerator.generate(
56
+ Cli::SiteGenerator.generate!(
34
57
  source_path,
35
58
  options,
36
59
  filter_compile_options(options),
@@ -6,12 +6,13 @@ module Metanorma
6
6
  module Commands
7
7
  class TemplateRepo < ThorWithConfig
8
8
  desc "add NAME SOURCE", "Add new metanorma templates repository"
9
- option :overwrite, aliases: "-y", type: :boolean, desc: "Overwrite existing template"
9
+ option :overwrite, aliases: "-y",
10
+ type: :boolean,
11
+ desc: "Overwrite existing template"
10
12
 
11
13
  def add(name, source)
12
14
  Metanorma::Cli::TemplateRepo.add(name, source, options)
13
15
  UI.say("Template repo: #{name} has been added successfully")
14
-
15
16
  rescue Errors::DuplicateTemplateError
16
17
  UI.error("Duplicate metanorma template")
17
18
  end
@@ -4,7 +4,6 @@ require "metanorma/cli/errors"
4
4
  module Metanorma
5
5
  module Cli
6
6
  class Compiler
7
-
8
7
  def initialize(file, options)
9
8
  validate_file_path(file)
10
9
  @file = file
@@ -16,12 +15,16 @@ module Metanorma
16
15
  path = Pathname.new(file)
17
16
  # Check if provided file path exists
18
17
  unless path.exist?
19
- raise ::Metanorma::Cli::Errors::FileNotFoundError.new("Specified input file '#{file}' does not exist")
18
+ raise ::Metanorma::Cli::Errors::FileNotFoundError.new(
19
+ "Specified input file '#{file}' does not exist",
20
+ )
20
21
  end
21
22
 
22
23
  # Check if provided file is really a file
23
24
  unless path.file?
24
- raise ::Metanorma::Cli::Errors::FileNotFoundError.new("Specified input file '#{file}' is not a file")
25
+ raise ::Metanorma::Cli::Errors::FileNotFoundError.new(
26
+ "Specified input file '#{file}' is not a file",
27
+ )
25
28
  end
26
29
  end
27
30
 
@@ -58,12 +61,12 @@ module Metanorma
58
61
  Hash.new.tap do |hash|
59
62
  hash[:extract] = extract[0]
60
63
  hash[:extract_type] =
61
- extract.size > 0 ? extract[0..-1].map(&:to_sym) : []
64
+ extract.empty? ? [] : extract.map(&:to_sym)
62
65
  end
63
66
  end
64
67
 
65
68
  def extension_option
66
- !extensions.empty? ? { extension_keys: extensions.map(&:to_sym) } : {}
69
+ extensions.empty? ? {} : { extension_keys: extensions.map(&:to_sym) }
67
70
  end
68
71
 
69
72
  def serialize(options)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yaml"
2
4
  require "pathname"
3
5
  require "fileutils"
@@ -5,48 +7,74 @@ require "fileutils"
5
7
  module Metanorma
6
8
  module Cli
7
9
  class SiteGenerator
10
+ DEFAULT_RELATON_COLLECTION_INDEX = "documents.xml"
11
+ DEFAULT_ASSET_FOLDER = "documents"
12
+ DEFAULT_SITE_INDEX = "index.html"
13
+ DEFAULT_CONFIG_FILE = "metanorma.yml"
14
+
15
+ # rubocop:disable Metrics/AbcSize
8
16
  def initialize(source, options = {}, compile_options = {})
9
17
  @collection_queue = []
10
18
  @source = find_realpath(source)
11
19
  @site_path = options.fetch(
12
20
  :output_dir, Commands::Site::SITE_OUTPUT_DIRNAME
13
21
  ).to_s
14
- @asset_folder = options.fetch(:asset_folder, "documents").to_s
15
- @collection_name = options.fetch(:collection_name, "documents.xml")
22
+
23
+ @asset_folder = options.fetch(:asset_folder, DEFAULT_ASSET_FOLDER).to_s
24
+ @relaton_collection_index = options.fetch(
25
+ :collection_name,
26
+ DEFAULT_RELATON_COLLECTION_INDEX,
27
+ )
16
28
 
17
29
  @manifest_file = find_realpath(options.fetch(:config, default_config))
18
30
  @template_dir = options.fetch(:template_dir, template_data("path"))
19
31
  @stylesheet = options.fetch(:stylesheet, template_data("stylesheet"))
32
+ @output_filename_template = options.fetch(
33
+ :output_filename_template,
34
+ template_data("output_filename"),
35
+ )
36
+
37
+ # Determine base path for template files
38
+ # If template_dir is not absolute, then it is relative to the manifest
39
+ # file.
40
+ # If manifest file is not provided, then it is relative to the current
41
+ # directory.
42
+ @base_path = if manifest_file.nil?
43
+ Pathname.pwd
44
+ else
45
+ Pathname.new(manifest_file).parent
46
+ end
20
47
 
21
48
  @compile_options = compile_options
22
- ensure_site_asset_directory!
23
49
  end
50
+ # rubocop:enable Metrics/AbcSize
24
51
 
25
- def self.generate(source, options = {}, compile_options = {})
26
- new(source, options, compile_options).generate
52
+ def self.generate!(source, options = {}, compile_options = {})
53
+ new(source, options, compile_options).generate!
27
54
  end
28
55
 
29
- def generate
30
- site_directory = asset_directory.join("..")
56
+ def generate!
57
+ ensure_site_asset_directory!
31
58
 
32
- fatals = select_source_files.map { |source| compile(source) }
33
- .flatten
34
- .compact
59
+ compile_files!(select_source_files)
35
60
 
36
- raise Errors::FatalCompilationError, fatals unless fatals.empty?
61
+ site_directory = asset_directory.parent
37
62
 
38
63
  Dir.chdir(site_directory) do
39
- build_collection_file(collection_name)
40
- convert_to_html_page(collection_name, "index.html")
64
+ build_collection_file!(relaton_collection_index)
65
+ convert_to_html_page!(relaton_collection_index, DEFAULT_SITE_INDEX)
41
66
  end
42
67
 
43
- dequeue_jobs
68
+ dequeue_jobs!
44
69
  end
45
70
 
46
71
  private
47
72
 
48
- attr_reader :source, :asset_folder, :asset_directory, :site_path
49
- attr_reader :manifest_file, :collection_name, :stylesheet, :template_dir
73
+ attr_reader :source, :asset_folder, :asset_directory, :site_path,
74
+ :manifest_file, :relaton_collection_index, :stylesheet,
75
+ :template_dir,
76
+ :output_filename_template,
77
+ :base_path
50
78
 
51
79
  def find_realpath(source_path)
52
80
  Pathname.new(source_path.to_s).realpath if source_path
@@ -55,7 +83,7 @@ module Metanorma
55
83
  end
56
84
 
57
85
  def default_config
58
- default_file = Pathname.new(Dir.pwd).join("metanorma.yml")
86
+ default_file = Pathname.new(Dir.pwd).join(DEFAULT_CONFIG_FILE)
59
87
  default_file if File.exist?(default_file)
60
88
  end
61
89
 
@@ -66,90 +94,133 @@ module Metanorma
66
94
  files = Dir[File.join(source, "**", "*.adoc")]
67
95
  end
68
96
 
69
- files.flatten.uniq.reject { |file| File.directory?(file) }
97
+ result = files.flatten
98
+ result.uniq!
99
+ result.reject! { |file| File.directory?(file) }
100
+ result
70
101
  end
71
102
 
72
- def build_collection_file(collection_name)
73
- collection_path = [site_path, collection_name].join("/")
103
+ def build_collection_file!(relaton_collection_index_filename)
104
+ collection_path = [site_path,
105
+ relaton_collection_index_filename].join("/")
74
106
  UI.info("Building collection file: #{collection_path} ...")
75
107
 
76
108
  Relaton::Cli::RelatonFile.concatenate(
77
109
  asset_folder,
78
- collection_name,
110
+ relaton_collection_index_filename,
79
111
  title: manifest[:collection_name],
80
112
  organization: manifest[:collection_organization],
81
113
  )
82
114
  end
83
115
 
84
- def compile(source)
116
+ def compile_file!(source)
85
117
  if collection_file?(source)
86
118
  return
87
119
  end
88
120
 
89
121
  UI.info("Compiling #{source} ...")
90
122
 
123
+ # Incorporate output_filename_template so the output file
124
+ # can be named as desired, using liquid template and Relaton LiquidDrop
91
125
  options = @compile_options.merge(
92
- format: :asciidoc, output_dir: build_asset_output_directory(source),
93
- site_generate: true
126
+ output_filename_template: output_filename_template,
127
+ format: :asciidoc,
128
+ output_dir: build_asset_output_directory!(source),
129
+ site_generate: true,
94
130
  )
95
131
 
96
132
  options[:baseassetpath] = Pathname.new(source.to_s).dirname.to_s
97
133
  Metanorma::Cli::Compiler.compile(source.to_s, options)
98
134
  end
99
135
 
100
- def convert_to_html_page(collection, page_name)
136
+ def compile_files!(files)
137
+ fatals = files.map { |source| compile_file!(source) }
138
+ fatals.flatten!
139
+ fatals.compact!
140
+
141
+ raise Errors::FatalCompilationError, fatals unless fatals.empty?
142
+ end
143
+
144
+ # Given a path, return the full path if it is not nil.
145
+ # If the path is absolute, return the path as is.
146
+ # If the path is relative, return the path relative to the base path.
147
+ # @param some_path [String, nil] the path to be converted to full path
148
+ # @return [String, nil] the full path
149
+ def full_path_for(some_path)
150
+ if some_path.nil?
151
+ nil
152
+ elsif Pathname.new(some_path).absolute?
153
+ some_path
154
+ elsif !base_path.nil?
155
+ base_path.join(some_path)
156
+ end
157
+ end
158
+
159
+ def convert_to_html_page!(
160
+ relaton_index_filename, page_name
161
+ )
101
162
  UI.info("Generating html site in #{site_path} ...")
102
163
 
103
- Relaton::Cli::XMLConvertor.to_html(collection, stylesheet, template_dir)
104
- File.rename(Pathname.new(collection).sub_ext(".html").to_s, page_name)
164
+ Relaton::Cli::XMLConvertor.to_html(
165
+ relaton_index_filename,
166
+ full_path_for(stylesheet),
167
+ full_path_for(template_dir),
168
+ )
169
+
170
+ File.rename(
171
+ Pathname.new(relaton_index_filename).sub_ext(".html").to_s,
172
+ page_name,
173
+ )
105
174
  end
106
175
 
107
176
  def template_data(node)
108
- template_node = manifest[:template]
109
- template_node&.fetch(node.to_s, nil)
177
+ manifest[:template]&.public_send(node.to_s)
110
178
  end
111
179
 
112
180
  def manifest
113
181
  @manifest ||= config_from_manifest || {
114
- files: [], collection_name: "", collection_organization: ""
182
+ files: [],
183
+ collection_name: "",
184
+ collection_organization: "",
115
185
  }
116
186
  end
117
187
 
118
188
  def config_from_manifest
119
189
  if manifest_file
120
- manifest_config(YAML.safe_load(File.read(manifest_file.to_s)))
190
+ manifest_config(
191
+ Metanorma::SiteManifest::Base.from_yaml(
192
+ File.read(manifest_file.to_s),
193
+ ),
194
+ )
121
195
  end
122
196
  end
123
197
 
124
- def manifest_config(manifest)
198
+ def manifest_config(manifest_model)
125
199
  {
126
- files: extract_config_data(
127
- manifest["metanorma"]["source"], "files"
128
- ) || [],
129
-
130
- collection_name: extract_config_data(
131
- manifest["metanorma"]["collection"], "name"
132
- ),
133
-
134
- collection_organization: extract_config_data(
135
- manifest["metanorma"]["collection"], "organization"
136
- ),
137
-
138
- template: extract_config_data(manifest["metanorma"], "template"),
200
+ files: manifest_model&.metanorma&.source&.files || [],
201
+ template: manifest_model&.metanorma&.template,
202
+ collection_name: manifest_model
203
+ .metanorma
204
+ .collection
205
+ .name,
206
+ collection_organization: manifest_model
207
+ .metanorma
208
+ .collection
209
+ .organization,
139
210
  }
140
211
  rescue NoMethodError
141
212
  raise Errors::InvalidManifestFileError.new("Invalid manifest file")
142
213
  end
143
214
 
144
- def extract_config_data(node, key)
145
- node ? node[key] : nil
146
- end
147
-
148
215
  def source_from_manifest
149
- @source_from_manifest ||= manifest[:files].map do |source_file|
150
- file_path = source.join(source_file).to_s
151
- file_path.include?("*") ? Dir.glob(file_path) : file_path
152
- end.flatten
216
+ @source_from_manifest ||= begin
217
+ result = manifest[:files].map do |source_file|
218
+ file_path = source.join(source_file).to_s
219
+ file_path.include?("*") ? Dir.glob(file_path) : file_path
220
+ end
221
+ result.flatten!
222
+ result
223
+ end
153
224
  end
154
225
 
155
226
  def ensure_site_asset_directory!
@@ -163,7 +234,7 @@ module Metanorma
163
234
  FileUtils.mkdir_p(directory) unless directory.exist?
164
235
  end
165
236
 
166
- def build_asset_output_directory(source)
237
+ def build_asset_output_directory!(source)
167
238
  sub_directory = Pathname.new(source.gsub(@source.to_s, "")).dirname.to_s
168
239
  sub_directory.gsub!("/sources", "")
169
240
  sub_directory.slice!(0)
@@ -182,7 +253,7 @@ module Metanorma
182
253
  end
183
254
  end
184
255
 
185
- def dequeue_jobs
256
+ def dequeue_jobs!
186
257
  job = @collection_queue.pop
187
258
 
188
259
  if job
@@ -190,6 +261,7 @@ module Metanorma
190
261
  job,
191
262
  compile: @compile_options,
192
263
  output_dir: @asset_directory.join(".."),
264
+ site_generate: true,
193
265
  )
194
266
  end
195
267
  end
@@ -1,12 +1,11 @@
1
1
  require "yaml"
2
2
  require "metanorma-utils"
3
3
 
4
- #require "metanorma/cli/stringify_all_keys"
4
+ # require "metanorma/cli/stringify_all_keys"
5
5
 
6
6
  module Metanorma
7
7
  module Cli
8
8
  class TemplateRepo
9
-
10
9
  Hash.include Metanorma::Utils::Hash
11
10
  Array.include Metanorma::Utils::Array
12
11
 
@@ -38,7 +37,7 @@ module Metanorma
38
37
  end
39
38
 
40
39
  def template_config_file
41
- @template_config_file ||= Cli.config_path(true)
40
+ @template_config_file ||= Cli.config_path(global: true)
42
41
  end
43
42
 
44
43
  def create_template_config
@@ -60,7 +59,9 @@ module Metanorma
60
59
  names = templates[:templates].map { |template| template[:name].to_s }
61
60
 
62
61
  if names.include?(name.to_s) && overwrite == false
63
- raise Errors::DuplicateTemplateError.new("Duplicate metanorma template")
62
+ raise Errors::DuplicateTemplateError.new(
63
+ "Duplicate metanorma template",
64
+ )
64
65
  end
65
66
 
66
67
  templates[:templates].push({ name: name, source: source, type: type })
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Cli
3
- VERSION = "1.12.1".freeze
3
+ VERSION = "1.12.4".freeze
4
4
  end
5
5
  end
data/lib/metanorma/cli.rb CHANGED
@@ -3,13 +3,14 @@
3
3
  require "metanorma"
4
4
  require "metanorma/flavor"
5
5
 
6
+ require "metanorma/site_manifest"
7
+
6
8
  require "metanorma/cli/version"
7
9
  require "metanorma/cli/errors"
8
10
  require "metanorma/cli/command"
9
11
 
10
12
  module Metanorma
11
13
  module Cli
12
-
13
14
  CONFIG_DIRNAME = ".metanorma"
14
15
  CONFIG_FILENAME = "config.yml"
15
16
 
@@ -32,7 +33,7 @@ module Metanorma
32
33
  end
33
34
 
34
35
  Metanorma::Cli::Command.start(arguments)
35
- rescue Interrupt, SignalException => _e
36
+ rescue SignalException # `Interrupt` inherits from this
36
37
  UI.say("Process cancelled, exiting.")
37
38
  rescue Errors::FileNotFoundError => e
38
39
  UI.say("Error: #{e}. \nNot sure what to run? try: metanorma help")
@@ -65,7 +66,7 @@ module Metanorma
65
66
  Pathname.new(Dir.pwd).join(CONFIG_DIRNAME, CONFIG_FILENAME)
66
67
  end
67
68
 
68
- def self.config_path(global = false)
69
+ def self.config_path(global: false)
69
70
  return global_config_path if global
70
71
 
71
72
  local_config_path
@@ -91,7 +92,7 @@ module Metanorma
91
92
 
92
93
  def self.find_command(arguments)
93
94
  commands = Metanorma::Cli::Command.all_commands.keys
94
- commands.select { |cmd| arguments.include?(cmd.gsub("_", "-")) == true }
95
+ commands.select { |cmd| arguments.include?(cmd.tr("_", "-")) == true }
95
96
  end
96
97
 
97
98
  def self.print_fatal_summary(error)
@@ -14,7 +14,7 @@ module Metanorma
14
14
  "metanorma-csa",
15
15
  "metanorma-iho",
16
16
  "metanorma-jis",
17
- # "metanorma-m3aawg",
17
+ # "metanorma-m3aawg",
18
18
  "metanorma-generic",
19
19
  "metanorma-standoc",
20
20
  # "metanorma-un",
@@ -56,7 +56,11 @@ module Metanorma
56
56
  private
57
57
 
58
58
  def flavors
59
- @flavors ||= [SUPPORTED_GEMS + PRIVATE_SUPPORTED_GEMS].flatten.uniq
59
+ @flavors ||= begin
60
+ result = [SUPPORTED_GEMS + PRIVATE_SUPPORTED_GEMS].flatten
61
+ result.uniq!
62
+ result
63
+ end
60
64
  end
61
65
 
62
66
  def gem_loading_error(flavor_name)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "lutaml/model"
4
+
5
+ module Metanorma
6
+ module SiteManifest
7
+ class SourceEntries < Lutaml::Model::Serializable
8
+ attribute :files, :string, collection: true
9
+ end
10
+
11
+ class SiteMetadata < Lutaml::Model::Serializable
12
+ attribute :organization, :string
13
+ attribute :name, :string
14
+ end
15
+
16
+ class SiteTemplate < Lutaml::Model::Serializable
17
+ attribute :path, :string
18
+ attribute :stylesheet, :string
19
+ attribute :output_filename, :string
20
+ end
21
+
22
+ class Manifest < Lutaml::Model::Serializable
23
+ attribute :source, SourceEntries
24
+ attribute :collection, SiteMetadata
25
+ attribute :template, SiteTemplate
26
+ end
27
+
28
+ class Base < Lutaml::Model::Serializable
29
+ attribute :metanorma, Manifest
30
+ end
31
+ end
32
+ end
@@ -25,45 +25,33 @@ Gem::Specification.new do |spec|
25
25
  spec.require_paths = ["lib"]
26
26
  spec.required_ruby_version = ">= 3.1.0"
27
27
 
28
- spec.add_development_dependency "debug"
29
- spec.add_development_dependency "rake", "~> 13.0"
30
- spec.add_development_dependency "rspec", "~> 3.0"
31
- spec.add_development_dependency "rspec-command", "~> 1.0.3"
32
- spec.add_development_dependency "rspec-core", "~> 3.4"
33
- spec.add_development_dependency "simplecov", "~> 0.15"
34
- spec.add_development_dependency "vcr", "~> 6.1.0"
35
- spec.add_development_dependency "webmock"
36
- # need for dev because locally compiled metanorma-iso does not have css
37
- spec.add_development_dependency "rubocop", "~> 1"
38
- spec.add_development_dependency "rubocop-performance"
39
- spec.add_development_dependency "sassc-embedded"
40
- spec.add_development_dependency "xml-c14n"
28
+ spec.add_dependency "metanorma-ietf", "~> 3.5.0"
29
+ spec.add_dependency "metanorma-iso", "~> 3.0.0"
30
+ spec.add_dependency "mnconvert"
31
+ # spec.add_dependency "thor", "~> 1.0" # inherited from vectory
32
+ # spec.add_dependency "metanorma-gb", "~> 1.5.0"
33
+ spec.add_dependency "metanorma-cc", "~> 2.6.0"
34
+ spec.add_dependency "metanorma-csa", "~> 2.6.0"
35
+ spec.add_dependency "metanorma-iec", "~> 2.6.0"
36
+ # spec.add_dependency 'metanorma-ribose', "~> 2.3.0"
37
+ spec.add_dependency "metanorma-bipm", "~> 2.6.0"
38
+ spec.add_dependency "metanorma-generic", "~> 3.0.0"
39
+ spec.add_dependency "metanorma-standoc", "~> 3.0.0"
40
+ # spec.add_dependency 'metanorma-mpfa', "~> 0.9.0"
41
+ spec.add_dependency "git", "~> 1.5"
42
+ spec.add_dependency "lutaml-model"
43
+ spec.add_dependency "metanorma", "~> 2.1.0"
44
+ spec.add_dependency "metanorma-iho", "~> 1.1.0"
45
+ spec.add_dependency "metanorma-itu", "~> 2.6.0"
46
+ # spec.add_dependency "metanorma-nist", "~> 2.6.0"
47
+ spec.add_dependency "liquid", "~> 5"
48
+ spec.add_dependency "metanorma-ieee", "~> 1.4.0"
49
+ spec.add_dependency "metanorma-jis", "~> 0.5.0"
50
+ spec.add_dependency "metanorma-ogc", "~> 2.7.0"
51
+ spec.add_dependency "metanorma-plateau", "~> 1.0.0"
52
+ spec.add_dependency "relaton-cli", ">= 0.8.2"
41
53
 
42
- spec.add_runtime_dependency "metanorma-ietf", "~> 3.5.0"
43
- spec.add_runtime_dependency "metanorma-iso", "~> 3.0.0"
44
- spec.add_runtime_dependency "mnconvert"
45
- # spec.add_runtime_dependency "thor", "~> 1.0" # inherited from vectory
46
- # spec.add_runtime_dependency "metanorma-gb", "~> 1.5.0"
47
- spec.add_runtime_dependency "metanorma-cc", "~> 2.6.0"
48
- spec.add_runtime_dependency "metanorma-csa", "~> 2.6.0"
49
- spec.add_runtime_dependency "metanorma-iec", "~> 2.6.0"
50
- # spec.add_runtime_dependency 'metanorma-ribose', "~> 2.3.0"
51
- spec.add_runtime_dependency "metanorma-bipm", "~> 2.6.0"
52
- spec.add_runtime_dependency "metanorma-generic", "~> 3.0.0"
53
- spec.add_runtime_dependency "metanorma-standoc", "~> 3.0.0"
54
- # spec.add_runtime_dependency 'metanorma-mpfa', "~> 0.9.0"
55
- spec.add_runtime_dependency "git", "~> 1.5"
56
- spec.add_runtime_dependency "metanorma", "~> 2.1.0"
57
- spec.add_runtime_dependency "metanorma-iho", "~> 1.1.0"
58
- spec.add_runtime_dependency "metanorma-itu", "~> 2.6.0"
59
- # spec.add_runtime_dependency "metanorma-nist", "~> 2.6.0"
60
- spec.add_runtime_dependency "metanorma-ieee", "~> 1.4.0"
61
- spec.add_runtime_dependency "metanorma-jis", "~> 0.5.0"
62
- spec.add_runtime_dependency "metanorma-ogc", "~> 2.7.0"
63
- spec.add_runtime_dependency "metanorma-plateau", "~> 0.2.0"
64
- spec.add_runtime_dependency "relaton-cli", ">= 0.8.2"
65
-
66
- spec.add_runtime_dependency "socksify"
54
+ spec.add_dependency "socksify"
67
55
  # spec.metadata["rubygems_mfa_required"] = "true"
68
56
  # NOBODY UNCOMMENTS THIS WITHOUT EXPLAINING TO ME HOW TO USE MFA
69
57
  end
metadata CHANGED
@@ -1,183 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.1
4
+ version: 1.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-03-05 00:00:00.000000000 Z
11
+ date: 2025-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: debug
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '13.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '13.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec-command
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.0.3
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.0.3
69
- - !ruby/object:Gem::Dependency
70
- name: rspec-core
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.4'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.4'
83
- - !ruby/object:Gem::Dependency
84
- name: simplecov
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.15'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.15'
97
- - !ruby/object:Gem::Dependency
98
- name: vcr
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 6.1.0
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 6.1.0
111
- - !ruby/object:Gem::Dependency
112
- name: webmock
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1'
139
- - !ruby/object:Gem::Dependency
140
- name: rubocop-performance
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: sassc-embedded
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: xml-c14n
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
13
  - !ruby/object:Gem::Dependency
182
14
  name: metanorma-ietf
183
15
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +150,20 @@ dependencies:
318
150
  - - "~>"
319
151
  - !ruby/object:Gem::Version
320
152
  version: '1.5'
153
+ - !ruby/object:Gem::Dependency
154
+ name: lutaml-model
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
321
167
  - !ruby/object:Gem::Dependency
322
168
  name: metanorma
323
169
  requirement: !ruby/object:Gem::Requirement
@@ -360,6 +206,20 @@ dependencies:
360
206
  - - "~>"
361
207
  - !ruby/object:Gem::Version
362
208
  version: 2.6.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: liquid
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '5'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '5'
363
223
  - !ruby/object:Gem::Dependency
364
224
  name: metanorma-ieee
365
225
  requirement: !ruby/object:Gem::Requirement
@@ -408,14 +268,14 @@ dependencies:
408
268
  requirements:
409
269
  - - "~>"
410
270
  - !ruby/object:Gem::Version
411
- version: 0.2.0
271
+ version: 1.0.0
412
272
  type: :runtime
413
273
  prerelease: false
414
274
  version_requirements: !ruby/object:Gem::Requirement
415
275
  requirements:
416
276
  - - "~>"
417
277
  - !ruby/object:Gem::Version
418
- version: 0.2.0
278
+ version: 1.0.0
419
279
  - !ruby/object:Gem::Dependency
420
280
  name: relaton-cli
421
281
  requirement: !ruby/object:Gem::Requirement
@@ -489,6 +349,7 @@ files:
489
349
  - lib/metanorma/cli/ui.rb
490
350
  - lib/metanorma/cli/version.rb
491
351
  - lib/metanorma/flavor.rb
352
+ - lib/metanorma/site_manifest.rb
492
353
  - metanorma-cli.gemspec
493
354
  - templates/base/Gemfile
494
355
  - templates/base/metanorma.yml